From d6b1da04e10d18de1545bbc589e1f9cbaffea949 Mon Sep 17 00:00:00 2001 From: unittensor Date: Sun, 21 Jul 2024 23:29:33 -0400 Subject: [PATCH] d --- sourcemap.json | 2 +- .../InitElevator/RelayAlgorithm.luau | 21 ++- .../main/Elevators/InitElevator/init.luau | 130 +++++++++--------- .../main/Elevators/Otis1960/Config.luau | 7 +- src/server/main/Elevators/Otis1960/init.luau | 48 ++++++- src/server/main/Types/Elevator.luau | 30 ++++ src/server/main/init.server.luau | 2 +- 7 files changed, 157 insertions(+), 83 deletions(-) create mode 100644 src/server/main/Types/Elevator.luau diff --git a/sourcemap.json b/sourcemap.json index 87843b2..48cc2f8 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.luau"],"children":[{"name":"IntroGui","className":"ModuleScript","filePaths":["src/load/intro/IntroGui.luau"]}]}]},{"name":"ReplicatedStorage","className":"ReplicatedStorage","children":[{"name":"Algebra","className":"ModuleScript","filePaths":["src/shared/Algebra.luau"]},{"name":"Client","className":"Folder","children":[{"name":"Camera","className":"ModuleScript","filePaths":["src/shared/Client/Camera.luau"]},{"name":"KeyBinds","className":"ModuleScript","filePaths":["src/shared/Client/KeyBinds.luau"]}]},{"name":"Delta","className":"ModuleScript","filePaths":["src/shared/Delta.luau"]},{"name":"Enums","className":"ModuleScript","filePaths":["src/shared/Enums.luau"]},{"name":"Property","className":"ModuleScript","filePaths":["src/shared/Property.luau"]},{"name":"Server","className":"Folder","children":[{"name":"holder","className":"ModuleScript","filePaths":["src/shared/Server/holder.luau"]}]},{"name":"Tween","className":"ModuleScript","filePaths":["src/shared/Tween.luau"]}]},{"name":"ServerScriptService","className":"ServerScriptService","children":[{"name":"rapid/server","className":"Actor","children":[{"name":"main","className":"Script","filePaths":["src/server/main/init.server.luau"],"children":[{"name":"Elevators","className":"Folder","children":[{"name":"ButtonsManager","className":"ModuleScript","filePaths":["src/server/main/Elevators/ButtonsManager.luau"]},{"name":"HallDisplays","className":"ModuleScript","filePaths":["src/server/main/Elevators/HallDisplays.luau"]},{"name":"InitElevator","className":"ModuleScript","filePaths":["src/server/main/Elevators/InitElevator/init.luau"],"children":[{"name":"RelayAlgorithm","className":"ModuleScript","filePaths":["src/server/main/Elevators/InitElevator/RelayAlgorithm.luau"]}]},{"name":"Lanterns","className":"ModuleScript","filePaths":["src/server/main/Elevators/Lanterns.luau"]},{"name":"Otis1960","className":"ModuleScript","filePaths":["src/server/main/Elevators/Otis1960/init.luau"],"children":[{"name":"Config","className":"ModuleScript","filePaths":["src/server/main/Elevators/Otis1960/Config.luau"]},{"name":"Doors","className":"ModuleScript","filePaths":["src/server/main/Elevators/Otis1960/Doors.luau"]},{"name":"Leveling","className":"ModuleScript","filePaths":["src/server/main/Elevators/Otis1960/Leveling.luau"]},{"name":"MovingObjects","className":"ModuleScript","filePaths":["src/server/main/Elevators/Otis1960/MovingObjects.luau"]},{"name":"PhysicalRelay","className":"ModuleScript","filePaths":["src/server/main/Elevators/Otis1960/PhysicalRelay.luau"]}]},{"name":"TractionRopes","className":"ModuleScript","filePaths":["src/server/main/Elevators/TractionRopes.luau"]}]},{"name":"Enums","className":"Folder","children":[{"name":"Sounds","className":"ModuleScript","filePaths":["src/server/main/Enums/Sounds.luau"]}]},{"name":"Lighting","className":"ModuleScript","filePaths":["src/server/main/Lighting/init.luau"]},{"name":"Load","className":"Folder","children":[{"name":"EditorEntities","className":"ModuleScript","filePaths":["src/server/main/Load/EditorEntities.luau"]},{"name":"StarterPlayer","className":"ModuleScript","filePaths":["src/server/main/Load/StarterPlayer.luau"]},{"name":"Tags","className":"ModuleScript","filePaths":["src/server/main/Load/Tags/init.luau"],"children":[{"name":"Buttons","className":"ModuleScript","filePaths":["src/server/main/Load/Tags/Buttons.luau"]},{"name":"Lights","className":"ModuleScript","filePaths":["src/server/main/Load/Tags/Lights.luau"]}]},{"name":"Workspace","className":"ModuleScript","filePaths":["src/server/main/Load/Workspace.luau"]}]},{"name":"Map","className":"Folder","children":[{"name":"Interactions","className":"Folder","children":[{"name":"LightSwitches","className":"ModuleScript","filePaths":["src/server/main/Map/Interactions/LightSwitches.luau"]}]},{"name":"Prompts","className":"ModuleScript","filePaths":["src/server/main/Map/Prompts.luau"]}]},{"name":"PlayerAdded","className":"ModuleScript","filePaths":["src/server/main/PlayerAdded/init.luau"],"children":[{"name":"Character","className":"ModuleScript","filePaths":["src/server/main/PlayerAdded/Character/init.luau"],"children":[{"name":"Actions","className":"ModuleScript","filePaths":["src/server/main/PlayerAdded/Character/Actions.luau"]},{"name":"Flashlight","className":"ModuleScript","filePaths":["src/server/main/PlayerAdded/Character/Flashlight.luau"]},{"name":"Shadows","className":"ModuleScript","filePaths":["src/server/main/PlayerAdded/Character/Shadows.luau"]},{"name":"SpineKinematics","className":"ModuleScript","filePaths":["src/server/main/PlayerAdded/Character/SpineKinematics.luau"]}]},{"name":"Users","className":"ModuleScript","filePaths":["src/server/main/PlayerAdded/Users.luau"]}]}]}]}]},{"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.luau"],"children":[{"name":"Character","className":"ModuleScript","filePaths":["src/client/Character/init.luau"],"children":[{"name":"Actions","className":"ModuleScript","filePaths":["src/client/Character/Actions.luau"]},{"name":"Camera","className":"ModuleScript","filePaths":["src/client/Character/Camera/init.luau"],"children":[{"name":"Bobbing","className":"ModuleScript","filePaths":["src/client/Character/Camera/Bobbing.luau"]}]},{"name":"Humanoid","className":"ModuleScript","filePaths":["src/client/Character/Humanoid.luau"]},{"name":"HumanoidRootPart","className":"ModuleScript","filePaths":["src/client/Character/HumanoidRootPart.luau"]},{"name":"Sound","className":"Folder","children":[{"name":"Relays","className":"ModuleScript","filePaths":["src/client/Character/Sound/Relays.luau"]}]},{"name":"SpineKinematics","className":"ModuleScript","filePaths":["src/client/Character/SpineKinematics.luau"]}]},{"name":"CoreGuis","className":"ModuleScript","filePaths":["src/client/CoreGuis.luau"]},{"name":"GuiService","className":"ModuleScript","filePaths":["src/client/GuiService.luau"]},{"name":"Mouse","className":"ModuleScript","filePaths":["src/client/Mouse.luau"]},{"name":"UI","className":"Folder","children":[{"name":"Crosshair","className":"ModuleScript","filePaths":["src/client/UI/Crosshair.luau"]},{"name":"Health","className":"ModuleScript","filePaths":["src/client/UI/Health.luau"]},{"name":"Vignette","className":"ModuleScript","filePaths":["src/client/UI/Vignette.luau"]}]}]}]}]}]}]} \ 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.luau"],"children":[{"name":"IntroGui","className":"ModuleScript","filePaths":["src/load/intro/IntroGui.luau"]}]}]},{"name":"ReplicatedStorage","className":"ReplicatedStorage","children":[{"name":"Algebra","className":"ModuleScript","filePaths":["src/shared/Algebra.luau"]},{"name":"Client","className":"Folder","children":[{"name":"Camera","className":"ModuleScript","filePaths":["src/shared/Client/Camera.luau"]},{"name":"KeyBinds","className":"ModuleScript","filePaths":["src/shared/Client/KeyBinds.luau"]}]},{"name":"Delta","className":"ModuleScript","filePaths":["src/shared/Delta.luau"]},{"name":"Enums","className":"ModuleScript","filePaths":["src/shared/Enums.luau"]},{"name":"Property","className":"ModuleScript","filePaths":["src/shared/Property.luau"]},{"name":"Server","className":"Folder","children":[{"name":"holder","className":"ModuleScript","filePaths":["src/shared/Server/holder.luau"]}]},{"name":"Tween","className":"ModuleScript","filePaths":["src/shared/Tween.luau"]}]},{"name":"ServerScriptService","className":"ServerScriptService","children":[{"name":"rapid/server","className":"Actor","children":[{"name":"main","className":"Script","filePaths":["src/server/main/init.server.luau"],"children":[{"name":"Elevators","className":"Folder","children":[{"name":"ButtonsManager","className":"ModuleScript","filePaths":["src/server/main/Elevators/ButtonsManager.luau"]},{"name":"HallDisplays","className":"ModuleScript","filePaths":["src/server/main/Elevators/HallDisplays.luau"]},{"name":"InitElevator","className":"ModuleScript","filePaths":["src/server/main/Elevators/InitElevator/init.luau"],"children":[{"name":"RelayAlgorithm","className":"ModuleScript","filePaths":["src/server/main/Elevators/InitElevator/RelayAlgorithm.luau"]}]},{"name":"Lanterns","className":"ModuleScript","filePaths":["src/server/main/Elevators/Lanterns.luau"]},{"name":"Otis1960","className":"ModuleScript","filePaths":["src/server/main/Elevators/Otis1960/init.luau"],"children":[{"name":"Config","className":"ModuleScript","filePaths":["src/server/main/Elevators/Otis1960/Config.luau"]},{"name":"Doors","className":"ModuleScript","filePaths":["src/server/main/Elevators/Otis1960/Doors.luau"]},{"name":"Leveling","className":"ModuleScript","filePaths":["src/server/main/Elevators/Otis1960/Leveling.luau"]},{"name":"MovingObjects","className":"ModuleScript","filePaths":["src/server/main/Elevators/Otis1960/MovingObjects.luau"]},{"name":"PhysicalRelay","className":"ModuleScript","filePaths":["src/server/main/Elevators/Otis1960/PhysicalRelay.luau"]}]},{"name":"TractionRopes","className":"ModuleScript","filePaths":["src/server/main/Elevators/TractionRopes.luau"]}]},{"name":"Enums","className":"Folder","children":[{"name":"Sounds","className":"ModuleScript","filePaths":["src/server/main/Enums/Sounds.luau"]}]},{"name":"Lighting","className":"ModuleScript","filePaths":["src/server/main/Lighting/init.luau"]},{"name":"Load","className":"Folder","children":[{"name":"EditorEntities","className":"ModuleScript","filePaths":["src/server/main/Load/EditorEntities.luau"]},{"name":"StarterPlayer","className":"ModuleScript","filePaths":["src/server/main/Load/StarterPlayer.luau"]},{"name":"Tags","className":"ModuleScript","filePaths":["src/server/main/Load/Tags/init.luau"],"children":[{"name":"Buttons","className":"ModuleScript","filePaths":["src/server/main/Load/Tags/Buttons.luau"]},{"name":"Lights","className":"ModuleScript","filePaths":["src/server/main/Load/Tags/Lights.luau"]}]},{"name":"Workspace","className":"ModuleScript","filePaths":["src/server/main/Load/Workspace.luau"]}]},{"name":"Map","className":"Folder","children":[{"name":"Interactions","className":"Folder","children":[{"name":"LightSwitches","className":"ModuleScript","filePaths":["src/server/main/Map/Interactions/LightSwitches.luau"]}]},{"name":"Prompts","className":"ModuleScript","filePaths":["src/server/main/Map/Prompts.luau"]}]},{"name":"PlayerAdded","className":"ModuleScript","filePaths":["src/server/main/PlayerAdded/init.luau"],"children":[{"name":"Character","className":"ModuleScript","filePaths":["src/server/main/PlayerAdded/Character/init.luau"],"children":[{"name":"Actions","className":"ModuleScript","filePaths":["src/server/main/PlayerAdded/Character/Actions.luau"]},{"name":"Flashlight","className":"ModuleScript","filePaths":["src/server/main/PlayerAdded/Character/Flashlight.luau"]},{"name":"Shadows","className":"ModuleScript","filePaths":["src/server/main/PlayerAdded/Character/Shadows.luau"]},{"name":"SpineKinematics","className":"ModuleScript","filePaths":["src/server/main/PlayerAdded/Character/SpineKinematics.luau"]}]},{"name":"Users","className":"ModuleScript","filePaths":["src/server/main/PlayerAdded/Users.luau"]}]},{"name":"Types","className":"Folder","children":[{"name":"Elevator","className":"ModuleScript","filePaths":["src/server/main/Types/Elevator.luau"]}]}]}]}]},{"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.luau"],"children":[{"name":"Character","className":"ModuleScript","filePaths":["src/client/Character/init.luau"],"children":[{"name":"Actions","className":"ModuleScript","filePaths":["src/client/Character/Actions.luau"]},{"name":"Camera","className":"ModuleScript","filePaths":["src/client/Character/Camera/init.luau"],"children":[{"name":"Bobbing","className":"ModuleScript","filePaths":["src/client/Character/Camera/Bobbing.luau"]}]},{"name":"Humanoid","className":"ModuleScript","filePaths":["src/client/Character/Humanoid.luau"]},{"name":"HumanoidRootPart","className":"ModuleScript","filePaths":["src/client/Character/HumanoidRootPart.luau"]},{"name":"Sound","className":"Folder","children":[{"name":"Relays","className":"ModuleScript","filePaths":["src/client/Character/Sound/Relays.luau"]}]},{"name":"SpineKinematics","className":"ModuleScript","filePaths":["src/client/Character/SpineKinematics.luau"]}]},{"name":"CoreGuis","className":"ModuleScript","filePaths":["src/client/CoreGuis.luau"]},{"name":"GuiService","className":"ModuleScript","filePaths":["src/client/GuiService.luau"]},{"name":"Mouse","className":"ModuleScript","filePaths":["src/client/Mouse.luau"]},{"name":"UI","className":"Folder","children":[{"name":"Crosshair","className":"ModuleScript","filePaths":["src/client/UI/Crosshair.luau"]},{"name":"Health","className":"ModuleScript","filePaths":["src/client/UI/Health.luau"]},{"name":"Vignette","className":"ModuleScript","filePaths":["src/client/UI/Vignette.luau"]}]}]}]}]}]}]} \ No newline at end of file diff --git a/src/server/main/Elevators/InitElevator/RelayAlgorithm.luau b/src/server/main/Elevators/InitElevator/RelayAlgorithm.luau index 62612e5..fa57244 100644 --- a/src/server/main/Elevators/InitElevator/RelayAlgorithm.luau +++ b/src/server/main/Elevators/InitElevator/RelayAlgorithm.luau @@ -17,7 +17,12 @@ type Constructor_Return_Props = { __FloorQueue: FloorQueue, Events: { - Sorted: BindableEvent + Sorted: RBXScriptSignal, + Added: RBXScriptSignal, + __eventInstances__: { + Sorted: BindableEvent, + Added: BindableEvent + } }, } @@ -35,12 +40,19 @@ local RelayAlgorithm = {} :: Impl_Constructor RelayAlgorithm.__index = RelayAlgorithm function RelayAlgorithm.constructor(ElevatorBoxModel) + local Sorted = Instance.new("BindableEvent") :: BindableEvent + local Added = Instance.new("BindableEvent") :: BindableEvent + return setmetatable({ ElevatorBoxModel = ElevatorBoxModel, __FloorQueue = {}, - Events = { - Sorted = Instance.new("BindableEvent") :: BindableEvent + Sorted = Sorted.Event, + Added = Added.Event, + __eventInstances__ = { + Sorted = Sorted, + Added = Added + } }, }, RelayAlgorithm) end @@ -55,11 +67,12 @@ function RelayAlgorithm:Sort(ElevatorGoingUp) end return a>b end) - self.Events.Sorted:Fire() + self.Events.__eventInstances__.Sorted:Fire() end function RelayAlgorithm:AddFloor(ElevatorGoingUp, GoingUpAttribute, RequestedLevel) table.insert(self.__FloorQueue, ElevatorGoingUp == GoingUpAttribute.Value and 1 or #self.__FloorQueue+1, RequestedLevel) + self.Events.__eventInstances__.Added:Fire(RequestedLevel) self:Sort(ElevatorGoingUp) end diff --git a/src/server/main/Elevators/InitElevator/init.luau b/src/server/main/Elevators/InitElevator/init.luau index 7219b0d..1faf0f3 100644 --- a/src/server/main/Elevators/InitElevator/init.luau +++ b/src/server/main/Elevators/InitElevator/init.luau @@ -4,17 +4,12 @@ local Elevators = script.Parent local MainDir = Elevators.Parent -local EnumsDir = MainDir:WaitForChild("Enums") local LoadDir = MainDir:WaitForChild("Load") -local StorageService = game:GetService("ReplicatedStorage") -local RunService = game:GetService("RunService") - -local Enums = require(StorageService:WaitForChild("Enums")) -local SoundEnums = require(EnumsDir:WaitForChild("Sounds")) - -local Tags = require(LoadDir:WaitForChild("Tags")) +local RunService = game:GetService("RunService") +local ElevatorTypes = require(MainDir:WaitForChild("Types"):WaitForChild("Elevator")) +local Tags = require(LoadDir:WaitForChild("Tags")) local RelayAlgorithm = require(script:WaitForChild("RelayAlgorithm")) type Tags = Tags.ExportedTags @@ -29,33 +24,8 @@ type Impl_Constructor = { __TravelToFloor: (self: ClassConstructor, LevelInt: number, LevelVec3: number, ElevatorGoingUp: boolean) -> (), } -type ElevatorConfigurationTable = { - Name: Enums.ElevatorValues, - Responsiveness: number, - MaxVelocity: number, - FloorLevelingDistance: number, - FloorLeveling3PhaseDistance: number, - ParkedDistance: number, - LevelingVelocity: number, - Phase3LevelingVelocity: number, - Sounds: { - LanternChimeDirection: SoundEnums.ElevatorSoundValues, - LanternChimeLanding: SoundEnums.ElevatorSoundValues, - }, - Colors: { - ButtonActivated: Color3, - ButtonDeactivated: Color3, - LanternDisplayOn: Color3, - LanternDisplayOff: Color3, - }, -} - type FloorLevelingPositions = {number} -type Constructor_Fun = ( - ElevatorBoxModel: UnionOperation, - ElevatorConfigurationTable: ElevatorConfigurationTable, - FloorLevelingPositions: FloorLevelingPositions -) -> ClassConstructor +type Constructor_Fun = (ElevatorBoxModel: UnionOperation, ElevatorConfigurationTable: ElevatorTypes.ElevatorConfigurationTable, FloorLevelingPositions: FloorLevelingPositions) -> ClassConstructor type Constructor_Return_Props = { RelayAlgorithm: RelayAlgorithm.RelayAlgorithmConstructor, @@ -64,7 +34,7 @@ type Constructor_Return_Props = { Elevator: { BoxModel: UnionOperation, AlignPosition: AlignPosition, - Configuration: ElevatorConfigurationTable + Configuration: ElevatorTypes.ElevatorConfigurationTable }, Attributes: { PreviousFloor: IntValue, @@ -75,11 +45,18 @@ type Constructor_Return_Props = { Stopped: BoolValue }, Events: { - CabProgression: BindableEvent, - CabTraveling: BindableEvent, - Parked: BindableEvent, - Leveling: BindableEvent, - Leveling3Phase: BindableEvent, + CabProgression: RBXScriptSignal, + CabTraveling: RBXScriptSignal, + Parked: RBXScriptSignal, + Leveling: RBXScriptSignal, + Leveling3Phase: RBXScriptSignal, + __eventInstances__: { + CabProgression: BindableEvent, + CabTraveling: BindableEvent, + Parked: BindableEvent, + Leveling: BindableEvent, + Leveling3Phase: BindableEvent, + } }, __Connections: { @@ -123,19 +100,19 @@ local function Mover(ElevatorBoxModel: UnionOperation, Responsiveness: number, M end function Elevator.constructor(ElevatorBoxModel, ElevatorConfigurationTable, FloorLevelingPositions) + assert(#FloorLevelingPositions>1, `[{ElevatorConfigurationTable.Name}] requires more floors to operate. Floors={FloorLevelingPositions}, #Floors={#FloorLevelingPositions}.`) + local _BoxAttachment, BoxAlignPosition, _BoxAlignOrientation = Mover(ElevatorBoxModel, ElevatorConfigurationTable.Responsiveness, ElevatorConfigurationTable.MaxVelocity) local RelayAlgorithmConstructor = RelayAlgorithm.constructor(BoxAlignPosition) - local Events = { - CabProgression = Instance.new("BindableEvent") :: BindableEvent, - CabTraveling = Instance.new("BindableEvent") :: BindableEvent, - Parked = Instance.new("BindableEvent") :: BindableEvent, - Leveling = Instance.new("BindableEvent") :: BindableEvent, - Leveling3Phase = Instance.new("BindableEvent") :: BindableEvent, - } + local CabProgression = Instance.new("BindableEvent") :: BindableEvent + local CabTraveling = Instance.new("BindableEvent") :: BindableEvent + local Parked = Instance.new("BindableEvent") :: BindableEvent + local Leveling = Instance.new("BindableEvent") :: BindableEvent + local Leveling3Phase = Instance.new("BindableEvent") :: BindableEvent local Attributes = { PreviousFloor = Instance.new("IntValue") :: IntValue, @@ -145,10 +122,11 @@ function Elevator.constructor(ElevatorBoxModel, ElevatorConfigurationTable, Floo GoingUp = Instance.new("BoolValue") :: BoolValue, Stopped = Instance.new("BoolValue") :: BoolValue } - Attributes.CurrentFloor.Value = 1 - Attributes.NextFloor.Value = Attributes.CurrentFloor.Value+1 - Attributes.GoingUp.Value = false - Attributes.Goal.Value = 1 + Attributes.CurrentFloor.Value = 1 + Attributes.PreviousFloor.Value = Attributes.CurrentFloor.Value + Attributes.NextFloor.Value = Attributes.CurrentFloor.Value+1 + Attributes.GoingUp.Value = false + Attributes.Goal.Value = 1 print(`🛗 [{ElevatorConfigurationTable.Name}]: Initialized and ready`) @@ -160,8 +138,21 @@ function Elevator.constructor(ElevatorBoxModel, ElevatorConfigurationTable, Floo AlignPosition = BoxAlignPosition, Configuration = ElevatorConfigurationTable, }, + Events = { + CabProgression = CabProgression.Event, + CabTraveling = CabTraveling.Event, + Parked = Parked.Event, + Leveling = Leveling.Event, + Leveling3Phase = Leveling3Phase.Event, + __eventInstances__ = { + CabProgression = CabProgression, + CabTraveling = CabTraveling, + Parked = Parked, + Leveling = Leveling, + Leveling3Phase = Leveling3Phase, + } + }, Attributes = Attributes, - Events = Events, __Connections = {} }, Elevator) end @@ -173,6 +164,7 @@ local function CheckFloorQueue(self: ClassConstructor) table.remove(self.RelayAlgorithm.__FloorQueue, 1) local NextFloorInQueue = self.RelayAlgorithm.__FloorQueue[1] + print(NextFloorInQueue) if NextFloorInQueue then local ElevatorGoingUp = ElevatorGoingUpDirection(self.Attributes.CurrentFloor.Value, NextFloorInQueue) local LevelVec3 = self.FloorLevelingPositions[NextFloorInQueue] @@ -192,20 +184,20 @@ local function CabTraveling(self: ClassConstructor, deltaTime: number, LevelVec3 self.Attributes.CurrentFloor.Value+=1 self.Attributes.NextFloor.Value = math.clamp(1, self.Attributes.CurrentFloor.Value+1, #self.FloorLevelingPositions) - self.Events.CabProgression:Fire(self.Attributes.PreviousFloor.Value, self.Attributes.CurrentFloor.Value, self.Attributes.NextFloor.Value) + self.Events.__eventInstances__.CabProgression:Fire(self.Attributes.PreviousFloor.Value, self.Attributes.CurrentFloor.Value, self.Attributes.NextFloor.Value) end --Elevator is riding upwards towards the destination if ElevatorPosition.Y>=LevelVec3-self.Elevator.Configuration.FloorLevelingDistance then - self.Events.Leveling:Fire() + self.Events.__eventInstances__.Leveling:Fire() self.Elevator.AlignPosition.MaxVelocity = self.Elevator.Configuration.LevelingVelocity if ElevatorPosition.Y>=LevelVec3-self.Elevator.Configuration.FloorLeveling3PhaseDistance then - self.Events.Leveling3Phase:Fire() + self.Events.__eventInstances__.Leveling3Phase:Fire() self.Elevator.AlignPosition.MaxVelocity = self.Elevator.Configuration.Phase3LevelingVelocity if ElevatorPosition.Y>=LevelVec3-self.Elevator.Configuration.ParkedDistance then - self.Events.Parked:Fire() + self.Events.__eventInstances__.Parked:Fire() CheckFloorQueue(self); (self.__Connections.Moving :: RBXScriptConnection):Disconnect() @@ -218,20 +210,20 @@ local function CabTraveling(self: ClassConstructor, deltaTime: number, LevelVec3 self.Attributes.CurrentFloor.Value-=1 self.Attributes.NextFloor.Value = math.clamp(1, self.Attributes.CurrentFloor.Value-1, #self.FloorLevelingPositions) - self.Events.CabProgression:Fire(self.Attributes.PreviousFloor.Value, self.Attributes.CurrentFloor.Value, self.Attributes.NextFloor.Value) + self.Events.__eventInstances__.CabProgression:Fire(self.Attributes.PreviousFloor.Value, self.Attributes.CurrentFloor.Value, self.Attributes.NextFloor.Value) end --Elevator is riding upwards towards the destination if ElevatorPosition.Y<=LevelVec3+self.Elevator.Configuration.FloorLevelingDistance then - self.Events.Leveling:Fire() + self.Events.__eventInstances__.Leveling:Fire() self.Elevator.AlignPosition.MaxVelocity = self.Elevator.Configuration.LevelingVelocity if ElevatorPosition.Y<=LevelVec3+self.Elevator.Configuration.FloorLeveling3PhaseDistance then - self.Events.Leveling3Phase:Fire() + self.Events.__eventInstances__.Leveling3Phase:Fire() self.Elevator.AlignPosition.MaxVelocity = self.Elevator.Configuration.Phase3LevelingVelocity if ElevatorPosition.Y<=LevelVec3+self.Elevator.Configuration.ParkedDistance then - self.Events.Parked:Fire() + self.Events.__eventInstances__.Parked:Fire() CheckFloorQueue(self); (self.__Connections.Moving :: RBXScriptConnection):Disconnect() @@ -240,7 +232,7 @@ local function CabTraveling(self: ClassConstructor, deltaTime: number, LevelVec3 end end - self.Events.CabTraveling:Fire(deltaTime, ElevatorPosition) + self.Events.__eventInstances__.CabTraveling:Fire(deltaTime, ElevatorPosition) end function Elevator:__TravelToFloor(LevelInt, LevelVec3, ElevatorGoingUp) @@ -265,17 +257,21 @@ function Elevator:RequestLevel(RequestedLevel) local LevelVec3 = self.FloorLevelingPositions[RequestedLevel] if LevelVec3 then - local ElevatorGoingUp = ElevatorGoingUpDirection(self.Attributes.CurrentFloor.Value, RequestedLevel) - self.RelayAlgorithm:AddFloor(ElevatorGoingUp, self.Attributes.GoingUp, RequestedLevel) + if RequestedLevel ~= self.Attributes.CurrentFloor.Value then + local ElevatorGoingUp = ElevatorGoingUpDirection(self.Attributes.CurrentFloor.Value, RequestedLevel) + self.RelayAlgorithm:AddFloor(ElevatorGoingUp, self.Attributes.GoingUp, RequestedLevel) - if #self.RelayAlgorithm.__FloorQueue == 1 then - self:__TravelToFloor(RequestedLevel, LevelVec3, ElevatorGoingUp) + if #self.RelayAlgorithm.__FloorQueue == 1 then + self:__TravelToFloor(RequestedLevel, LevelVec3, ElevatorGoingUp) + end + else + warn(`[{self.Elevator.Configuration.Name}]: The elevator is already at the requested floor. RequestLevel={RequestedLevel}, CurrentLevel={self.Attributes.CurrentFloor.Value}`) + return false end - return true end - warn(`Requested floor: "{RequestedLevel}" does not exist for this elevator`) + warn(`[{self.Elevator.Configuration.Name}]: Requested floor: "{RequestedLevel}" does not exist for this elevator`) return false end diff --git a/src/server/main/Elevators/Otis1960/Config.luau b/src/server/main/Elevators/Otis1960/Config.luau index c627c6d..75546ed 100644 --- a/src/server/main/Elevators/Otis1960/Config.luau +++ b/src/server/main/Elevators/Otis1960/Config.luau @@ -5,10 +5,11 @@ local MainDir = script.Parent.Parent.Parent local StorageService = game:GetService("ReplicatedStorage") -local Enums = require(StorageService:WaitForChild("Enums")) -local SoundEnums = require(MainDir:WaitForChild("Enums"):WaitForChild("Sounds")) +local Enums = require(StorageService:WaitForChild("Enums")) +local SoundEnums = require(MainDir:WaitForChild("Enums"):WaitForChild("Sounds")) +local ElevatorTypes = require(MainDir:WaitForChild("Types"):WaitForChild("Elevator")) -local ElevatorConfiguration = {} +local ElevatorConfiguration = {} :: ElevatorTypes.ElevatorConfigurationTable ElevatorConfiguration.Name = Enums.Elevator.Otis1960 ElevatorConfiguration.FloorLevelingDistance = 4 ElevatorConfiguration.FloorLeveling3PhaseDistance = 1.5 diff --git a/src/server/main/Elevators/Otis1960/init.luau b/src/server/main/Elevators/Otis1960/init.luau index a6180dc..5a93eaf 100644 --- a/src/server/main/Elevators/Otis1960/init.luau +++ b/src/server/main/Elevators/Otis1960/init.luau @@ -4,17 +4,51 @@ local ParentDir = script.Parent local MainDir = ParentDir.Parent -local StorageService = game:GetService("ReplicatedStorage") -local InitElevator = require(ParentDir:WaitForChild("InitElevator")) - -local TagsModule = require(MainDir:WaitForChild("Load"):WaitForChild("Tags")) -local SoundEnums = require(MainDir:WaitForChild("Enums"):WaitForChild("Sounds")) -local Enums = require(StorageService:WaitForChild("Enums")) +local InitElevator = require(ParentDir:WaitForChild("InitElevator")) +local TagsModule = require(MainDir:WaitForChild("Load"):WaitForChild("Tags")) local ElevatorConfigurationTable = require(script:WaitForChild("Config")) local FloorLevelingPositions = require(script:WaitForChild("Leveling")) -return function(ButtonTags: TagsModule.ElevatorButtons, LanternTags: TagsModule.Lanterns, LandingDoorTags: TagsModule.LandingTags) +-- self.ElevatorBox_1960 = TagsConstructor:Request("ElevatorMover_1960") :: UnionOperation +-- self.ElevatorDoor1 = TagsConstructor:Request("ElevatorDoor_1960_1") :: BasePart +-- self.ElevatorDoor2 = TagsConstructor:Request("ElevatorDoor_1960_2") :: BasePart +-- self.ElevatorDoorSensor = TagsConstructor:Request("ElevatorDoor_Sensor_1960") :: Folder +-- self.Ropes = TagsConstructor:Request("1960_ElevatorPulleyRope") :: {Instance} +-- self.HallDisplays = TagsConstructor:Request("Otis1960_LandingFloorDisplay") :: {Instance} + +-- self.MachineRoom.Pulley = TagsConstructor:Request("Otis1960_Pulley") :: UnionOperation +-- self.MachineRoom.Pulley2 = TagsConstructor:Request("Otis1960_Pulley2") :: UnionOperation +-- self.MachineRoom.Governor = TagsConstructor:Request("Otis1960_Governor") :: UnionOperation +-- self.MachineRoom.GovernorFlyballs = TagsConstructor:Request("Otis1960_GovernorFlyballs") :: Part +-- self.MachineRoom.PiePlatePulley = TagsConstructor:Request("Otis1960_PieplatePulley") :: UnionOperation +-- self.MachineRoom.PiePlatePlates = TagsConstructor:Request("Otis1960_PiePlatePlates") :: UnionOperation +-- self.MachineRoom.PiePlateSelector = TagsConstructor:Request("Otis1960_PiePlateSelector") :: UnionOperation + +return function(TagsConstructor: TagsModule.TagsConstructor, ButtonTags: TagsModule.ElevatorButtons, LanternTags: TagsModule.Lanterns, LandingDoorTags: TagsModule.LandingTags) + local ElevatorBoxModel = TagsConstructor:Request("ElevatorMover_1960") :: UnionOperation + local Elevator = InitElevator.constructor(ElevatorBoxModel, ElevatorConfigurationTable, FloorLevelingPositions) + + Elevator.Events.CabTraveling:Connect(function(deltaTime: number, ElevatorPosition: Vector3) + + end) + Elevator.Events.CabProgression:Connect(function(PreviousFloor: number, CurrentFloor: number, NextFloor: number) + print(CurrentFloor) + end) + Elevator.Events.Leveling:Connect(function() + + end) + Elevator.Events.Leveling3Phase:Connect(function() + + end) + Elevator.Events.Parked:Connect(function() + + end) + + task.wait(1) + Elevator:RequestLevel(3) + Elevator:RequestLevel(5) + Elevator:RequestLevel(2) end diff --git a/src/server/main/Types/Elevator.luau b/src/server/main/Types/Elevator.luau new file mode 100644 index 0000000..0313236 --- /dev/null +++ b/src/server/main/Types/Elevator.luau @@ -0,0 +1,30 @@ +local MainDir = script.Parent.Parent +local EnumsDir = MainDir:WaitForChild("Enums") + +local StorageService = game:GetService("ReplicatedStorage") + +local Enums = require(StorageService:WaitForChild("Enums")) +local SoundEnums = require(EnumsDir:WaitForChild("Sounds")) + +export type ElevatorConfigurationTable = { + Name: Enums.ElevatorValues, + Responsiveness: number, + MaxVelocity: number, + FloorLevelingDistance: number, + FloorLeveling3PhaseDistance: number, + ParkedDistance: number, + LevelingVelocity: number, + Phase3LevelingVelocity: number, + Sounds: { + LanternChimeDirection: SoundEnums.ElevatorSoundValues, + LanternChimeLanding: SoundEnums.ElevatorSoundValues, + }, + Colors: { + ButtonActivated: Color3, + ButtonDeactivated: Color3, + LanternDisplayOn: Color3, + LanternDisplayOff: Color3, + }, +} + +return nil diff --git a/src/server/main/init.server.luau b/src/server/main/init.server.luau index 529bae1..a7c9918 100644 --- a/src/server/main/init.server.luau +++ b/src/server/main/init.server.luau @@ -50,4 +50,4 @@ print("[DEBUG] Lanterns=", Lanterns) local LandingDoors = TagsConstructor:__ElevatorDoors() print("[DEBUG] Elevator Landing Doors=", LandingDoors) -Otis1960(Buttons[Enums.Elevator.Otis1960], Lanterns[Enums.Elevator.Otis1960], LandingDoors[Enums.Elevator.Otis1960]) +Otis1960(TagsConstructor, Buttons[Enums.Elevator.Otis1960], Lanterns[Enums.Elevator.Otis1960], LandingDoors[Enums.Elevator.Otis1960])