diff --git a/sourcemap.json b/sourcemap.json index c604ce7..75202a4 100644 --- a/sourcemap.json +++ b/sourcemap.json @@ -1 +1 @@ -{"name":"ElevatorGame","className":"DataModel","filePaths":["default.project.json"],"children":[{"name":"ReplicatedFirst","className":"ReplicatedFirst","children":[{"name":"intro","className":"LocalScript","filePaths":["src/load/intro/init.client.lua"],"children":[{"name":"IntroGui","className":"ModuleScript","filePaths":["src/load/intro/IntroGui.lua"]}]}]},{"name":"ReplicatedStorage","className":"ReplicatedStorage","children":[{"name":"Algebra","className":"ModuleScript","filePaths":["src/shared/Algebra.lua"]},{"name":"Client","className":"Folder","children":[{"name":"Camera","className":"ModuleScript","filePaths":["src/shared/Client/Camera.lua"]},{"name":"KeyBinds","className":"ModuleScript","filePaths":["src/shared/Client/KeyBinds.lua"]}]},{"name":"Delta","className":"ModuleScript","filePaths":["src/shared/Delta.lua"]},{"name":"Enums","className":"ModuleScript","filePaths":["src/shared/Enums.lua"]},{"name":"Property","className":"ModuleScript","filePaths":["src/shared/Property.lua"]},{"name":"Server","className":"Folder","children":[{"name":"holder","className":"ModuleScript","filePaths":["src/shared/Server/holder.lua"]}]},{"name":"Tween","className":"ModuleScript","filePaths":["src/shared/Tween.lua"]}]},{"name":"ServerScriptService","className":"ServerScriptService","children":[{"name":"rapid/server","className":"Actor","children":[{"name":"main","className":"Script","filePaths":["src/server/main/init.server.lua"],"children":[{"name":"Elevators","className":"Folder","children":[{"name":"ButtonsManager","className":"ModuleScript","filePaths":["src/server/main/Elevators/ButtonsManager.lua"]},{"name":"HallDisplays","className":"ModuleScript","filePaths":["src/server/main/Elevators/HallDisplays.lua"]},{"name":"Lanterns","className":"ModuleScript","filePaths":["src/server/main/Elevators/Lanterns.lua"]},{"name":"Mover","className":"ModuleScript","filePaths":["src/server/main/Elevators/Mover.lua"]},{"name":"Otis1960","className":"ModuleScript","filePaths":["src/server/main/Elevators/Otis1960/init.lua"],"children":[{"name":"Doors","className":"ModuleScript","filePaths":["src/server/main/Elevators/Otis1960/Doors.lua"]},{"name":"Leveling","className":"ModuleScript","filePaths":["src/server/main/Elevators/Otis1960/Leveling.lua"]},{"name":"MovingObjects","className":"ModuleScript","filePaths":["src/server/main/Elevators/Otis1960/MovingObjects.lua"]},{"name":"RelayAlgorithm","className":"ModuleScript","filePaths":["src/server/main/Elevators/Otis1960/RelayAlgorithm.lua"]}]},{"name":"TractionRopes","className":"ModuleScript","filePaths":["src/server/main/Elevators/TractionRopes.lua"]}]},{"name":"Enums","className":"Folder","children":[{"name":"Sounds","className":"ModuleScript","filePaths":["src/server/main/Enums/Sounds.lua"]}]},{"name":"Lighting","className":"ModuleScript","filePaths":["src/server/main/Lighting/init.lua"]},{"name":"Load","className":"Folder","children":[{"name":"EditorEntities","className":"ModuleScript","filePaths":["src/server/main/Load/EditorEntities.lua"]},{"name":"StarterPlayer","className":"ModuleScript","filePaths":["src/server/main/Load/StarterPlayer.lua"]},{"name":"Tags","className":"ModuleScript","filePaths":["src/server/main/Load/Tags/init.lua"],"children":[{"name":"Buttons","className":"ModuleScript","filePaths":["src/server/main/Load/Tags/Buttons.lua"]},{"name":"Lights","className":"ModuleScript","filePaths":["src/server/main/Load/Tags/Lights.lua"]}]},{"name":"Workspace","className":"ModuleScript","filePaths":["src/server/main/Load/Workspace.lua"]}]},{"name":"Map","className":"Folder","children":[{"name":"Interactions","className":"Folder","children":[{"name":"LightSwitches","className":"ModuleScript","filePaths":["src/server/main/Map/Interactions/LightSwitches.lua"]}]},{"name":"Prompts","className":"ModuleScript","filePaths":["src/server/main/Map/Prompts.lua"]}]},{"name":"PlayerAdded","className":"ModuleScript","filePaths":["src/server/main/PlayerAdded/init.lua"],"children":[{"name":"Character","className":"ModuleScript","filePaths":["src/server/main/PlayerAdded/Character/init.lua"],"children":[{"name":"Actions","className":"ModuleScript","filePaths":["src/server/main/PlayerAdded/Character/Actions.lua"]},{"name":"Flashlight","className":"ModuleScript","filePaths":["src/server/main/PlayerAdded/Character/Flashlight.lua"]},{"name":"Shadows","className":"ModuleScript","filePaths":["src/server/main/PlayerAdded/Character/Shadows.lua"]},{"name":"SpineKinematics","className":"ModuleScript","filePaths":["src/server/main/PlayerAdded/Character/SpineKinematics.lua"]}]},{"name":"Users","className":"ModuleScript","filePaths":["src/server/main/PlayerAdded/Users.lua"]}]}]}]}]},{"name":"StarterPlayer","className":"StarterPlayer","children":[{"name":"StarterPlayerScripts","className":"StarterPlayerScripts","children":[{"name":"rapid/client","className":"Folder","children":[{"name":"Player","className":"LocalScript","filePaths":["src/client/init.client.lua"],"children":[{"name":"Character","className":"ModuleScript","filePaths":["src/client/Character/init.lua"],"children":[{"name":"Actions","className":"ModuleScript","filePaths":["src/client/Character/Actions.lua"]},{"name":"Camera","className":"ModuleScript","filePaths":["src/client/Character/Camera/init.lua"],"children":[{"name":"Bobbing","className":"ModuleScript","filePaths":["src/client/Character/Camera/Bobbing.lua"]}]},{"name":"Humanoid","className":"ModuleScript","filePaths":["src/client/Character/Humanoid.lua"]},{"name":"HumanoidRootPart","className":"ModuleScript","filePaths":["src/client/Character/HumanoidRootPart.lua"]},{"name":"SpineKinematics","className":"ModuleScript","filePaths":["src/client/Character/SpineKinematics.lua"]}]},{"name":"CoreGuis","className":"ModuleScript","filePaths":["src/client/CoreGuis.lua"]},{"name":"GuiService","className":"ModuleScript","filePaths":["src/client/GuiService.lua"]},{"name":"Mouse","className":"ModuleScript","filePaths":["src/client/Mouse.lua"]},{"name":"UI","className":"Folder","children":[{"name":"Crosshair","className":"ModuleScript","filePaths":["src/client/UI/Crosshair.lua"]},{"name":"Health","className":"ModuleScript","filePaths":["src/client/UI/Health.lua"]},{"name":"Vignette","className":"ModuleScript","filePaths":["src/client/UI/Vignette.lua"]}]}]}]}]}]}]} \ No newline at end of file +{"name":"ElevatorGame","className":"DataModel","filePaths":["default.project.json"],"children":[{"name":"ReplicatedFirst","className":"ReplicatedFirst","children":[{"name":"intro","className":"LocalScript","filePaths":["src/load/intro/init.client.lua"],"children":[{"name":"IntroGui","className":"ModuleScript","filePaths":["src/load/intro/IntroGui.lua"]}]}]},{"name":"ReplicatedStorage","className":"ReplicatedStorage","children":[{"name":"Algebra","className":"ModuleScript","filePaths":["src/shared/Algebra.lua"]},{"name":"Client","className":"Folder","children":[{"name":"Camera","className":"ModuleScript","filePaths":["src/shared/Client/Camera.lua"]},{"name":"KeyBinds","className":"ModuleScript","filePaths":["src/shared/Client/KeyBinds.lua"]}]},{"name":"Delta","className":"ModuleScript","filePaths":["src/shared/Delta.lua"]},{"name":"Enums","className":"ModuleScript","filePaths":["src/shared/Enums.lua"]},{"name":"Property","className":"ModuleScript","filePaths":["src/shared/Property.lua"]},{"name":"Server","className":"Folder","children":[{"name":"holder","className":"ModuleScript","filePaths":["src/shared/Server/holder.lua"]}]},{"name":"Tween","className":"ModuleScript","filePaths":["src/shared/Tween.lua"]}]},{"name":"ServerScriptService","className":"ServerScriptService","children":[{"name":"rapid/server","className":"Actor","children":[{"name":"main","className":"Script","filePaths":["src/server/main/init.server.lua"],"children":[{"name":"Elevators","className":"Folder","children":[{"name":"ButtonsManager","className":"ModuleScript","filePaths":["src/server/main/Elevators/ButtonsManager.lua"]},{"name":"HallDisplays","className":"ModuleScript","filePaths":["src/server/main/Elevators/HallDisplays.lua"]},{"name":"Lanterns","className":"ModuleScript","filePaths":["src/server/main/Elevators/Lanterns.lua"]},{"name":"Mover","className":"ModuleScript","filePaths":["src/server/main/Elevators/Mover.lua"]},{"name":"Otis1960","className":"ModuleScript","filePaths":["src/server/main/Elevators/Otis1960/init.lua"],"children":[{"name":"Doors","className":"ModuleScript","filePaths":["src/server/main/Elevators/Otis1960/Doors.lua"]},{"name":"Leveling","className":"ModuleScript","filePaths":["src/server/main/Elevators/Otis1960/Leveling.lua"]},{"name":"MovingObjects","className":"ModuleScript","filePaths":["src/server/main/Elevators/Otis1960/MovingObjects.lua"]},{"name":"Relay","className":"ModuleScript","filePaths":["src/server/main/Elevators/Otis1960/Relay.lua"]},{"name":"RelayAlgorithm","className":"ModuleScript","filePaths":["src/server/main/Elevators/Otis1960/RelayAlgorithm.lua"]}]},{"name":"TractionRopes","className":"ModuleScript","filePaths":["src/server/main/Elevators/TractionRopes.lua"]}]},{"name":"Enums","className":"Folder","children":[{"name":"Sounds","className":"ModuleScript","filePaths":["src/server/main/Enums/Sounds.lua"]}]},{"name":"Lighting","className":"ModuleScript","filePaths":["src/server/main/Lighting/init.lua"]},{"name":"Load","className":"Folder","children":[{"name":"EditorEntities","className":"ModuleScript","filePaths":["src/server/main/Load/EditorEntities.lua"]},{"name":"StarterPlayer","className":"ModuleScript","filePaths":["src/server/main/Load/StarterPlayer.lua"]},{"name":"Tags","className":"ModuleScript","filePaths":["src/server/main/Load/Tags/init.lua"],"children":[{"name":"Buttons","className":"ModuleScript","filePaths":["src/server/main/Load/Tags/Buttons.lua"]},{"name":"Lights","className":"ModuleScript","filePaths":["src/server/main/Load/Tags/Lights.lua"]}]},{"name":"Workspace","className":"ModuleScript","filePaths":["src/server/main/Load/Workspace.lua"]}]},{"name":"Map","className":"Folder","children":[{"name":"Interactions","className":"Folder","children":[{"name":"LightSwitches","className":"ModuleScript","filePaths":["src/server/main/Map/Interactions/LightSwitches.lua"]}]},{"name":"Prompts","className":"ModuleScript","filePaths":["src/server/main/Map/Prompts.lua"]}]},{"name":"PlayerAdded","className":"ModuleScript","filePaths":["src/server/main/PlayerAdded/init.lua"],"children":[{"name":"Character","className":"ModuleScript","filePaths":["src/server/main/PlayerAdded/Character/init.lua"],"children":[{"name":"Actions","className":"ModuleScript","filePaths":["src/server/main/PlayerAdded/Character/Actions.lua"]},{"name":"Flashlight","className":"ModuleScript","filePaths":["src/server/main/PlayerAdded/Character/Flashlight.lua"]},{"name":"Shadows","className":"ModuleScript","filePaths":["src/server/main/PlayerAdded/Character/Shadows.lua"]},{"name":"SpineKinematics","className":"ModuleScript","filePaths":["src/server/main/PlayerAdded/Character/SpineKinematics.lua"]}]},{"name":"Users","className":"ModuleScript","filePaths":["src/server/main/PlayerAdded/Users.lua"]}]}]}]}]},{"name":"StarterPlayer","className":"StarterPlayer","children":[{"name":"StarterPlayerScripts","className":"StarterPlayerScripts","children":[{"name":"rapid/client","className":"Folder","children":[{"name":"Player","className":"LocalScript","filePaths":["src/client/init.client.lua"],"children":[{"name":"Character","className":"ModuleScript","filePaths":["src/client/Character/init.lua"],"children":[{"name":"Actions","className":"ModuleScript","filePaths":["src/client/Character/Actions.lua"]},{"name":"Camera","className":"ModuleScript","filePaths":["src/client/Character/Camera/init.lua"],"children":[{"name":"Bobbing","className":"ModuleScript","filePaths":["src/client/Character/Camera/Bobbing.lua"]}]},{"name":"Humanoid","className":"ModuleScript","filePaths":["src/client/Character/Humanoid.lua"]},{"name":"HumanoidRootPart","className":"ModuleScript","filePaths":["src/client/Character/HumanoidRootPart.lua"]},{"name":"SpineKinematics","className":"ModuleScript","filePaths":["src/client/Character/SpineKinematics.lua"]}]},{"name":"CoreGuis","className":"ModuleScript","filePaths":["src/client/CoreGuis.lua"]},{"name":"GuiService","className":"ModuleScript","filePaths":["src/client/GuiService.lua"]},{"name":"Mouse","className":"ModuleScript","filePaths":["src/client/Mouse.lua"]},{"name":"UI","className":"Folder","children":[{"name":"Crosshair","className":"ModuleScript","filePaths":["src/client/UI/Crosshair.lua"]},{"name":"Health","className":"ModuleScript","filePaths":["src/client/UI/Health.lua"]},{"name":"Vignette","className":"ModuleScript","filePaths":["src/client/UI/Vignette.lua"]}]}]}]}]}]}]} \ No newline at end of file diff --git a/src/server/main/Elevators/Otis1960/Doors.lua b/src/server/main/Elevators/Otis1960/Doors.lua index f2d9ff9..673531f 100644 --- a/src/server/main/Elevators/Otis1960/Doors.lua +++ b/src/server/main/Elevators/Otis1960/Doors.lua @@ -36,7 +36,9 @@ type Impl_Static_Props = { __DontLeakMemory: RBXScriptConnection?, Attributes: { - Open: BoolValue + Relay: { + Open: BoolValue + } } } type Constructor_Return_Props = { @@ -67,10 +69,12 @@ Doors.ElevatorDoorTime = 4 Doors.ElevatorDoorStyle = Enum.EasingStyle.Quad Doors.Attributes = { - Open = Instance.new("BoolValue") :: BoolValue + Relay = { + Open = Instance.new("BoolValue") :: BoolValue + } } -Doors.Attributes.Open.Value = false +Doors.Attributes.Relay.Open.Value = false local Attributes = Doors.Attributes @@ -246,7 +250,7 @@ end function Doors:__DetectSensorHit(DoorTween1, DoorTween2) local Step = nil - if Doors.Sensors and Attributes.Open.Value then + if Doors.Sensors and Attributes.Relay.Open.Value then raycastParams.FilterDescendantsInstances = {self.ElevatorBox, table.unpack(RayIgnoring)} Step = RS.Heartbeat:Connect(function(_dt) @@ -268,12 +272,12 @@ end function Doors:ToggleElevatorDoorsAsync(opening, floor) --short circuiting central if opening then - if Attributes.Open.Value then + if Attributes.Relay.Open.Value then warn("Doors are already closed, doing nothing") return end else - if not Attributes.Open.Value then + if not Attributes.Relay.Open.Value then warn("Doors are already open, doing nothing") return end @@ -288,10 +292,10 @@ function Doors:ToggleElevatorDoorsAsync(opening, floor) if Door2Tween then Door2Tween.Completed:Wait() - Attributes.Open.Value = opening ~= nil and opening or false + Attributes.Relay.Open.Value = opening ~= nil and opening or false elseif Door1Tween then Door1Tween.Completed:Wait() - Attributes.Open.Value = opening ~= nil and opening or false + Attributes.Relay.Open.Value = opening ~= nil and opening or false end self.ElevatorDoor1.CanCollide = true diff --git a/src/server/main/Elevators/Otis1960/Leveling.lua b/src/server/main/Elevators/Otis1960/Leveling.lua index 20964b5..c2f4f14 100644 --- a/src/server/main/Elevators/Otis1960/Leveling.lua +++ b/src/server/main/Elevators/Otis1960/Leveling.lua @@ -15,4 +15,13 @@ local Leveling: {number} = { [10] = 239.245, } -return Leveling \ No newline at end of file +local LevelingBetween: {number} = {} +--Calculate between leveling +for n: number = 1, #Leveling, 2 do + LevelingBetween[n] = (Leveling[n]+Leveling[n+1])/2 +end + +return { + Leveling = Leveling, + LevelingBetween = LevelingBetween +} \ No newline at end of file diff --git a/src/server/main/Elevators/Otis1960/Relay.lua b/src/server/main/Elevators/Otis1960/Relay.lua new file mode 100644 index 0000000..b4087a3 --- /dev/null +++ b/src/server/main/Elevators/Otis1960/Relay.lua @@ -0,0 +1,144 @@ +--!optimize 2 +--!native +--!strict + +local RelayAlgorithmModule = require(script.Parent:WaitForChild("RelayAlgorithm")) + +type Leveling = { + Leveling: {number}, + LevelingBetween: {number} +} +type ElevatorBox = BasePart +type BoxAlignPosition = AlignPosition + +type ClassConstructor = typeof(setmetatable({} :: Constructor_Return_Props, {} :: Impl_Constructor)) +type Impl_Constructor = { + __index: Impl_Constructor, + constructor: Constructor_Fun, + --Class functions + BulkConnect: (self: ClassConstructor) -> (), + BulkDisconnect: (self: ClassConstructor) -> (), + __Ready: (self: ClassConstructor) -> (), + __Open: (self: ClassConstructor) -> (), + __Goal: (self: ClassConstructor) -> (), + __GoalYLevel: (self: ClassConstructor) -> (), +} + +type Constructor_Fun = (RelayAlgorthm: RelayAlgorithmModule.RelayAlgorithmConstructor, ElevatorAttributes: ElevatorAttributes, DoorAttributes: DoorAttributes, Leveling: Leveling, BoxAlignPosition: BoxAlignPosition, ElevatorBox: ElevatorBox) -> ClassConstructor + +type Constructor_Return_Props = { + RelayAlgorthm: RelayAlgorithmModule.RelayAlgorithmConstructor, + ElevatorAttributes: ElevatorAttributes, + DoorAttributes: DoorAttributes, + LevelingModule: Leveling, + BoxAlignPosition: BoxAlignPosition, + ElevatorBox: ElevatorBox, + + __ReadyConnection: RBXScriptConnection?, + __OpenConnection: RBXScriptConnection?, + __GoalYLevelConnection: RBXScriptConnection?, + __GoalConnection: RBXScriptConnection?, +} + +type ElevatorAttributes = { + Relay: { + Ready: BoolValue, + GoalYLevel: NumberValue, + Goal: IntValue + }, + + Stopped: BoolValue +} + +type DoorAttributes = { + Relay: { + Open: BoolValue + } +} + +export type RelayConstructor = ClassConstructor + +local Relay = {} :: Impl_Constructor +Relay.__index = Relay + +function Relay.constructor(RelayAlgorthm, ElevatorAttributes, DoorAttributes, LevelingModule, BoxAlignPosition, ElevatorBox) + return setmetatable({ + RelayAlgorthm = RelayAlgorthm, + ElevatorAttributes = ElevatorAttributes, + DoorAttributes = DoorAttributes, + LevelingModule = LevelingModule, + BoxAlignPosition = BoxAlignPosition, + ElevatorBox = ElevatorBox + }, Relay) +end + +function Relay:__Ready() + if self.ElevatorAttributes.Relay.Ready.Value then + self.BoxAlignPosition.Position = Vector3.new( + self.ElevatorBox.Position.X, + self.LevelingModule.Leveling[self.RelayAlgorthm.__FloorQueue[1]], + self.ElevatorBox.Position.Z + ) + end +end + +function Relay:__Open() + self.ElevatorAttributes.Relay.Ready.Value = self.DoorAttributes.Relay.Open.Value +end + +function Relay:__GoalYLevel() + self.BoxAlignPosition.Position = Vector3.new( + self.ElevatorBox.Position.X, + self.ElevatorAttributes.Relay.GoalYLevel.Value, + self.ElevatorBox.Position.Z + ) +end + +function Relay:__Goal() + local Level: number? = self.LevelingModule.Leveling[self.ElevatorAttributes.Relay.Goal.Value] + + self.ElevatorAttributes.Relay.GoalYLevel.Value = Level or self.LevelingModule.Leveling[1] :: number +end + +function Relay:BulkConnect() + self.__ReadyConnection = self.ElevatorAttributes.Relay.Ready:GetPropertyChangedSignal("Value"):Connect(function() + if not self.ElevatorAttributes.Stopped.Value then + self:__Ready() + end + end) + + self.__OpenConnection = self.DoorAttributes.Relay.Open:GetPropertyChangedSignal("Value"):Connect(function() + if not self.ElevatorAttributes.Stopped.Value then + self:__Open() + end + end) + + self.__GoalYLevelConnection = self.ElevatorAttributes.Relay.GoalYLevel:GetPropertyChangedSignal("Value"):Connect(function() + if not self.ElevatorAttributes.Stopped.Value then + self:__GoalYLevel() + end + end) + + self.__GoalConnection = self.ElevatorAttributes.Relay.Goal:GetPropertyChangedSignal("Value"):Connect(function() + if not self.ElevatorAttributes.Stopped.Value then + self:__Goal() + end + end) +end + +function Relay:BulkDisconnect() + if self.__ReadyConnection and self.__ReadyConnection.Connected then + self.__ReadyConnection:Disconnect() + end + if self.__OpenConnection and self.__OpenConnection.Connected then + self.__OpenConnection:Disconnect() + end + if self.__GoalYLevelConnection and self.__GoalYLevelConnection.Connected then + self.__GoalYLevelConnection:Disconnect() + end + if self.__GoalConnection and self.__GoalConnection.Connected then + self.__GoalConnection:Disconnect() + end +end + +return Relay \ No newline at end of file diff --git a/src/server/main/Elevators/Otis1960/init.lua b/src/server/main/Elevators/Otis1960/init.lua index ff73520..3284b94 100644 --- a/src/server/main/Elevators/Otis1960/init.lua +++ b/src/server/main/Elevators/Otis1960/init.lua @@ -32,10 +32,11 @@ local ButtonTags = require(TagsDir:WaitForChild("Buttons")) local Enums = require(Storage:WaitForChild("Enums")) local SoundEnums = require(EnumsDir:WaitForChild("Sounds")) -local Leveling = require(script:WaitForChild("Leveling")) +local LevelingModule = require(script:WaitForChild("Leveling")) local Doors = require(script:WaitForChild("Doors")) local MovingObjects = require(script:WaitForChild("MovingObjects")) local RelayAlgorithm = require(script:WaitForChild("RelayAlgorithm")) +local Relay = require(script:WaitForChild("Relay")) local HallDisplays = require(Elevators:WaitForChild("HallDisplays")) local ElevatorMover = require(Elevators:WaitForChild("Mover")) @@ -123,6 +124,7 @@ type Constructor_Return_Props = { HallDisplays: {Instance}, ButtonsConstructor: Buttons.ButtonsConstructor, RelayAlgorithmConstructor: RelayAlgorithm.RelayAlgorithmConstructor, + RelayConstructor: Relay.RelayConstructor, __MovingConnection: RBXScriptConnection?, } @@ -233,7 +235,7 @@ local function HookButtons(self: ClassConstructor, ButtonNameType: Enums.ButtonT (ButtonTree.Inst :: BasePart).Position-=Vector3.new(0,0,.05) self.LanternsConstructor:Reset() - self:__MoveTo(ElevatorGoingUpDirection(Attributes.CurrentFloor.Value, Attributes.Relay.Goal.Value), Leveling[self.RelayAlgorithmConstructor.__FloorQueue[1]]) + self:__MoveTo(ElevatorGoingUpDirection(Attributes.CurrentFloor.Value, Attributes.Relay.Goal.Value), LevelingModule.Leveling[self.RelayAlgorithmConstructor.__FloorQueue[1]]) self.BoxAlignPosition.MaxVelocity = Elevator.MaxVelocity end end) @@ -251,50 +253,15 @@ end local function IterateButtons(self: ClassConstructor, ButtonsTagsConstructor: ButtonTags.ButtonsTagsConstructor) for ButtonNameType, ButtonList in ButtonsTagsConstructor.Buttons do for ButtonID, ButtonTree in ButtonList do - if ButtonTree.Prompt then - if ButtonTree.Inst then - if ButtonTree.Attachment then - HookButtons(self, ButtonNameType :: Enums.ButtonTreeValues, ButtonID, ButtonTree :: Tags.ButtonPropertiesSafe) - else - warn(`{ButtonTree} is missing the field "Attachment"`) - end - else - warn(`{ButtonTree} is missing the field "Inst"`) - end + if ButtonTree.Prompt and ButtonTree.Inst and ButtonTree.Attachment then + HookButtons(self, ButtonNameType :: Enums.ButtonTreeValues, ButtonID, ButtonTree :: Tags.ButtonPropertiesSafe) else - warn(`{ButtonTree} is missing the field "Prompt"`) + warn(`{ButtonTree} is missing a field, {ButtonTree}`) end end end end -local function ElevatorReactionEvents(self: ClassConstructor) - --This is how the elevator logic works with the elevator itself - Attributes.Relay.Ready:GetPropertyChangedSignal("Value"):Connect(function() - if not Attributes.Stopped.Value and Attributes.Relay.Ready.Value then - self.BoxAlignPosition.Position = Vector3.new(self.ElevatorBox_1960.Position.X, Leveling[self.RelayAlgorithmConstructor.__FloorQueue[1]], self.ElevatorBox_1960.Position.Z) - end - end) - Doors.Attributes.Open:GetPropertyChangedSignal("Value"):Connect(function() - if not Attributes.Stopped.Value then - Attributes.Relay.Ready.Value = Doors.Attributes.Open.Value - end - end) - - Attributes.Relay.GoalYLevel:GetPropertyChangedSignal("Value"):Connect(function() - if not Attributes.Stopped.Value then - self.BoxAlignPosition.Position = Vector3.new(self.ElevatorBox_1960.Position.X, Attributes.Relay.GoalYLevel.Value, self.ElevatorBox_1960.Position.Z) - end - end) - Attributes.Relay.Goal:GetPropertyChangedSignal("Value"):Connect(function() - if not Attributes.Stopped.Value then - local Level: number? = Leveling[Attributes.Relay.Goal.Value] - - Attributes.Relay.GoalYLevel.Value = Level or Leveling[1] - end - end) -end - function Elevator.constructor(TagsConstructor, ButtonsTags, LanternsTags, LandingDoors) local self = {} :: Constructor_Return_Props @@ -322,7 +289,7 @@ function Elevator.constructor(TagsConstructor, ButtonsTags, LanternsTags, Landin } :: MovingObjects.InstanceTree) self.HallDisplaysConstructor = HallDisplays.constructor(Attributes.CurrentFloor, self.HallDisplays) self.ElevatorDoorsConstructor = Doors.constructor(LandingDoors, self.ElevatorBox_1960, self.ElevatorDoor1, self.ElevatorDoor2, self.ElevatorDoorSensor) - self.TractionRopesConstructor = TractionRopes.constructor(self.Ropes, self.ElevatorBox_1960, Leveling) + self.TractionRopesConstructor = TractionRopes.constructor(self.Ropes, self.ElevatorBox_1960, LevelingModule.Leveling) self.LanternsConstructor = Lanterns.constructor(LanternDisplay, LanternsTags, Elevator.Sounds, Elevator.Colors) @@ -337,7 +304,10 @@ function Elevator.constructor(TagsConstructor, ButtonsTags, LanternsTags, Landin self.BoxAlignPosition, self.BoxAlignOrientation = ElevatorMover(self.ElevatorBox_1960, self.ElevatorBox_1960.Position, Elevator.Responsiveness, Elevator.MaxVelocity) - self.RelayAlgorithmConstructor = RelayAlgorithm.constructor(self.BoxAlignPosition, Attributes, Doors.Attributes) + self.RelayAlgorithmConstructor = RelayAlgorithm.constructor(self.BoxAlignPosition, Attributes, Doors.Attributes.Relay) + self.RelayConstructor = Relay.constructor(self.RelayAlgorithmConstructor, Attributes, Doors.Attributes, LevelingModule, self.BoxAlignPosition, self.ElevatorBox_1960) + + self.RelayConstructor:BulkConnect() local ClassConstructor = setmetatable(self, Elevator) IterateButtons(ClassConstructor, ButtonsTagsConstructor) @@ -349,10 +319,10 @@ function Elevator.constructor(TagsConstructor, ButtonsTags, LanternsTags, Landin self.ElevatorDoorsConstructor:ToggleElevatorDoorsAsync(true, Attributes.CurrentFloor.Value) --Some hacks - Doors.Attributes.Open.Value = true + Doors.Attributes.Relay.Open.Value = true end) - ElevatorReactionEvents(self) + print(LevelingModule.LevelingBetween) print(`🔝 {Elevator.Name} initialized and ready`) return ClassConstructor @@ -371,7 +341,7 @@ function Elevator:Leveled(RequestedLevel) if self.RelayAlgorithmConstructor:Check(ElevatorGoingUp) then --More floors in the queue - self:__MoveTo(ElevatorGoingUp, Leveling[self.RelayAlgorithmConstructor.__FloorQueue[1]]) + self:__MoveTo(ElevatorGoingUp, LevelingModule.Leveling[self.RelayAlgorithmConstructor.__FloorQueue[1]]) end end @@ -381,7 +351,7 @@ function Elevator:Leveling(RequestedLevel) end function Elevator:FloorPassingUp(ElevatorPositionY, RequestedLevel) - if ElevatorPositionY>=Leveling[Attributes.CurrentFloor.Value+1] then + if ElevatorPositionY>=LevelingModule.Leveling[Attributes.CurrentFloor.Value+1] then Attributes.CurrentFloor.Value+=1 self.LanternsConstructor:Toggle(true, Attributes.CurrentFloor.Value) @@ -390,7 +360,7 @@ function Elevator:FloorPassingUp(ElevatorPositionY, RequestedLevel) end function Elevator:FloorPassingDown(ElevatorPositionY, RequestedLevel) - if ElevatorPositionY<=Leveling[Attributes.CurrentFloor.Value-1] then + if ElevatorPositionY<=LevelingModule.Leveling[Attributes.CurrentFloor.Value-1] then Attributes.CurrentFloor.Value-=1 self.LanternsConstructor:Toggle(true, Attributes.CurrentFloor.Value) @@ -460,7 +430,7 @@ function Elevator:__MovingHeartbeat(GoingUp, GoalFloor_Y) end function Elevator:__MoveTo(GoingUp, GoalFloor_Y) - if Doors.Attributes.Open.Value then + if Doors.Attributes.Relay.Open.Value then self.ElevatorDoorsConstructor:ToggleElevatorDoorsAsync(false, Attributes.CurrentFloor.Value) end if GoingUp then @@ -473,7 +443,7 @@ function Elevator:__MoveTo(GoingUp, GoalFloor_Y) end function Elevator:RequestLevel(RequestedLevel) - local GoalFloor_Y: number? = Leveling[RequestedLevel] + local GoalFloor_Y: number? = LevelingModule.Leveling[RequestedLevel] if GoalFloor_Y and RequestedLevel ~= Attributes.CurrentFloor.Value then local ElevatorGoingUp = ElevatorGoingUpDirection(Attributes.CurrentFloor.Value, RequestedLevel)