Lantern config and working lantern state

This commit is contained in:
2024-09-13 00:11:12 -04:00
parent 80b0edeca8
commit 192a971723
4 changed files with 53 additions and 17 deletions

View File

@@ -43,24 +43,24 @@ ElevatorConfig.Lanterns = {
Up = { Up = {
Color = Color3.fromRGB(44,255,157), Color = Color3.fromRGB(44,255,157),
Material = Enum.Material.Neon, Material = Enum.Material.Neon,
Time = .30 Time = 1
}, },
Down = { Down = {
Color = Color3.fromRGB(255,29,101), Color = Color3.fromRGB(255, 56, 59),
Material = Enum.Material.Neon, Material = Enum.Material.Neon,
Time = .30 Time = 1
}, },
}, },
Off = { Off = {
Up = { Up = {
Color = Color3.fromRGB(172,174,197), Color = Color3.fromRGB(172,174,197),
Material = Enum.Material.SmoothPlastic, Material = Enum.Material.SmoothPlastic,
Time = .30 Time = 1
}, },
Down = { Down = {
Color = Color3.fromRGB(172,174,197), Color = Color3.fromRGB(172,174,197),
Material = Enum.Material.SmoothPlastic, Material = Enum.Material.SmoothPlastic,
Time = .30 Time = 1
}, },
} }
} }
@@ -68,12 +68,12 @@ ElevatorConfig.Lanterns = {
local DoorsConfig: ElevatorTypes.DoorsConfig = { local DoorsConfig: ElevatorTypes.DoorsConfig = {
Cab = { Cab = {
Type = DoorEnums.Door.DoubleSpeed, Type = DoorEnums.Door.DoubleSpeed,
Time = 4, Time = 5,
Goal = Vector3.new(4.027) Goal = Vector3.new(4.027)
}, },
Landing = { Landing = {
Type = DoorEnums.Door.SingleSpeed, Type = DoorEnums.Door.SingleSpeed,
Time = 4, Time = 5,
Goal = Vector3.new(4.221) Goal = Vector3.new(4.221)
} }
} }

View File

@@ -5,8 +5,11 @@ local ParentDir = script.Parent
local ElevatorsDir = ParentDir.Parent.Parent local ElevatorsDir = ParentDir.Parent.Parent
local MainDir = ElevatorsDir.Parent local MainDir = ElevatorsDir.Parent
local ElevatorSystem = ElevatorsDir:WaitForChild("System")
local ArrowLanterns = require(ElevatorSystem:WaitForChild("Lanterns"):WaitForChild("Arrows"))
local ButtonEvents = require(script:WaitForChild("Buttons")) local ButtonEvents = require(script:WaitForChild("Buttons"))
local InitElevator = require(ElevatorsDir:WaitForChild("System")) local InitElevator = require(ElevatorSystem)
local Doors = require(ParentDir:WaitForChild("Doors")) local Doors = require(ParentDir:WaitForChild("Doors"))
local Buttons = require(ParentDir:WaitForChild("Buttons")) local Buttons = require(ParentDir:WaitForChild("Buttons"))
local MovingObjects = require(ParentDir:WaitForChild("MovingObjects")) local MovingObjects = require(ParentDir:WaitForChild("MovingObjects"))
@@ -25,6 +28,7 @@ type Constructor_Fun = (
ElevatorConstructor: InitElevator.constructor, ElevatorConstructor: InitElevator.constructor,
ElevatorConfig: ElevatorTypes.ElevatorConfigurationTable, ElevatorConfig: ElevatorTypes.ElevatorConfigurationTable,
DoorsConstructor: Doors.constructor, DoorsConstructor: Doors.constructor,
ArrowLanternsConstructor: ArrowLanterns.constructor,
ButtonsConstructor: Buttons.constructor, ButtonsConstructor: Buttons.constructor,
ElevatorBoxModel: BasePart, ElevatorBoxModel: BasePart,
Leveling: {number}, Leveling: {number},
@@ -36,6 +40,7 @@ type Constructor_Return_Props = {
ElevatorConstructor: InitElevator.constructor, ElevatorConstructor: InitElevator.constructor,
ElevatorConfig: ElevatorTypes.ElevatorConfigurationTable, ElevatorConfig: ElevatorTypes.ElevatorConfigurationTable,
DoorsConstructor: Doors.constructor, DoorsConstructor: Doors.constructor,
ArrowLanternsConstructor: ArrowLanterns.constructor,
ButtonsConstructor: Buttons.constructor, ButtonsConstructor: Buttons.constructor,
ElevatorBoxModel: BasePart, ElevatorBoxModel: BasePart,
Leveling: {number}, Leveling: {number},
@@ -50,6 +55,7 @@ function Events.constructor(
ElevatorConstructor, ElevatorConstructor,
ElevatorConfig, ElevatorConfig,
DoorsConstructor, DoorsConstructor,
ArrowLanternsConstructor,
ButtonsConstructor, ButtonsConstructor,
ElevatorBoxModel, ElevatorBoxModel,
Leveling, Leveling,
@@ -60,6 +66,7 @@ function Events.constructor(
ElevatorConstructor = ElevatorConstructor, ElevatorConstructor = ElevatorConstructor,
ElevatorConfig = ElevatorConfig, ElevatorConfig = ElevatorConfig,
DoorsConstructor = DoorsConstructor, DoorsConstructor = DoorsConstructor,
ArrowLanternsConstructor = ArrowLanternsConstructor,
ButtonsConstructor = ButtonsConstructor, ButtonsConstructor = ButtonsConstructor,
ElevatorBoxModel = ElevatorBoxModel, ElevatorBoxModel = ElevatorBoxModel,
Leveling = Leveling, Leveling = Leveling,
@@ -68,6 +75,20 @@ function Events.constructor(
}, Events) }, Events)
end end
local function ElevatorAttributes(self: ClassConstructor)
self.ElevatorConstructor.Attributes.TravelingUpwards:GetPropertyChangedSignal("Value"):Connect(function()
if self.ElevatorConstructor.Attributes.TravelingUpwards.Value then
self.ArrowLanternsConstructor:Toggle(true, true)
self.ArrowLanternsConstructor:Toggle(false, false)
else
self.ArrowLanternsConstructor:Toggle(true, false)
self.ArrowLanternsConstructor:Toggle(false, true)
end
end)
end
local RandNew = Random.new()
local function ElevatorEvents(self: ClassConstructor) local function ElevatorEvents(self: ClassConstructor)
self.ElevatorConstructor.Events.Traveling:Connect(function(_DeltaTime: number, CabPosition: Vector3) self.ElevatorConstructor.Events.Traveling:Connect(function(_DeltaTime: number, CabPosition: Vector3)
local CabVelocity = self.ElevatorBoxModel:GetVelocityAtPosition(CabPosition) local CabVelocity = self.ElevatorBoxModel:GetVelocityAtPosition(CabPosition)
@@ -102,7 +123,12 @@ local function ElevatorEvents(self: ClassConstructor)
self.DoorsConstructor:OpenCabAsync() self.DoorsConstructor:OpenCabAsync()
end end
self.MovingObjectsConstructor:RotateRelayCogs3() self.MovingObjectsConstructor:RotateRelayCogs3()
self.ElevatorConfig.FloorLevelingDistance = 10
print(self.ElevatorConfig.FloorLevelingDistance)
end) end)
ElevatorAttributes(self)
end end
function Events:InitButtons() function Events:InitButtons()

View File

@@ -1,13 +1,16 @@
--!optimize 2 --!optimize 2
--!strict --!strict
local ButtonPromptsDistance = Vector3.new(-.05,0,0) local ButtonPromptsDistance = Vector3.new(-.05)
local ParentDir = script.Parent local ParentDir = script.Parent
local ElevatorsDir = ParentDir.Parent local ElevatorsDir = ParentDir.Parent
local MainDir = ElevatorsDir.Parent local MainDir = ElevatorsDir.Parent
local InitElevator = require(ElevatorsDir:WaitForChild("System")) local ElevatorSystem = ElevatorsDir:WaitForChild("System")
local InitElevator = require(ElevatorSystem)
local ArrowLantern = require(ElevatorSystem:WaitForChild("Lanterns"):WaitForChild("Arrows"))
local Events = require(script:WaitForChild("Events")) local Events = require(script:WaitForChild("Events"))
local Config = require(script:WaitForChild("Config")) local Config = require(script:WaitForChild("Config"))
local Buttons = require(script:WaitForChild("Buttons")) local Buttons = require(script:WaitForChild("Buttons"))
@@ -28,19 +31,24 @@ return function(TagsConstructor: TagsModule.TagsConstructor, ButtonTags: TagsMod
local ButtonsConstructor = Buttons.constructor(Config.Elevator.Name, ButtonTags, Elevator.Attributes.CurrentFloor) local ButtonsConstructor = Buttons.constructor(Config.Elevator.Name, ButtonTags, Elevator.Attributes.CurrentFloor)
ButtonsConstructor:InitForElevator(2, ButtonPromptsDistance) ButtonsConstructor:InitForElevator(2, ButtonPromptsDistance)
local ArrowLanternConstructor = ArrowLantern.constructor(LanternTags, Config.Elevator)
local TractionRopesConstructor = TractionRopes.constructor(CabRopesObject, PulleyRopesObject) local TractionRopesConstructor = TractionRopes.constructor(CabRopesObject, PulleyRopesObject)
local DoorsConstructor = Doors.constructor(Leveling, ElevatorBoxModel, Config.Doors, LandingDoorTags) local DoorsConstructor = Doors.constructor(Leveling, ElevatorBoxModel, Config.Doors, LandingDoorTags)
local EventsConstructor = Events.constructor( local EventsConstructor = Events.constructor(
Elevator, Elevator,
Config.Elevator, Config.Elevator,
DoorsConstructor, DoorsConstructor,
ArrowLanternConstructor,
ButtonsConstructor, ButtonsConstructor,
ElevatorBoxModel, ElevatorBoxModel,
Leveling, Leveling,
MovingObjectsConstructor, MovingObjectsConstructor,
TractionRopesConstructor TractionRopesConstructor
) )
TractionRopesConstructor:Update()
EventsConstructor:InitButtons() EventsConstructor:InitButtons()
ArrowLanternConstructor:Toggle(true, true)
if DoorsConstructor:OpenAtFloor(Elevator.Attributes.CurrentFloor.Value) then if DoorsConstructor:OpenAtFloor(Elevator.Attributes.CurrentFloor.Value) then
DoorsConstructor:OpenCabAsync() DoorsConstructor:OpenCabAsync()
end end

View File

@@ -1,7 +1,7 @@
--!optimize 2 --!optimize 2
--!strict --!strict
local MainDir = script.Parent.Parent.Parent local MainDir = script.Parent.Parent.Parent.Parent
local TagsModule = require(MainDir:WaitForChild("Map"):WaitForChild("Load"):WaitForChild("Tags")) local TagsModule = require(MainDir:WaitForChild("Map"):WaitForChild("Load"):WaitForChild("Tags"))
local ElevatorTypes = require(MainDir:WaitForChild("Types"):WaitForChild("Elevator")) local ElevatorTypes = require(MainDir:WaitForChild("Types"):WaitForChild("Elevator"))
@@ -12,7 +12,7 @@ type Impl_Constructor = {
__index: Impl_Constructor, __index: Impl_Constructor,
constructor: Constructor_Fun, constructor: Constructor_Fun,
--Class functions --Class functions
Toggle: (self: ClassConstructor, OnState: boolean, UpDirection: boolean) -> Tween?, Toggle: (self: ClassConstructor, OnState: boolean, UpLantern: boolean) -> Tween?,
Off: (self: ClassConstructor) -> (Tween?, Tween?), Off: (self: ClassConstructor) -> (Tween?, Tween?),
} }
@@ -22,6 +22,8 @@ type Constructor_Return_Props = {
ElevatorConfig: ElevatorTypes.ElevatorConfigurationTable ElevatorConfig: ElevatorTypes.ElevatorConfigurationTable
} }
export type constructor = ClassConstructor
local ArrowLanterns = {} :: Impl_Constructor local ArrowLanterns = {} :: Impl_Constructor
ArrowLanterns.__index = ArrowLanterns ArrowLanterns.__index = ArrowLanterns
@@ -32,15 +34,15 @@ function ArrowLanterns.constructor(Lanterns, ElevatorConfig)
}, ArrowLanterns) }, ArrowLanterns)
end end
function ArrowLanterns:Toggle(OnState, UpDirection) function ArrowLanterns:Toggle(OnState, UpLantern)
local LanternType = UpDirection and self.Lanterns.Up or self.Lanterns.Down local LanternType = UpLantern and self.Lanterns.Up or self.Lanterns.Down
if LanternType then if LanternType then
--mega boolean short circuit --mega boolean short circuit
local ConfigState = OnState and (UpDirection and self.ElevatorConfig.Lanterns.On.Up or self.ElevatorConfig.Lanterns.On.Down) or (UpDirection and self.ElevatorConfig.Lanterns.Off.Up or self.ElevatorConfig.Lanterns.Off.Down) local ConfigState = OnState and (UpLantern and self.ElevatorConfig.Lanterns.On.Up or self.ElevatorConfig.Lanterns.On.Down) or (UpLantern and self.ElevatorConfig.Lanterns.Off.Up or self.ElevatorConfig.Lanterns.Off.Down)
LanternType.Inst.Material = ConfigState.Material LanternType.Inst.Material = ConfigState.Material
local TweenTime = TweenInfo.new(ConfigState.Time) local TweenTime = TweenInfo.new(ConfigState.Time, Enum.EasingStyle.Linear)
local UpArrowTween = TS:Create(LanternType.Inst, TweenTime, { local UpArrowTween = TS:Create(LanternType.Inst, TweenTime, {
Color = ConfigState.Color Color = ConfigState.Color
}) })
@@ -51,7 +53,7 @@ function ArrowLanterns:Toggle(OnState, UpDirection)
return UpArrowTween return UpArrowTween
else else
warn(`[{self.ElevatorConfig.Name}]: Could not toggle a direction lantern. UpDirection={UpDirection} OnState={OnState}, LaternType={LanternType}`) warn(`[{self.ElevatorConfig.Name}]: Could not toggle a direction lantern. UpLantern={UpLantern} OnState={OnState}, LaternType={LanternType}`)
end end
return nil return nil
end end