mirror of
https://github.com/unixtensor/Roblox-Elevator-Game.git
synced 2025-12-14 06:41:55 +00:00
Sounds and working
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -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<boolean, number | string, Tags.ButtonPropertiesSafe>,
|
||||
__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
|
||||
131
src/server/main/Elevators/Map/Haughton/Events.luau
Normal file
131
src/server/main/Elevators/Map/Haughton/Events.luau
Normal file
@@ -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<RequestedFloor
|
||||
end
|
||||
|
||||
function Events:Buttons()
|
||||
self.ButtonEvents.FloorButtonActivated:Connect(function(Success: boolean, Floor: number | string, Properties: TagsModule.ButtonPropertiesSafe)
|
||||
Properties.Prompt.Enabled = false
|
||||
(Properties.Inst :: BasePart).Color = self.ElevatorConfig.Colors.ButtonActivated.Color;
|
||||
(Properties.Inst :: BasePart).Material = self.ElevatorConfig.Colors.ButtonActivated.Material
|
||||
|
||||
if Success then
|
||||
local CorrectFloor: number = 0
|
||||
if type(Floor) == "string" then
|
||||
if Floor == "B" then
|
||||
CorrectFloor = 1
|
||||
end
|
||||
else
|
||||
-- CorrectFloor = Floor~=#self.Leveling and Floor+1 or Floor
|
||||
CorrectFloor = Floor
|
||||
end
|
||||
if CorrectFloor ~= 0 then
|
||||
local Direction = ElevatorGoingUpDirection(self.ElevatorAttributes.CurrentFloor.Value, CorrectFloor) and Enums.ElevatorCallDirection.Up or Enums.ElevatorCallDirection.Down
|
||||
task.spawn(function()
|
||||
self.InitElevatorConstructor:RequestLevelAsync(CorrectFloor, Direction :: Enums.ElevatorCallDirectionValues)
|
||||
end)
|
||||
else
|
||||
warn(`[{self.ElevatorConfig.Name}]: The floor index was 0. Call={Floor}`)
|
||||
end
|
||||
else
|
||||
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
return Events
|
||||
@@ -3,12 +3,12 @@
|
||||
--!strict
|
||||
|
||||
return {
|
||||
["B"] = 1.163,
|
||||
[1] = 19.163,
|
||||
[2] = 37.507,
|
||||
[3] = 55.464,
|
||||
[4] = 73.383,
|
||||
[5] = 91.301,
|
||||
[6] = 109.24,
|
||||
[7] = 127.185,
|
||||
[1] = 1.163, --Basement
|
||||
[2] = 19.163,
|
||||
[3] = 37.507,
|
||||
[4] = 55.464,
|
||||
[5] = 73.383,
|
||||
[6] = 91.301,
|
||||
[7] = 109.243,
|
||||
[8] = 127.185,
|
||||
}
|
||||
|
||||
@@ -13,11 +13,12 @@ type Impl_Constructor = {
|
||||
__index: Impl_Constructor,
|
||||
constructor: Constructor_Fun,
|
||||
--Class functions
|
||||
RotateRelayCogs1Async: (self: ClassConstructor) -> (),
|
||||
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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -73,20 +73,26 @@ export type Attributes = {
|
||||
}
|
||||
|
||||
export type Events = {
|
||||
Progression: RBXScriptSignal<number, number, number>,
|
||||
Traveling: RBXScriptSignal<number, Vector3>,
|
||||
Parked: RBXScriptSignal,
|
||||
Leveling: RBXScriptSignal,
|
||||
Progression: RBXScriptSignal<number, number, number>,
|
||||
Traveling: RBXScriptSignal<number, Vector3>,
|
||||
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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user