diff --git a/sourcemap.json b/sourcemap.json index 335d68e..b47c4cd 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":"Output","className":"ModuleScript","filePaths":["src/shared/Output.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":"ButtonManager","className":"ModuleScript","filePaths":["src/server/main/Elevators/ButtonManager.luau"]},{"name":"Lanterns","className":"ModuleScript","filePaths":["src/server/main/Elevators/Lanterns.luau"]},{"name":"Map","className":"Folder","children":[{"name":"Haughton","className":"ModuleScript","filePaths":["src/server/main/Elevators/Map/Haughton/init.luau"],"children":[{"name":"Buttons","className":"ModuleScript","filePaths":["src/server/main/Elevators/Map/Haughton/Buttons.luau"]},{"name":"Config","className":"ModuleScript","filePaths":["src/server/main/Elevators/Map/Haughton/Config.luau"]},{"name":"Leveling","className":"ModuleScript","filePaths":["src/server/main/Elevators/Map/Haughton/Leveling.luau"]},{"name":"MovingObjects","className":"ModuleScript","filePaths":["src/server/main/Elevators/Map/Haughton/MovingObjects.luau"]}]},{"name":"Otis1960","className":"ModuleScript","filePaths":["src/server/main/Elevators/Map/Otis1960/init.luau"],"children":[{"name":"Config","className":"ModuleScript","filePaths":["src/server/main/Elevators/Map/Otis1960/Config.luau"]},{"name":"Leveling","className":"ModuleScript","filePaths":["src/server/main/Elevators/Map/Otis1960/Leveling.luau"]},{"name":"MovingObjects","className":"ModuleScript","filePaths":["src/server/main/Elevators/Map/Otis1960/MovingObjects.luau"]},{"name":"PhysicalRelay","className":"ModuleScript","filePaths":["src/server/main/Elevators/Map/Otis1960/PhysicalRelay.luau"]}]}]},{"name":"System","className":"ModuleScript","filePaths":["src/server/main/Elevators/System/init.luau"],"children":[{"name":"RelayAlgorithm","className":"ModuleScript","filePaths":["src/server/main/Elevators/System/RelayAlgorithm.luau"]}]},{"name":"TractionRopes","className":"ModuleScript","filePaths":["src/server/main/Elevators/TractionRopes.luau"]}]},{"name":"Map","className":"Folder","children":[{"name":"Interactions","className":"Folder","children":[{"name":"LightSwitches","className":"ModuleScript","filePaths":["src/server/main/Map/Interactions/LightSwitches.luau"]}]},{"name":"Lighting","className":"ModuleScript","filePaths":["src/server/main/Map/Lighting/init.luau"]},{"name":"Load","className":"Folder","children":[{"name":"EditorEntities","className":"ModuleScript","filePaths":["src/server/main/Map/Load/EditorEntities.luau"]},{"name":"StarterPlayer","className":"ModuleScript","filePaths":["src/server/main/Map/Load/StarterPlayer.luau"]},{"name":"Tags","className":"ModuleScript","filePaths":["src/server/main/Map/Load/Tags/init.luau"],"children":[{"name":"Buttons","className":"ModuleScript","filePaths":["src/server/main/Map/Load/Tags/Buttons.luau"]},{"name":"Lights","className":"ModuleScript","filePaths":["src/server/main/Map/Load/Tags/Lights.luau"]}]},{"name":"Workspace","className":"ModuleScript","filePaths":["src/server/main/Map/Load/Workspace.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":"Enums","className":"Folder","children":[{"name":"Sounds","className":"ModuleScript","filePaths":["src/server/main/Types/Enums/Sounds.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":"Iris","className":"ModuleScript","filePaths":["src/client/UI/Iris/lib/init.lua","src/client/UI/Iris/default.project.json"],"children":[{"name":"API","className":"ModuleScript","filePaths":["src/client/UI/Iris/lib/API.lua"]},{"name":"Internal","className":"ModuleScript","filePaths":["src/client/UI/Iris/lib/Internal.lua"]},{"name":"Types","className":"ModuleScript","filePaths":["src/client/UI/Iris/lib/Types.lua"]},{"name":"config","className":"ModuleScript","filePaths":["src/client/UI/Iris/lib/config.lua"]},{"name":"demoWindow","className":"ModuleScript","filePaths":["src/client/UI/Iris/lib/demoWindow.lua"]},{"name":"widgets","className":"ModuleScript","filePaths":["src/client/UI/Iris/lib/widgets/init.lua"],"children":[{"name":"Button","className":"ModuleScript","filePaths":["src/client/UI/Iris/lib/widgets/Button.lua"]},{"name":"Checkbox","className":"ModuleScript","filePaths":["src/client/UI/Iris/lib/widgets/Checkbox.lua"]},{"name":"Combo","className":"ModuleScript","filePaths":["src/client/UI/Iris/lib/widgets/Combo.lua"]},{"name":"Format","className":"ModuleScript","filePaths":["src/client/UI/Iris/lib/widgets/Format.lua"]},{"name":"Image","className":"ModuleScript","filePaths":["src/client/UI/Iris/lib/widgets/Image.lua"]},{"name":"Input","className":"ModuleScript","filePaths":["src/client/UI/Iris/lib/widgets/Input.lua"]},{"name":"Menu","className":"ModuleScript","filePaths":["src/client/UI/Iris/lib/widgets/Menu.lua"]},{"name":"Plot","className":"ModuleScript","filePaths":["src/client/UI/Iris/lib/widgets/Plot.lua"]},{"name":"RadioButton","className":"ModuleScript","filePaths":["src/client/UI/Iris/lib/widgets/RadioButton.lua"]},{"name":"Root","className":"ModuleScript","filePaths":["src/client/UI/Iris/lib/widgets/Root.lua"]},{"name":"Table","className":"ModuleScript","filePaths":["src/client/UI/Iris/lib/widgets/Table.lua"]},{"name":"Text","className":"ModuleScript","filePaths":["src/client/UI/Iris/lib/widgets/Text.lua"]},{"name":"Tree","className":"ModuleScript","filePaths":["src/client/UI/Iris/lib/widgets/Tree.lua"]},{"name":"Window","className":"ModuleScript","filePaths":["src/client/UI/Iris/lib/widgets/Window.lua"]}]}]},{"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":"Output","className":"ModuleScript","filePaths":["src/shared/Output.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":"ButtonManager","className":"ModuleScript","filePaths":["src/server/main/Elevators/ButtonManager.luau"]},{"name":"Lanterns","className":"ModuleScript","filePaths":["src/server/main/Elevators/Lanterns.luau"]},{"name":"Map","className":"Folder","children":[{"name":"Haughton","className":"ModuleScript","filePaths":["src/server/main/Elevators/Map/Haughton/init.luau"],"children":[{"name":"Buttons","className":"ModuleScript","filePaths":["src/server/main/Elevators/Map/Haughton/Buttons.luau"]},{"name":"Config","className":"ModuleScript","filePaths":["src/server/main/Elevators/Map/Haughton/Config.luau"]},{"name":"Events","className":"ModuleScript","filePaths":["src/server/main/Elevators/Map/Haughton/Events.luau"]},{"name":"Leveling","className":"ModuleScript","filePaths":["src/server/main/Elevators/Map/Haughton/Leveling.luau"]},{"name":"MovingObjects","className":"ModuleScript","filePaths":["src/server/main/Elevators/Map/Haughton/MovingObjects.luau"]}]},{"name":"Otis1960","className":"ModuleScript","filePaths":["src/server/main/Elevators/Map/Otis1960/init.luau"],"children":[{"name":"Config","className":"ModuleScript","filePaths":["src/server/main/Elevators/Map/Otis1960/Config.luau"]},{"name":"Leveling","className":"ModuleScript","filePaths":["src/server/main/Elevators/Map/Otis1960/Leveling.luau"]},{"name":"MovingObjects","className":"ModuleScript","filePaths":["src/server/main/Elevators/Map/Otis1960/MovingObjects.luau"]},{"name":"PhysicalRelay","className":"ModuleScript","filePaths":["src/server/main/Elevators/Map/Otis1960/PhysicalRelay.luau"]}]}]},{"name":"System","className":"ModuleScript","filePaths":["src/server/main/Elevators/System/init.luau"],"children":[{"name":"RelayAlgorithm","className":"ModuleScript","filePaths":["src/server/main/Elevators/System/RelayAlgorithm.luau"]}]},{"name":"TractionRopes","className":"ModuleScript","filePaths":["src/server/main/Elevators/TractionRopes.luau"]}]},{"name":"Map","className":"Folder","children":[{"name":"Interactions","className":"Folder","children":[{"name":"LightSwitches","className":"ModuleScript","filePaths":["src/server/main/Map/Interactions/LightSwitches.luau"]}]},{"name":"Lighting","className":"ModuleScript","filePaths":["src/server/main/Map/Lighting/init.luau"]},{"name":"Load","className":"Folder","children":[{"name":"EditorEntities","className":"ModuleScript","filePaths":["src/server/main/Map/Load/EditorEntities.luau"]},{"name":"StarterPlayer","className":"ModuleScript","filePaths":["src/server/main/Map/Load/StarterPlayer.luau"]},{"name":"Tags","className":"ModuleScript","filePaths":["src/server/main/Map/Load/Tags/init.luau"],"children":[{"name":"Buttons","className":"ModuleScript","filePaths":["src/server/main/Map/Load/Tags/Buttons.luau"]},{"name":"Lights","className":"ModuleScript","filePaths":["src/server/main/Map/Load/Tags/Lights.luau"]}]},{"name":"Workspace","className":"ModuleScript","filePaths":["src/server/main/Map/Load/Workspace.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":"Enums","className":"Folder","children":[{"name":"Sounds","className":"ModuleScript","filePaths":["src/server/main/Types/Enums/Sounds.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":"Iris","className":"ModuleScript","filePaths":["src/client/UI/Iris/lib/init.lua","src/client/UI/Iris/default.project.json"],"children":[{"name":"API","className":"ModuleScript","filePaths":["src/client/UI/Iris/lib/API.lua"]},{"name":"Internal","className":"ModuleScript","filePaths":["src/client/UI/Iris/lib/Internal.lua"]},{"name":"Types","className":"ModuleScript","filePaths":["src/client/UI/Iris/lib/Types.lua"]},{"name":"config","className":"ModuleScript","filePaths":["src/client/UI/Iris/lib/config.lua"]},{"name":"demoWindow","className":"ModuleScript","filePaths":["src/client/UI/Iris/lib/demoWindow.lua"]},{"name":"widgets","className":"ModuleScript","filePaths":["src/client/UI/Iris/lib/widgets/init.lua"],"children":[{"name":"Button","className":"ModuleScript","filePaths":["src/client/UI/Iris/lib/widgets/Button.lua"]},{"name":"Checkbox","className":"ModuleScript","filePaths":["src/client/UI/Iris/lib/widgets/Checkbox.lua"]},{"name":"Combo","className":"ModuleScript","filePaths":["src/client/UI/Iris/lib/widgets/Combo.lua"]},{"name":"Format","className":"ModuleScript","filePaths":["src/client/UI/Iris/lib/widgets/Format.lua"]},{"name":"Image","className":"ModuleScript","filePaths":["src/client/UI/Iris/lib/widgets/Image.lua"]},{"name":"Input","className":"ModuleScript","filePaths":["src/client/UI/Iris/lib/widgets/Input.lua"]},{"name":"Menu","className":"ModuleScript","filePaths":["src/client/UI/Iris/lib/widgets/Menu.lua"]},{"name":"Plot","className":"ModuleScript","filePaths":["src/client/UI/Iris/lib/widgets/Plot.lua"]},{"name":"RadioButton","className":"ModuleScript","filePaths":["src/client/UI/Iris/lib/widgets/RadioButton.lua"]},{"name":"Root","className":"ModuleScript","filePaths":["src/client/UI/Iris/lib/widgets/Root.lua"]},{"name":"Table","className":"ModuleScript","filePaths":["src/client/UI/Iris/lib/widgets/Table.lua"]},{"name":"Text","className":"ModuleScript","filePaths":["src/client/UI/Iris/lib/widgets/Text.lua"]},{"name":"Tree","className":"ModuleScript","filePaths":["src/client/UI/Iris/lib/widgets/Tree.lua"]},{"name":"Window","className":"ModuleScript","filePaths":["src/client/UI/Iris/lib/widgets/Window.lua"]}]}]},{"name":"Vignette","className":"ModuleScript","filePaths":["src/client/UI/Vignette.luau"]}]}]}]}]}]}]} \ No newline at end of file diff --git a/src/server/main/Elevators/Map/Haughton/Buttons.luau b/src/server/main/Elevators/Map/Haughton/Buttons.luau index a2d193e..1ac38f6 100644 --- a/src/server/main/Elevators/Map/Haughton/Buttons.luau +++ b/src/server/main/Elevators/Map/Haughton/Buttons.luau @@ -20,54 +20,73 @@ type Impl_Constructor = { __index: Impl_Constructor, constructor: Constructor_Fun, --Class functions - Hook: (self: ClassConstructor) -> () + InitForElevator: (self: ClassConstructor, MaxActivationDistance: number?, AddedOffset: Vector3?) -> () } -type Constructor_Fun = (ElevatorModel: Enums.ElevatorValues, ButtonTags: Tags.ElevatorButtons, CurrentFloor: IntValue) -> ClassConstructor -type Constructor_Return_Props = { +type Constructor_Fun = ( ElevatorModel: Enums.ElevatorValues, ButtonTags: Tags.ElevatorButtons, CurrentFloor: IntValue +) -> ClassConstructor + +type Constructor_Return_Props = { + ElevatorModel: Enums.ElevatorValues, + ButtonTags: Tags.ElevatorButtons, + CurrentFloor: IntValue, + Events: Events +} + +export type Events = { + FloorButtonActivated: RBXScriptSignal, + __eventInstances__: { + FloorButtonActivated: BindableEvent + } } local Buttons = {} :: Impl_Constructor Buttons.__index = Buttons function Buttons.constructor(ElevatorModel, ButtonTags, CurrentFloor) + local ButtonActivated = Instance.new("BindableEvent") + return setmetatable({ ElevatorModel = ElevatorModel, ButtonTags = ButtonTags, CurrentFloor = CurrentFloor, + + Events = { + FloorButtonActivated = ButtonActivated.Event, + __eventInstances__ = { + FloorButtonActivated = ButtonActivated + } + } }, Buttons) end -local function CarButtonActivated(ButtonFloor: number | string) - print("Activated", ButtonFloor) -end +function Buttons:InitForElevator(MaxActivationDistance, AddedOffset) + MaxActivationDistance = MaxActivationDistance or ButtonTags.DefaultMaxActivationDistance + AddedOffset = AddedOffset or Vector3.zero -local function CarButtonFallback(ButtonFloor: number | string) - --Fires when the button is pressed at its own floor - print("Already at floor:", ButtonFloor) -end - -function Buttons:Hook() local ButtonManagerConstructor = ButtonManager.constructor(self.CurrentFloor) local ButtonTagsConstructor = ButtonTags.constructor(self.ButtonTags, self.ElevatorModel) local Prompt = ButtonTagsConstructor:CreatePromptButtons() --- - local CarButtonPrompts = Prompt[self.ElevatorModel].Car + local CarButtonPrompts = Prompt[self.ElevatorModel].Car - for PromptType, PromptProperties in CarButtonPrompts do - if PromptProperties.Attachment and PromptProperties.Inst and PromptProperties.Prompt then - PromptProperties.Prompt.MaxActivationDistance = 2 - PromptProperties.Attachment.Position-=Vector3.new(.05,0,0) - ButtonManagerConstructor:CarButton(PromptType, PromptProperties, CarButtonActivated, CarButtonFallback) - else - warn() - end + for PromptType, PromptProperties in CarButtonPrompts do + if PromptProperties.Attachment and PromptProperties.Inst and PromptProperties.Prompt then + PromptProperties.Prompt.MaxActivationDistance = MaxActivationDistance :: number + PromptProperties.Attachment.Position+=AddedOffset :: Vector3 + + ButtonManagerConstructor:CarButton(PromptType, PromptProperties, function(ButtonFloor: number | string) + self.Events.__eventInstances__.FloorButtonActivated:Fire(true, ButtonFloor, PromptProperties :: Tags.ButtonPropertiesSafe) + end, function(ButtonFloor: number | string) + self.Events.__eventInstances__.FloorButtonActivated:Fire(false, ButtonFloor, PromptProperties :: Tags.ButtonPropertiesSafe) + end) + else + warn() end --- end + end end return Buttons \ No newline at end of file diff --git a/src/server/main/Elevators/Map/Haughton/Events.luau b/src/server/main/Elevators/Map/Haughton/Events.luau new file mode 100644 index 0000000..c0f5361 --- /dev/null +++ b/src/server/main/Elevators/Map/Haughton/Events.luau @@ -0,0 +1,131 @@ +--!optimize 2 +--!native +--!strict + +local ParentDir = script.Parent +local ElevatorsDir = ParentDir.Parent.Parent +local MainDir = ElevatorsDir.Parent + +local StorageService = game:GetService("ReplicatedStorage") + +local Enums = require(StorageService:WaitForChild("Enums")) +local InitElevator = require(ElevatorsDir:WaitForChild("System")) +local Buttons = require(ParentDir:WaitForChild("Buttons")) +local MovingObjects = require(ParentDir:WaitForChild("MovingObjects")) +local TagsModule = require(MainDir:WaitForChild("Map"):WaitForChild("Load"):WaitForChild("Tags")) +local ElevatorTypes = require(MainDir:WaitForChild("Types"):WaitForChild("Elevator")) + +type ClassConstructor = typeof(setmetatable({} :: Constructor_Return_Props, {} :: Impl_Constructor)) + +type Impl_Constructor = { + __index: Impl_Constructor, + constructor: Constructor_Fun, + --Class functions + Elevator: (self: ClassConstructor) -> (), + Buttons: (self: ClassConstructor) -> () +} + +type Constructor_Fun = ( + InitElevatorConstructor: InitElevator.constructor, + ElevatorConfig: ElevatorTypes.ElevatorConfigurationTable, + ElevatorEvents: InitElevator.Events, + ElevatorAttributes: InitElevator.Attributes, + ButtonEvents: Buttons.Events, + ElevatorBoxModel: BasePart, + Leveling: {number}, + MovingObjectsConstructor: MovingObjects.constructor +) -> ClassConstructor + +type Constructor_Return_Props = { + InitElevatorConstructor: InitElevator.constructor, + ElevatorConfig: ElevatorTypes.ElevatorConfigurationTable, + ElevatorEvents: InitElevator.Events, + ElevatorAttributes: InitElevator.Attributes, + ButtonEvents: Buttons.Events, + ElevatorBoxModel: BasePart, + Leveling: {number}, + MovingObjectsConstructor: MovingObjects.constructor +} + +local Events = {} :: Impl_Constructor +Events.__index = Events + +function Events.constructor(InitElevatorConstructor, ElevatorConfig, ElevatorEvents, ElevatorAttributes, ButtonEvents, ElevatorBoxModel, Leveling, MovingObjectsConstructor) + return setmetatable({ + InitElevatorConstructor = InitElevatorConstructor, + ElevatorConfig = ElevatorConfig, + ElevatorEvents = ElevatorEvents, + ElevatorAttributes = ElevatorAttributes, + ButtonEvents = ButtonEvents, + ElevatorBoxModel = ElevatorBoxModel, + Leveling = Leveling, + MovingObjectsConstructor = MovingObjectsConstructor + }, Events) +end + +function Events:Elevator() + self.ElevatorEvents.Traveling:Connect(function(_DeltaTime: number, CabPosition: Vector3) + local CabVelocity = self.ElevatorBoxModel:GetVelocityAtPosition(CabPosition) + local TravelingUpwards = self.ElevatorAttributes.TravelingUpwards.Value + + self.MovingObjectsConstructor:RotatePulleyWheel(TravelingUpwards, CabVelocity.Y) + self.MovingObjectsConstructor:RotateRotodials(CabVelocity.Y) + end) + self.ElevatorEvents.Progression:Connect(function(previousFloor: number, CurrentFloor: number, NextFloor: number) + + end) + self.ElevatorEvents.Leveling:Connect(function() + self.MovingObjectsConstructor:RotateRelayCogs2Async() + end) + self.ElevatorEvents.Leveling3Phase:Connect(function() + + end) + self.ElevatorEvents.ManualTravelRequested:Connect(function() + self.MovingObjectsConstructor:ControllerStartAsync() + task.wait(1) + self.MovingObjectsConstructor:RotateRelayCogs1Async().Completed:Wait() + self.InitElevatorConstructor:StartTraveling() + end) + self.ElevatorEvents.TravelStart:Connect(function() + + end) + self.ElevatorEvents.Parked:Connect(function() + self.MovingObjectsConstructor:RotateRelayCogs3() + end) +end + +local function ElevatorGoingUpDirection(CurrentFloor: number, RequestedFloor: number): boolean + return CurrentFloor (), + RotateRelayCogs1Async: (self: ClassConstructor) -> Tween, RotateRelayCogs2Async: (self: ClassConstructor) -> (), RotateRelayCogs3: (self: ClassConstructor) -> (), RotateRotodials: (self: ClassConstructor, Elevator_Y_Velocity: number) -> (), RotatePulleyWheel: (self: ClassConstructor, TravelingUpwards: boolean, Elevator_Y_Velocity: number) -> (), + ControllerStartAsync: (self: ClassConstructor) -> (), } & Impl_Static_Props type Impl_Static_Props = { @@ -35,6 +36,12 @@ type Constructor_Return_Props = { Relay_Close: Sound, Relay_FullOpen: Sound, Relay_Open: Sound, + Controller_Start: Sound, + Controller_Hum: Sound, + Controller_End: Sound, + Controller_Clicks: Sound, + Pulley_Start: Sound, + Pulley_Moving: Sound, MagnetCog_Row1: BasePart, MagnetCog_Row2: BasePart, MagnetCog_Row3: BasePart, @@ -53,6 +60,8 @@ type Constructor_Return_Props = { Rotodials: {Instance} } +export type constructor = ClassConstructor + local TS = game:GetService("TweenService") local MovingObjects = {} :: Impl_Constructor @@ -72,6 +81,13 @@ function MovingObjects.constructor(TagsConstructor) local Haughton_Relay_Close = TagsConstructor:Request("Haughton_Relay_Close") :: Sound local Haughton_Relay_FullOpen = TagsConstructor:Request("Haughton_Relay_FullOpen") :: Sound local Haughton_Relay_Open = TagsConstructor:Request("Haughton_Relay_Open") :: Sound + local Controller_Start = TagsConstructor:Request("Haughton_Controller_Start") :: Sound + local Controller_Hum = TagsConstructor:Request("Haughton_Controller_Hum") :: Sound + local Controller_End = TagsConstructor:Request("Haughton_Controller_End") :: Sound + local Controller_Clicks = TagsConstructor:Request("Haughton_Controller_Clicks") :: Sound + local Pulley_Moving = TagsConstructor:Request("Haughton_Pulley_Moving") :: Sound + local Pulley_Start = TagsConstructor:Request("Haughton_Pulley_Start") :: Sound + Controller_Hum.Looped = true local MagnetCog_Row1 = TagsConstructor:Request("Haughton_MagnetCog_Row1") :: BasePart local MagnetCog_Row2 = TagsConstructor:Request("Haughton_MagnetCog_Row2") :: BasePart @@ -101,6 +117,12 @@ function MovingObjects.constructor(TagsConstructor) Relay_Close = Haughton_Relay_Close, Relay_FullOpen = Haughton_Relay_FullOpen, Relay_Open = Haughton_Relay_Open, + Controller_Start = Controller_Start, + Controller_Hum = Controller_Hum, + Controller_End = Controller_End, + Controller_Clicks = Controller_Clicks, + Pulley_Moving = Pulley_Moving, + Pulley_Start = Pulley_Start, MagnetCog_Row1 = MagnetCog_Row1, MagnetCog_Row2 = MagnetCog_Row2, MagnetCog_Row3 = MagnetCog_Row3, @@ -153,13 +175,29 @@ local function ElectricalFlash(Flash: PointLight) end) end +function MovingObjects:ControllerStartAsync() + if math.random(1,30) == 1 then + self.Controller_Start.SoundId = "rbxassetid://108739293674278" + else + self.Controller_Start.SoundId = "rbxassetid://75136143926200" + end + self.Controller_Start:Play() + self.Controller_Start.Ended:Wait() + self.Controller_Hum:Play() +end + function MovingObjects:RotateRelayCogs1Async() self.Relay_Close:Play() RotateRelayCogs(true, false, self.MagnetCog_Row3, self.Cog2_Row3, self.Row3_CounterWeight, self.Row3_RelayDown) task.wait(.30) RotateRelayCogs(true, false, self.MagnetCog_Row2, self.Cog2_Row2, self.Row2_CounterWeight, self.Row2_Relays) task.wait(.30) - RotateRelayCogs(true, true, self.MagnetCog_Row4, self.Cog2_Row4, self.Row4_CounterWeight, self.Row4_Relays) + self.Pulley_Start:Play() + task.spawn(function() + self.Pulley_Start.Ended:Wait() + self.Pulley_Moving:Play() + end) + return RotateRelayCogs(true, true, self.MagnetCog_Row4, self.Cog2_Row4, self.Row4_CounterWeight, self.Row4_Relays) end function MovingObjects:RotateRelayCogs2Async() @@ -171,6 +209,9 @@ function MovingObjects:RotateRelayCogs2Async() task.wait(.1) RotateRelayCogs(false, true,self.MagnetCog_Row4, self.Cog2_Row4, self.Row4_CounterWeight, self.Row4_Relays) ElectricalFlash(self.Row4_Flash) + self.Pulley_Moving:Stop() + task.wait(2) + self.Controller_Clicks:Play() end function MovingObjects:RotateRelayCogs3() @@ -179,6 +220,9 @@ function MovingObjects:RotateRelayCogs3() RotateRelayCogs(false, false, self.MagnetCog_Row3, self.Cog2_Row3, self.Row3_CounterWeight, self.Row3_RelayDown) self.Relay_FullOpen:Play() + self.Controller_Hum:Stop() + task.wait(3) + self.Controller_End:Play() end function MovingObjects:RotateRotodials(Elevator_Y_Velocity) diff --git a/src/server/main/Elevators/Map/Haughton/init.luau b/src/server/main/Elevators/Map/Haughton/init.luau index 3fb1058..23e8b47 100644 --- a/src/server/main/Elevators/Map/Haughton/init.luau +++ b/src/server/main/Elevators/Map/Haughton/init.luau @@ -7,6 +7,7 @@ local ElevatorsDir = ParentDir.Parent local MainDir = ElevatorsDir.Parent local InitElevator = require(ElevatorsDir:WaitForChild("System")) +local Events = require(script:WaitForChild("Events")) local Config = require(script:WaitForChild("Config")) local Buttons = require(script:WaitForChild("Buttons")) local Leveling = require(script:WaitForChild("Leveling")) @@ -14,37 +15,18 @@ local MovingObjects = require(script:WaitForChild("MovingObjects")) local TagsModule = require(MainDir:WaitForChild("Map"):WaitForChild("Load"):WaitForChild("Tags")) return function(TagsConstructor: TagsModule.TagsConstructor, ButtonTags: TagsModule.ElevatorButtons, LanternTags: TagsModule.Lanterns, LandingDoorTags: TagsModule.LandingTags) - - local ElevatorModel = TagsConstructor:Request("Elevator_Haughton") :: Model + local ElevatorModel = TagsConstructor:Request("Elevator_Haughton") :: Model local ElevatorBoxModel = ElevatorModel:WaitForChild("Mover") :: BasePart local Elevator = InitElevator.constructor(ElevatorBoxModel, Config, Leveling) - local MovingObjectsConstructor = MovingObjects.constructor(TagsConstructor) local ButtonsConstructor = Buttons.constructor(Config.Name, ButtonTags, Elevator.Attributes.CurrentFloor) + local EventsConstructor = Events.constructor(Elevator, Config, Elevator.Events, Elevator.Attributes, ButtonsConstructor.Events, ElevatorBoxModel, Leveling, MovingObjectsConstructor) - Elevator.Events.Traveling:Connect(function(_DeltaTime: number, CabPosition: Vector3) - local CabVelocity = ElevatorBoxModel:GetVelocityAtPosition(CabPosition) - local TravelingUpwards = Elevator.Attributes.TravelingUpwards.Value + EventsConstructor:Elevator() + EventsConstructor:Buttons() + ButtonsConstructor:InitForElevator(2, Vector3.new(-.05,0,0)) - MovingObjectsConstructor:RotatePulleyWheel(TravelingUpwards, CabVelocity.Y) - MovingObjectsConstructor:RotateRotodials(CabVelocity.Y) - end) - - Elevator.Events.Progression:Connect(function(previousFloor: number, CurrentFloor: number, NextFloor: number) - warn("previousFloor=",previousFloor,"CurrentFloor=", CurrentFloor, "NextFloor=",NextFloor) - end) - - Elevator.Events.Leveling:Connect(function() - MovingObjectsConstructor:RotateRelayCogs2Async() - end) - - Elevator.Events.Parked:Connect(function() - MovingObjectsConstructor:RotateRelayCogs3() - end) - - ButtonsConstructor:Hook() - - -- MovingObjectsConstructor:RotateRelayCogs1Async() - -- Elevator:StartTraveling() + -- task.wait(3) + -- Elevator:RequestLevelAsync(7, "Down") end diff --git a/src/server/main/Elevators/System/init.luau b/src/server/main/Elevators/System/init.luau index 748b6d3..ed3ea17 100644 --- a/src/server/main/Elevators/System/init.luau +++ b/src/server/main/Elevators/System/init.luau @@ -73,20 +73,26 @@ export type Attributes = { } export type Events = { - Progression: RBXScriptSignal, - Traveling: RBXScriptSignal, - Parked: RBXScriptSignal, - Leveling: RBXScriptSignal, + Progression: RBXScriptSignal, + Traveling: RBXScriptSignal, + TravelStart: RBXScriptSignal, + ManualTravelRequested: RBXScriptSignal, + Parked: RBXScriptSignal, + Leveling: RBXScriptSignal, Leveling3Phase: RBXScriptSignal, __eventInstances__: { Progression: BindableEvent, - Traveling: BindableEvent, - Parked: BindableEvent, - Leveling: BindableEvent, + Traveling: BindableEvent, + TravelStart: BindableEvent, + ManualTravelRequested: BindableEvent, + Parked: BindableEvent, + Leveling: BindableEvent, Leveling3Phase: BindableEvent, } } +export type constructor = ClassConstructor + local Elevator = {} :: Impl_Constructor Elevator.__index = Elevator @@ -146,17 +152,19 @@ function Elevator.constructor(ElevatorBoxModel, ElevatorConfigurationTable, Floo local RelayAlgorithmConstructor = RelayAlgorithm.constructor(BoxAlignPosition) 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 CabTraveling = Instance.new("BindableEvent") :: BindableEvent + local CabTravelStart = Instance.new("BindableEvent") :: BindableEvent + local ManualTravelRequested = 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, - CurrentFloor = Instance.new("IntValue") :: IntValue, - NextFloor = Instance.new("IntValue") :: IntValue, - Goal = Instance.new("IntValue") :: IntValue, + PreviousFloor = Instance.new("IntValue") :: IntValue, + CurrentFloor = Instance.new("IntValue") :: IntValue, + NextFloor = Instance.new("IntValue") :: IntValue, + Goal = Instance.new("IntValue") :: IntValue, TravelingUpwards = Instance.new("BoolValue") :: BoolValue, - Stopped = Instance.new("BoolValue") :: BoolValue + Stopped = Instance.new("BoolValue") :: BoolValue } Attributes.CurrentFloor.Value = 1 Attributes.PreviousFloor.Value = Attributes.CurrentFloor.Value @@ -178,17 +186,22 @@ function Elevator.constructor(ElevatorBoxModel, ElevatorConfigurationTable, Floo AlignPosition = BoxAlignPosition, Configuration = ElevatorConfigurationTable, }, + Events = { Progression = CabProgression.Event, - Traveling = CabTraveling.Event, - Parked = Parked.Event, - Leveling = Leveling.Event, + Traveling = CabTraveling.Event, + TravelStart = CabTravelStart.Event, + ManualTravelRequested = ManualTravelRequested.Event, + Parked = Parked.Event, + Leveling = Leveling.Event, Leveling3Phase = Leveling3Phase.Event, __eventInstances__ = { Progression = CabProgression, - Traveling = CabTraveling, - Parked = Parked, - Leveling = Leveling, + Traveling = CabTraveling, + TravelStart = CabTravelStart, + ManualTravelRequested = ManualTravelRequested, + Parked = Parked, + Leveling = Leveling, Leveling3Phase = Leveling3Phase, } }, @@ -377,6 +390,7 @@ end function Elevator:__TravelToFloorAsync(Level_Int, LEVEL_VEC3_Y_WRAP) if self.Elevator.Configuration.Functions.ManualTravelStart then + self.Events.__eventInstances__.ManualTravelRequested:Fire() self.__functionEvents.StartTraveling.Event:Wait() end if self.__Connections.Moving and self.__Connections.Moving.Connected then @@ -384,6 +398,7 @@ function Elevator:__TravelToFloorAsync(Level_Int, LEVEL_VEC3_Y_WRAP) end assert(not self.Elevator.BoxModel.Anchored, "The elevator cannot move! Its box model is Anchored.") + self.Events.__eventInstances__.TravelStart:Fire() local ElevatorTravelingUpwards = ElevatorGoingUpDirection(self.Attributes.CurrentFloor.Value, Level_Int) self.Attributes.Goal.Value = Level_Int @@ -405,17 +420,20 @@ function Elevator:RequestLevelAsync(RequestedLevel, Direction) local Level = self:GetLevel(RequestedLevel) if Level then - if (RequestedLevel == 1 and Direction == Enums.ElevatorCallDirection.Down) or (RequestedLevel == #self.FloorLevelingPositions and Direction == Enums.ElevatorCallDirection.Up) then - self.ewarn(`Impossible direction requested, Direction={Direction}, RequestedLevel={Level}`) - return false - else - local DirectionQueue = Direction == Enums.ElevatorCallDirection.Up and self.RelayAlgorithm.FloorQueue.Up or self.RelayAlgorithm.FloorQueue.Down - -- local OppositeQueue = Direction == Enums.ElevatorCallDirection.Up and self.RelayAlgorithm.FloorQueue.Down or self.RelayAlgorithm.FloorQueue.Up + if (RequestedLevel == 1 and Direction == Enums.ElevatorCallDirection.Down) then + self.ewarnStudio(`Impossible direction requested, Direction={Direction}, RequestedLevel={RequestedLevel}. correcting...`) + Direction = Enums.ElevatorCallDirection.Up + elseif (RequestedLevel == #self.FloorLevelingPositions and Direction == Enums.ElevatorCallDirection.Up) then + self.ewarnStudio(`Impossible direction requested, Direction={Direction}, RequestedLevel={RequestedLevel}. correcting...`) + Direction = Enums.ElevatorCallDirection.Down + end - self.RelayAlgorithm:AddFloor(Direction :: Enums.ElevatorCallDirectionValues, RequestedLevel) - if #DirectionQueue == 1 then - self:__TravelToFloorAsync(RequestedLevel, Level) - end + local DirectionQueue = Direction == Enums.ElevatorCallDirection.Up and self.RelayAlgorithm.FloorQueue.Up or self.RelayAlgorithm.FloorQueue.Down + -- local OppositeQueue = Direction == Enums.ElevatorCallDirection.Up and self.RelayAlgorithm.FloorQueue.Down or self.RelayAlgorithm.FloorQueue.Up + + self.RelayAlgorithm:AddFloor(Direction :: Enums.ElevatorCallDirectionValues, RequestedLevel) + if #DirectionQueue == 1 then + self:__TravelToFloorAsync(RequestedLevel, Level) end return true end diff --git a/src/server/main/Types/Elevator.luau b/src/server/main/Types/Elevator.luau index db3b628..6d2f080 100644 --- a/src/server/main/Types/Elevator.luau +++ b/src/server/main/Types/Elevator.luau @@ -9,11 +9,26 @@ local StorageService = game:GetService("ReplicatedStorage") local Enums = require(StorageService:WaitForChild("Enums")) local SoundEnums = require(EnumsDir:WaitForChild("Sounds")) -type ButtonProperties = { +export type ButtonProperties = { Color: Color3, Material: Enum.Material } +export type Colors = { + ButtonActivated: ButtonProperties, + ButtonDeactivated: ButtonProperties, + LanternIndicator: { + On: { + Up: ButtonProperties, + Down: ButtonProperties + }, + Off: { + Up: ButtonProperties, + Down: ButtonProperties + } + }, +} + export type ElevatorConfigurationTable = { Name: Enums.ElevatorValues, Responsiveness: number, @@ -31,20 +46,7 @@ export type ElevatorConfigurationTable = { LanternChimeDirection: SoundEnums.ElevatorSoundValues, LanternChimeLanding: SoundEnums.ElevatorSoundValues, }, - Colors: { - ButtonActivated: ButtonProperties, - ButtonDeactivated: ButtonProperties, - LanternIndicator: { - On: { - Up: ButtonProperties, - Down: ButtonProperties - }, - Off: { - Up: ButtonProperties, - Down: ButtonProperties - } - }, - }, + Colors: Colors, } return nil