This commit is contained in:
2024-09-11 15:53:56 -04:00
parent f7366e831a
commit 35fdaf56a9
6 changed files with 111 additions and 53 deletions

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,63 @@
--!optimize 2
--!strict
local MainDir = script.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, UpDirection: 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
}
local ArrowLanterns = {} :: Impl_Constructor
ArrowLanterns.__index = ArrowLanterns
function ArrowLanterns.constructor(Lanterns, ElevatorConfig)
return setmetatable({
Lanterns = Lanterns,
ElevatorConfig = ElevatorConfig
}, ArrowLanterns)
end
function ArrowLanterns:Toggle(OnState, UpDirection)
local LanternType = UpDirection and self.Lanterns.Up or self.Lanterns.Down
if LanternType then
--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)
LanternType.Inst.Material = ConfigState.Material
local TweenTime = TweenInfo.new(ConfigState.Time)
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. UpDirection={UpDirection} OnState={OnState}, LaternType={LanternType}`)
end
return nil
end
function ArrowLanterns:Off()
return self:Toggle(false, true), self:Toggle(false, false)
end
return ArrowLanterns

View File

@@ -20,8 +20,8 @@ ElevatorConfig.FloorLeveling3PhaseDistance = 1.5
ElevatorConfig.LevelingVelocity = .5 ElevatorConfig.LevelingVelocity = .5
ElevatorConfig.Phase3LevelingVelocity = .5 ElevatorConfig.Phase3LevelingVelocity = .5
ElevatorConfig.ParkedDistance = 0.2 ElevatorConfig.ParkedDistance = 0.2
ElevatorConfig.Responsiveness = 5 ElevatorConfig.Responsiveness = 5
ElevatorConfig.MaxVelocity = 7 ElevatorConfig.MaxVelocity = 7
ElevatorConfig.Functions = { ElevatorConfig.Functions = {
ManualTravelStart = true ManualTravelStart = true
@@ -35,28 +35,33 @@ ElevatorConfig.Colors = {
ButtonDeactivated = { ButtonDeactivated = {
Color = Color3.fromRGB(136,143,145), Color = Color3.fromRGB(136,143,145),
Material = Enum.Material.SmoothPlastic Material = Enum.Material.SmoothPlastic
}, }
LanternIndicator = { }
On = {
Up = { ElevatorConfig.Lanterns = {
Color = Color3.fromRGB(44,255,157), On = {
Material = Enum.Material.Neon Up = {
}, Color = Color3.fromRGB(44,255,157),
Down = { Material = Enum.Material.Neon,
Color = Color3.fromRGB(255,29,101), Time = .30
Material = Enum.Material.Neon },
}, Down = {
Color = Color3.fromRGB(255,29,101),
Material = Enum.Material.Neon,
Time = .30
},
},
Off = {
Up = {
Color = Color3.fromRGB(172,174,197),
Material = Enum.Material.SmoothPlastic,
Time = .30
},
Down = {
Color = Color3.fromRGB(172,174,197),
Material = Enum.Material.SmoothPlastic,
Time = .30
}, },
Off = {
Up = {
Color = Color3.fromRGB(172,174,197),
Material = Enum.Material.SmoothPlastic
},
Down = {
Color = Color3.fromRGB(172,174,197),
Material = Enum.Material.SmoothPlastic
},
}
} }
} }

View File

@@ -36,9 +36,7 @@ type Constructor_Return_Props = {
export type Lantern = { export type Lantern = {
Inst: BasePart, Inst: BasePart,
Light: BasePart?,
PointLight: PointLight?, PointLight: PointLight?,
Played: boolean
} }
export type ElevatorButtons = { export type ElevatorButtons = {
@@ -225,35 +223,23 @@ function Tags:__ElevatorLanterns()
if Floor then if Floor then
if not Lanterns[EnumValue :: Enums.ElevatorValues][Floor] then if not Lanterns[EnumValue :: Enums.ElevatorValues][Floor] then
local Light = ((Inst :: BasePart).Parent :: Instance):FindFirstChild("Light") :: BasePart?
Lanterns[EnumValue :: Enums.ElevatorValues][Floor] = { Lanterns[EnumValue :: Enums.ElevatorValues][Floor] = {
Inst = Inst :: BasePart, Inst = Inst :: BasePart,
Light = Light, PointLight = (Inst :: BasePart):FindFirstChildWhichIsA("PointLight", true) :: PointLight?
PointLight = Light and Light:FindFirstChildOfClass("PointLight") :: PointLight?,
Played = false
} }
else else
warn(`Lanterns: Floor "{tostring(Floor)}" was already wrote while parsing`) warn(`Lanterns: Floor "{tostring(Floor)}" was already wrote while parsing`)
end end
else else
if FloorHint == "Up" then if FloorHint == "Up" then
local Light = ((Inst :: BasePart).Parent :: Instance):FindFirstChild("Light") :: BasePart?
Lanterns[EnumValue :: Enums.ElevatorValues].Up = { Lanterns[EnumValue :: Enums.ElevatorValues].Up = {
Inst = Inst :: BasePart, Inst = Inst :: BasePart,
Light = Light, PointLight = (Inst :: BasePart):FindFirstChildWhichIsA("PointLight", true) :: PointLight?
PointLight = Light and Light:FindFirstChildOfClass("PointLight") :: PointLight?,
Played = false
} }
elseif FloorHint == "Down" then elseif FloorHint == "Down" then
local Light = ((Inst :: BasePart).Parent :: Instance):FindFirstChild("Light") :: BasePart?
Lanterns[EnumValue :: Enums.ElevatorValues].Down = { Lanterns[EnumValue :: Enums.ElevatorValues].Down = {
Inst = Inst :: BasePart, Inst = Inst :: BasePart,
Light = Light, PointLight = (Inst :: BasePart):FindFirstChildWhichIsA("PointLight", true) :: PointLight?
PointLight = Light and Light:FindFirstChildOfClass("PointLight") :: PointLight?,
Played = false
} }
else else
warn(`Lanterns: Unknown type paired with "DirectionIndicator", {FloorHint}`) warn(`Lanterns: Unknown type paired with "DirectionIndicator", {FloorHint}`)

View File

@@ -11,24 +11,27 @@ local DoorEnums = require(EnumsDir:WaitForChild("Doors"))
local Enums = require(StorageService:WaitForChild("Enums")) local Enums = require(StorageService:WaitForChild("Enums"))
local SoundEnums = require(EnumsDir:WaitForChild("Sounds")) local SoundEnums = require(EnumsDir:WaitForChild("Sounds"))
export type ButtonProperties = { export type ButtonProperties = {
Color: Color3, Color: Color3,
Material: Enum.Material Material: Enum.Material
} }
export type Colors = { export type ButtonColors = {
ButtonActivated: ButtonProperties, ButtonActivated: ButtonProperties,
ButtonDeactivated: ButtonProperties, ButtonDeactivated: ButtonProperties,
LanternIndicator: { }
On: {
Up: ButtonProperties, export type LanternProperties = ButtonProperties & {Time: number}
Down: ButtonProperties
}, export type Lanterns = {
Off: { On: {
Up: ButtonProperties, Up: LanternProperties,
Down: ButtonProperties Down: LanternProperties
}
}, },
Off: {
Up: LanternProperties,
Down: LanternProperties
}
} }
export type ElevatorConfigurationTable = { export type ElevatorConfigurationTable = {
@@ -48,7 +51,8 @@ export type ElevatorConfigurationTable = {
LanternChimeDirection: SoundEnums.ElevatorSoundValues, LanternChimeDirection: SoundEnums.ElevatorSoundValues,
LanternChimeLanding: SoundEnums.ElevatorSoundValues, LanternChimeLanding: SoundEnums.ElevatorSoundValues,
}, },
Colors: Colors, Colors: ButtonColors,
Lanterns: Lanterns
} }
export type DoorsConfigProperties = { export type DoorsConfigProperties = {