Files
Roblox-Elevator-Game/src/server/main/Elevators/System/Lanterns/Arrows.luau

65 lines
2.2 KiB
Lua

--!optimize 2
--!strict
local MainDir = script.Parent.Parent.Parent.Parent
local TagsModule = require(MainDir:WaitForChild("Map"):WaitForChild("Load"):WaitForChild("Tags"))
local ElevatorTypes = require(MainDir:WaitForChild("Types"):WaitForChild("Elevator"))
local TS = game:GetService("TweenService")
type ClassConstructor = typeof(setmetatable({} :: Constructor_Return_Props, {} :: Impl_Constructor))
type Impl_Constructor = {
__index: Impl_Constructor,
constructor: Constructor_Fun,
--Class functions
Toggle: (self: ClassConstructor, OnState: boolean, UpLantern: boolean) -> Tween?,
Off: (self: ClassConstructor) -> (Tween?, Tween?),
}
type Constructor_Fun = (Lanterns: TagsModule.Lanterns, ElevatorConfig: ElevatorTypes.ElevatorConfigurationTable) -> ClassConstructor
type Constructor_Return_Props = {
Lanterns: TagsModule.Lanterns,
ElevatorConfig: ElevatorTypes.ElevatorConfigurationTable
}
export type constructor = ClassConstructor
local ArrowLanterns = {} :: Impl_Constructor
ArrowLanterns.__index = ArrowLanterns
function ArrowLanterns.constructor(Lanterns, ElevatorConfig)
return setmetatable({
Lanterns = Lanterns,
ElevatorConfig = ElevatorConfig
}, ArrowLanterns)
end
function ArrowLanterns:Toggle(OnState, UpLantern)
local LanternType = UpLantern and self.Lanterns.Up or self.Lanterns.Down
if LanternType then
--mega boolean short circuit
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
local TweenTime = TweenInfo.new(ConfigState.Time, Enum.EasingStyle.Linear)
local UpArrowTween = TS:Create(LanternType.Inst, TweenTime, {
Color = ConfigState.Color
})
UpArrowTween:Play()
TS:Create(LanternType.PointLight, TweenTime, {
Brightness = OnState and 1 or 0
}):Play()
return UpArrowTween
else
warn(`[{self.ElevatorConfig.Name}]: Could not toggle a direction lantern. UpLantern={UpLantern} OnState={OnState}, LaternType={LanternType}`)
end
return nil
end
function ArrowLanterns:Off()
return self:Toggle(false, true), self:Toggle(false, false)
end
return ArrowLanterns