mirror of
https://github.com/unixtensor/Roblox-Elevator-Game.git
synced 2025-12-14 06:41:55 +00:00
Lanterns
This commit is contained in:
File diff suppressed because one or more lines are too long
63
src/server/main/Elevators/Lanterns/Arrows.luau
Normal file
63
src/server/main/Elevators/Lanterns/Arrows.luau
Normal 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
|
||||||
@@ -35,29 +35,34 @@ 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 = {
|
}
|
||||||
|
|
||||||
|
ElevatorConfig.Lanterns = {
|
||||||
On = {
|
On = {
|
||||||
Up = {
|
Up = {
|
||||||
Color = Color3.fromRGB(44,255,157),
|
Color = Color3.fromRGB(44,255,157),
|
||||||
Material = Enum.Material.Neon
|
Material = Enum.Material.Neon,
|
||||||
|
Time = .30
|
||||||
},
|
},
|
||||||
Down = {
|
Down = {
|
||||||
Color = Color3.fromRGB(255,29,101),
|
Color = Color3.fromRGB(255,29,101),
|
||||||
Material = Enum.Material.Neon
|
Material = Enum.Material.Neon,
|
||||||
|
Time = .30
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
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
|
||||||
},
|
},
|
||||||
Down = {
|
Down = {
|
||||||
Color = Color3.fromRGB(172,174,197),
|
Color = Color3.fromRGB(172,174,197),
|
||||||
Material = Enum.Material.SmoothPlastic
|
Material = Enum.Material.SmoothPlastic,
|
||||||
|
Time = .30
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
local DoorsConfig: ElevatorTypes.DoorsConfig = {
|
local DoorsConfig: ElevatorTypes.DoorsConfig = {
|
||||||
|
|||||||
@@ -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}`)
|
||||||
|
|||||||
@@ -16,19 +16,22 @@ export type ButtonProperties = {
|
|||||||
Material: Enum.Material
|
Material: Enum.Material
|
||||||
}
|
}
|
||||||
|
|
||||||
export type Colors = {
|
export type ButtonColors = {
|
||||||
ButtonActivated: ButtonProperties,
|
ButtonActivated: ButtonProperties,
|
||||||
ButtonDeactivated: ButtonProperties,
|
ButtonDeactivated: ButtonProperties,
|
||||||
LanternIndicator: {
|
}
|
||||||
|
|
||||||
|
export type LanternProperties = ButtonProperties & {Time: number}
|
||||||
|
|
||||||
|
export type Lanterns = {
|
||||||
On: {
|
On: {
|
||||||
Up: ButtonProperties,
|
Up: LanternProperties,
|
||||||
Down: ButtonProperties
|
Down: LanternProperties
|
||||||
},
|
},
|
||||||
Off: {
|
Off: {
|
||||||
Up: ButtonProperties,
|
Up: LanternProperties,
|
||||||
Down: ButtonProperties
|
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 = {
|
||||||
|
|||||||
Reference in New Issue
Block a user