mirror of
https://github.com/unixtensor/Roblox-Elevator-Game.git
synced 2025-12-14 06:41:55 +00:00
File diff suppressed because one or more lines are too long
@@ -20,8 +20,8 @@ ElevatorConfig.FloorLeveling3PhaseDistance = 1.5
|
||||
ElevatorConfig.LevelingVelocity = .5
|
||||
ElevatorConfig.Phase3LevelingVelocity = .5
|
||||
ElevatorConfig.ParkedDistance = 0.2
|
||||
ElevatorConfig.Responsiveness = 5
|
||||
ElevatorConfig.MaxVelocity = 7
|
||||
ElevatorConfig.Responsiveness = 5
|
||||
ElevatorConfig.MaxVelocity = 7
|
||||
|
||||
ElevatorConfig.Functions = {
|
||||
ManualTravelStart = true
|
||||
@@ -35,40 +35,45 @@ ElevatorConfig.Colors = {
|
||||
ButtonDeactivated = {
|
||||
Color = Color3.fromRGB(136,143,145),
|
||||
Material = Enum.Material.SmoothPlastic
|
||||
},
|
||||
LanternIndicator = {
|
||||
On = {
|
||||
Up = {
|
||||
Color = Color3.fromRGB(44,255,157),
|
||||
Material = Enum.Material.Neon
|
||||
},
|
||||
Down = {
|
||||
Color = Color3.fromRGB(255,29,101),
|
||||
Material = Enum.Material.Neon
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
ElevatorConfig.Lanterns = {
|
||||
On = {
|
||||
Up = {
|
||||
Color = Color3.fromRGB(44,255,157),
|
||||
Material = Enum.Material.Neon,
|
||||
Time = 1
|
||||
},
|
||||
Down = {
|
||||
Color = Color3.fromRGB(255, 56, 59),
|
||||
Material = Enum.Material.Neon,
|
||||
Time = 1
|
||||
},
|
||||
},
|
||||
Off = {
|
||||
Up = {
|
||||
Color = Color3.fromRGB(172,174,197),
|
||||
Material = Enum.Material.SmoothPlastic,
|
||||
Time = 1
|
||||
},
|
||||
Down = {
|
||||
Color = Color3.fromRGB(172,174,197),
|
||||
Material = Enum.Material.SmoothPlastic,
|
||||
Time = 1
|
||||
},
|
||||
Off = {
|
||||
Up = {
|
||||
Color = Color3.fromRGB(172,174,197),
|
||||
Material = Enum.Material.SmoothPlastic
|
||||
},
|
||||
Down = {
|
||||
Color = Color3.fromRGB(172,174,197),
|
||||
Material = Enum.Material.SmoothPlastic
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
local DoorsConfig: ElevatorTypes.DoorsConfig = {
|
||||
Cab = {
|
||||
Type = DoorEnums.Door.DoubleSpeed,
|
||||
Time = 4,
|
||||
Time = 5,
|
||||
Goal = Vector3.new(4.027)
|
||||
},
|
||||
Landing = {
|
||||
Type = DoorEnums.Door.SingleSpeed,
|
||||
Time = 4,
|
||||
Time = 5,
|
||||
Goal = Vector3.new(4.221)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,8 +5,11 @@ local ParentDir = script.Parent
|
||||
local ElevatorsDir = ParentDir.Parent.Parent
|
||||
local MainDir = ElevatorsDir.Parent
|
||||
|
||||
local ElevatorSystem = ElevatorsDir:WaitForChild("System")
|
||||
|
||||
local ArrowLanterns = require(ElevatorSystem:WaitForChild("Lanterns"):WaitForChild("Arrows"))
|
||||
local ButtonEvents = require(script:WaitForChild("Buttons"))
|
||||
local InitElevator = require(ElevatorsDir:WaitForChild("System"))
|
||||
local InitElevator = require(ElevatorSystem)
|
||||
local Doors = require(ParentDir:WaitForChild("Doors"))
|
||||
local Buttons = require(ParentDir:WaitForChild("Buttons"))
|
||||
local MovingObjects = require(ParentDir:WaitForChild("MovingObjects"))
|
||||
@@ -25,6 +28,7 @@ type Constructor_Fun = (
|
||||
ElevatorConstructor: InitElevator.constructor,
|
||||
ElevatorConfig: ElevatorTypes.ElevatorConfigurationTable,
|
||||
DoorsConstructor: Doors.constructor,
|
||||
ArrowLanternsConstructor: ArrowLanterns.constructor,
|
||||
ButtonsConstructor: Buttons.constructor,
|
||||
ElevatorBoxModel: BasePart,
|
||||
Leveling: {number},
|
||||
@@ -36,6 +40,7 @@ type Constructor_Return_Props = {
|
||||
ElevatorConstructor: InitElevator.constructor,
|
||||
ElevatorConfig: ElevatorTypes.ElevatorConfigurationTable,
|
||||
DoorsConstructor: Doors.constructor,
|
||||
ArrowLanternsConstructor: ArrowLanterns.constructor,
|
||||
ButtonsConstructor: Buttons.constructor,
|
||||
ElevatorBoxModel: BasePart,
|
||||
Leveling: {number},
|
||||
@@ -50,6 +55,7 @@ function Events.constructor(
|
||||
ElevatorConstructor,
|
||||
ElevatorConfig,
|
||||
DoorsConstructor,
|
||||
ArrowLanternsConstructor,
|
||||
ButtonsConstructor,
|
||||
ElevatorBoxModel,
|
||||
Leveling,
|
||||
@@ -60,6 +66,7 @@ function Events.constructor(
|
||||
ElevatorConstructor = ElevatorConstructor,
|
||||
ElevatorConfig = ElevatorConfig,
|
||||
DoorsConstructor = DoorsConstructor,
|
||||
ArrowLanternsConstructor = ArrowLanternsConstructor,
|
||||
ButtonsConstructor = ButtonsConstructor,
|
||||
ElevatorBoxModel = ElevatorBoxModel,
|
||||
Leveling = Leveling,
|
||||
@@ -68,6 +75,20 @@ function Events.constructor(
|
||||
}, Events)
|
||||
end
|
||||
|
||||
local function ElevatorAttributes(self: ClassConstructor)
|
||||
self.ElevatorConstructor.Attributes.TravelingUpwards:GetPropertyChangedSignal("Value"):Connect(function()
|
||||
if self.ElevatorConstructor.Attributes.TravelingUpwards.Value then
|
||||
self.ArrowLanternsConstructor:Toggle(true, true)
|
||||
self.ArrowLanternsConstructor:Toggle(false, false)
|
||||
else
|
||||
self.ArrowLanternsConstructor:Toggle(true, false)
|
||||
self.ArrowLanternsConstructor:Toggle(false, true)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
local RandNew = Random.new()
|
||||
|
||||
local function ElevatorEvents(self: ClassConstructor)
|
||||
self.ElevatorConstructor.Events.Traveling:Connect(function(_DeltaTime: number, CabPosition: Vector3)
|
||||
local CabVelocity = self.ElevatorBoxModel:GetVelocityAtPosition(CabPosition)
|
||||
@@ -102,7 +123,12 @@ local function ElevatorEvents(self: ClassConstructor)
|
||||
self.DoorsConstructor:OpenCabAsync()
|
||||
end
|
||||
self.MovingObjectsConstructor:RotateRelayCogs3()
|
||||
|
||||
self.ElevatorConfig.FloorLevelingDistance = 10
|
||||
print(self.ElevatorConfig.FloorLevelingDistance)
|
||||
end)
|
||||
|
||||
ElevatorAttributes(self)
|
||||
end
|
||||
|
||||
function Events:InitButtons()
|
||||
|
||||
@@ -1,13 +1,16 @@
|
||||
--!optimize 2
|
||||
--!strict
|
||||
|
||||
local ButtonPromptsDistance = Vector3.new(-.05,0,0)
|
||||
local ButtonPromptsDistance = Vector3.new(-.05)
|
||||
|
||||
local ParentDir = script.Parent
|
||||
local ElevatorsDir = ParentDir.Parent
|
||||
local MainDir = ElevatorsDir.Parent
|
||||
|
||||
local InitElevator = require(ElevatorsDir:WaitForChild("System"))
|
||||
local ElevatorSystem = ElevatorsDir:WaitForChild("System")
|
||||
|
||||
local InitElevator = require(ElevatorSystem)
|
||||
local ArrowLantern = require(ElevatorSystem:WaitForChild("Lanterns"):WaitForChild("Arrows"))
|
||||
local Events = require(script:WaitForChild("Events"))
|
||||
local Config = require(script:WaitForChild("Config"))
|
||||
local Buttons = require(script:WaitForChild("Buttons"))
|
||||
@@ -28,19 +31,24 @@ return function(TagsConstructor: TagsModule.TagsConstructor, ButtonTags: TagsMod
|
||||
local ButtonsConstructor = Buttons.constructor(Config.Elevator.Name, ButtonTags, Elevator.Attributes.CurrentFloor)
|
||||
ButtonsConstructor:InitForElevator(2, ButtonPromptsDistance)
|
||||
|
||||
local ArrowLanternConstructor = ArrowLantern.constructor(LanternTags, Config.Elevator)
|
||||
local TractionRopesConstructor = TractionRopes.constructor(CabRopesObject, PulleyRopesObject)
|
||||
local DoorsConstructor = Doors.constructor(Leveling, ElevatorBoxModel, Config.Doors, LandingDoorTags)
|
||||
local EventsConstructor = Events.constructor(
|
||||
Elevator,
|
||||
Config.Elevator,
|
||||
DoorsConstructor,
|
||||
ArrowLanternConstructor,
|
||||
ButtonsConstructor,
|
||||
ElevatorBoxModel,
|
||||
Leveling,
|
||||
MovingObjectsConstructor,
|
||||
TractionRopesConstructor
|
||||
)
|
||||
TractionRopesConstructor:Update()
|
||||
EventsConstructor:InitButtons()
|
||||
ArrowLanternConstructor:Toggle(true, true)
|
||||
|
||||
if DoorsConstructor:OpenAtFloor(Elevator.Attributes.CurrentFloor.Value) then
|
||||
DoorsConstructor:OpenCabAsync()
|
||||
end
|
||||
|
||||
65
src/server/main/Elevators/System/Lanterns/Arrows.luau
Normal file
65
src/server/main/Elevators/System/Lanterns/Arrows.luau
Normal file
@@ -0,0 +1,65 @@
|
||||
--!optimize 2
|
||||
--!strict
|
||||
|
||||
local MainDir = script.Parent.Parent.Parent.Parent
|
||||
local TagsModule = require(MainDir:WaitForChild("Map"):WaitForChild("Load"):WaitForChild("Tags"))
|
||||
local ElevatorTypes = require(MainDir:WaitForChild("Types"):WaitForChild("Elevator"))
|
||||
|
||||
local TS = game:GetService("TweenService")
|
||||
|
||||
type ClassConstructor = typeof(setmetatable({} :: Constructor_Return_Props, {} :: Impl_Constructor))
|
||||
type Impl_Constructor = {
|
||||
__index: Impl_Constructor,
|
||||
constructor: Constructor_Fun,
|
||||
--Class functions
|
||||
Toggle: (self: ClassConstructor, OnState: boolean, UpLantern: boolean) -> Tween?,
|
||||
Off: (self: ClassConstructor) -> (Tween?, Tween?),
|
||||
}
|
||||
|
||||
type Constructor_Fun = (Lanterns: TagsModule.Lanterns, ElevatorConfig: ElevatorTypes.ElevatorConfigurationTable) -> ClassConstructor
|
||||
type Constructor_Return_Props = {
|
||||
Lanterns: TagsModule.Lanterns,
|
||||
ElevatorConfig: ElevatorTypes.ElevatorConfigurationTable
|
||||
}
|
||||
|
||||
export type constructor = ClassConstructor
|
||||
|
||||
local ArrowLanterns = {} :: Impl_Constructor
|
||||
ArrowLanterns.__index = ArrowLanterns
|
||||
|
||||
function ArrowLanterns.constructor(Lanterns, ElevatorConfig)
|
||||
return setmetatable({
|
||||
Lanterns = Lanterns,
|
||||
ElevatorConfig = ElevatorConfig
|
||||
}, ArrowLanterns)
|
||||
end
|
||||
|
||||
function ArrowLanterns:Toggle(OnState, UpLantern)
|
||||
local LanternType = UpLantern and self.Lanterns.Up or self.Lanterns.Down
|
||||
if LanternType then
|
||||
--mega boolean short circuit
|
||||
local ConfigState = OnState and (UpLantern and self.ElevatorConfig.Lanterns.On.Up or self.ElevatorConfig.Lanterns.On.Down) or (UpLantern and self.ElevatorConfig.Lanterns.Off.Up or self.ElevatorConfig.Lanterns.Off.Down)
|
||||
|
||||
LanternType.Inst.Material = ConfigState.Material
|
||||
|
||||
local TweenTime = TweenInfo.new(ConfigState.Time, Enum.EasingStyle.Linear)
|
||||
local UpArrowTween = TS:Create(LanternType.Inst, TweenTime, {
|
||||
Color = ConfigState.Color
|
||||
})
|
||||
UpArrowTween:Play()
|
||||
TS:Create(LanternType.PointLight, TweenTime, {
|
||||
Brightness = OnState and 1 or 0
|
||||
}):Play()
|
||||
|
||||
return UpArrowTween
|
||||
else
|
||||
warn(`[{self.ElevatorConfig.Name}]: Could not toggle a direction lantern. UpLantern={UpLantern} OnState={OnState}, LaternType={LanternType}`)
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
function ArrowLanterns:Off()
|
||||
return self:Toggle(false, true), self:Toggle(false, false)
|
||||
end
|
||||
|
||||
return ArrowLanterns
|
||||
@@ -36,9 +36,7 @@ type Constructor_Return_Props = {
|
||||
|
||||
export type Lantern = {
|
||||
Inst: BasePart,
|
||||
Light: BasePart?,
|
||||
PointLight: PointLight?,
|
||||
Played: boolean
|
||||
}
|
||||
|
||||
export type ElevatorButtons = {
|
||||
@@ -225,35 +223,23 @@ function Tags:__ElevatorLanterns()
|
||||
|
||||
if Floor then
|
||||
if not Lanterns[EnumValue :: Enums.ElevatorValues][Floor] then
|
||||
local Light = ((Inst :: BasePart).Parent :: Instance):FindFirstChild("Light") :: BasePart?
|
||||
|
||||
Lanterns[EnumValue :: Enums.ElevatorValues][Floor] = {
|
||||
Inst = Inst :: BasePart,
|
||||
Light = Light,
|
||||
PointLight = Light and Light:FindFirstChildOfClass("PointLight") :: PointLight?,
|
||||
Played = false
|
||||
PointLight = (Inst :: BasePart):FindFirstChildWhichIsA("PointLight", true) :: PointLight?
|
||||
}
|
||||
else
|
||||
warn(`Lanterns: Floor "{tostring(Floor)}" was already wrote while parsing`)
|
||||
end
|
||||
else
|
||||
if FloorHint == "Up" then
|
||||
local Light = ((Inst :: BasePart).Parent :: Instance):FindFirstChild("Light") :: BasePart?
|
||||
|
||||
Lanterns[EnumValue :: Enums.ElevatorValues].Up = {
|
||||
Inst = Inst :: BasePart,
|
||||
Light = Light,
|
||||
PointLight = Light and Light:FindFirstChildOfClass("PointLight") :: PointLight?,
|
||||
Played = false
|
||||
PointLight = (Inst :: BasePart):FindFirstChildWhichIsA("PointLight", true) :: PointLight?
|
||||
}
|
||||
elseif FloorHint == "Down" then
|
||||
local Light = ((Inst :: BasePart).Parent :: Instance):FindFirstChild("Light") :: BasePart?
|
||||
|
||||
Lanterns[EnumValue :: Enums.ElevatorValues].Down = {
|
||||
Inst = Inst :: BasePart,
|
||||
Light = Light,
|
||||
PointLight = Light and Light:FindFirstChildOfClass("PointLight") :: PointLight?,
|
||||
Played = false
|
||||
PointLight = (Inst :: BasePart):FindFirstChildWhichIsA("PointLight", true) :: PointLight?
|
||||
}
|
||||
else
|
||||
warn(`Lanterns: Unknown type paired with "DirectionIndicator", {FloorHint}`)
|
||||
|
||||
@@ -11,24 +11,27 @@ local DoorEnums = require(EnumsDir:WaitForChild("Doors"))
|
||||
local Enums = require(StorageService:WaitForChild("Enums"))
|
||||
local SoundEnums = require(EnumsDir:WaitForChild("Sounds"))
|
||||
|
||||
export type ButtonProperties = {
|
||||
export type ButtonProperties = {
|
||||
Color: Color3,
|
||||
Material: Enum.Material
|
||||
}
|
||||
|
||||
export type Colors = {
|
||||
export type ButtonColors = {
|
||||
ButtonActivated: ButtonProperties,
|
||||
ButtonDeactivated: ButtonProperties,
|
||||
LanternIndicator: {
|
||||
On: {
|
||||
Up: ButtonProperties,
|
||||
Down: ButtonProperties
|
||||
},
|
||||
Off: {
|
||||
Up: ButtonProperties,
|
||||
Down: ButtonProperties
|
||||
}
|
||||
}
|
||||
|
||||
export type LanternProperties = ButtonProperties & {Time: number}
|
||||
|
||||
export type Lanterns = {
|
||||
On: {
|
||||
Up: LanternProperties,
|
||||
Down: LanternProperties
|
||||
},
|
||||
Off: {
|
||||
Up: LanternProperties,
|
||||
Down: LanternProperties
|
||||
}
|
||||
}
|
||||
|
||||
export type ElevatorConfigurationTable = {
|
||||
@@ -48,7 +51,8 @@ export type ElevatorConfigurationTable = {
|
||||
LanternChimeDirection: SoundEnums.ElevatorSoundValues,
|
||||
LanternChimeLanding: SoundEnums.ElevatorSoundValues,
|
||||
},
|
||||
Colors: Colors,
|
||||
Colors: ButtonColors,
|
||||
Lanterns: Lanterns
|
||||
}
|
||||
|
||||
export type DoorsConfigProperties = {
|
||||
|
||||
Reference in New Issue
Block a user