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
|
||||
@@ -20,8 +20,8 @@ ElevatorConfig.FloorLeveling3PhaseDistance = 1.5
|
||||
ElevatorConfig.LevelingVelocity = .5
|
||||
ElevatorConfig.Phase3LevelingVelocity = .5
|
||||
ElevatorConfig.ParkedDistance = 0.2
|
||||
ElevatorConfig.Responsiveness = 5
|
||||
ElevatorConfig.MaxVelocity = 7
|
||||
ElevatorConfig.Responsiveness = 5
|
||||
ElevatorConfig.MaxVelocity = 7
|
||||
|
||||
ElevatorConfig.Functions = {
|
||||
ManualTravelStart = true
|
||||
@@ -35,28 +35,33 @@ ElevatorConfig.Colors = {
|
||||
ButtonDeactivated = {
|
||||
Color = Color3.fromRGB(136,143,145),
|
||||
Material = Enum.Material.SmoothPlastic
|
||||
},
|
||||
LanternIndicator = {
|
||||
On = {
|
||||
Up = {
|
||||
Color = Color3.fromRGB(44,255,157),
|
||||
Material = Enum.Material.Neon
|
||||
},
|
||||
Down = {
|
||||
Color = Color3.fromRGB(255,29,101),
|
||||
Material = Enum.Material.Neon
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
ElevatorConfig.Lanterns = {
|
||||
On = {
|
||||
Up = {
|
||||
Color = Color3.fromRGB(44,255,157),
|
||||
Material = Enum.Material.Neon,
|
||||
Time = .30
|
||||
},
|
||||
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
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -36,9 +36,7 @@ type Constructor_Return_Props = {
|
||||
|
||||
export type Lantern = {
|
||||
Inst: BasePart,
|
||||
Light: BasePart?,
|
||||
PointLight: PointLight?,
|
||||
Played: boolean
|
||||
}
|
||||
|
||||
export type ElevatorButtons = {
|
||||
@@ -225,35 +223,23 @@ function Tags:__ElevatorLanterns()
|
||||
|
||||
if Floor then
|
||||
if not Lanterns[EnumValue :: Enums.ElevatorValues][Floor] then
|
||||
local Light = ((Inst :: BasePart).Parent :: Instance):FindFirstChild("Light") :: BasePart?
|
||||
|
||||
Lanterns[EnumValue :: Enums.ElevatorValues][Floor] = {
|
||||
Inst = Inst :: BasePart,
|
||||
Light = Light,
|
||||
PointLight = Light and Light:FindFirstChildOfClass("PointLight") :: PointLight?,
|
||||
Played = false
|
||||
PointLight = (Inst :: BasePart):FindFirstChildWhichIsA("PointLight", true) :: PointLight?
|
||||
}
|
||||
else
|
||||
warn(`Lanterns: Floor "{tostring(Floor)}" was already wrote while parsing`)
|
||||
end
|
||||
else
|
||||
if FloorHint == "Up" then
|
||||
local Light = ((Inst :: BasePart).Parent :: Instance):FindFirstChild("Light") :: BasePart?
|
||||
|
||||
Lanterns[EnumValue :: Enums.ElevatorValues].Up = {
|
||||
Inst = Inst :: BasePart,
|
||||
Light = Light,
|
||||
PointLight = Light and Light:FindFirstChildOfClass("PointLight") :: PointLight?,
|
||||
Played = false
|
||||
PointLight = (Inst :: BasePart):FindFirstChildWhichIsA("PointLight", true) :: PointLight?
|
||||
}
|
||||
elseif FloorHint == "Down" then
|
||||
local Light = ((Inst :: BasePart).Parent :: Instance):FindFirstChild("Light") :: BasePart?
|
||||
|
||||
Lanterns[EnumValue :: Enums.ElevatorValues].Down = {
|
||||
Inst = Inst :: BasePart,
|
||||
Light = Light,
|
||||
PointLight = Light and Light:FindFirstChildOfClass("PointLight") :: PointLight?,
|
||||
Played = false
|
||||
PointLight = (Inst :: BasePart):FindFirstChildWhichIsA("PointLight", true) :: PointLight?
|
||||
}
|
||||
else
|
||||
warn(`Lanterns: Unknown type paired with "DirectionIndicator", {FloorHint}`)
|
||||
|
||||
@@ -11,24 +11,27 @@ local DoorEnums = require(EnumsDir:WaitForChild("Doors"))
|
||||
local Enums = require(StorageService:WaitForChild("Enums"))
|
||||
local SoundEnums = require(EnumsDir:WaitForChild("Sounds"))
|
||||
|
||||
export type ButtonProperties = {
|
||||
export type ButtonProperties = {
|
||||
Color: Color3,
|
||||
Material: Enum.Material
|
||||
}
|
||||
|
||||
export type Colors = {
|
||||
export type ButtonColors = {
|
||||
ButtonActivated: ButtonProperties,
|
||||
ButtonDeactivated: ButtonProperties,
|
||||
LanternIndicator: {
|
||||
On: {
|
||||
Up: ButtonProperties,
|
||||
Down: ButtonProperties
|
||||
},
|
||||
Off: {
|
||||
Up: ButtonProperties,
|
||||
Down: ButtonProperties
|
||||
}
|
||||
}
|
||||
|
||||
export type LanternProperties = ButtonProperties & {Time: number}
|
||||
|
||||
export type Lanterns = {
|
||||
On: {
|
||||
Up: LanternProperties,
|
||||
Down: LanternProperties
|
||||
},
|
||||
Off: {
|
||||
Up: LanternProperties,
|
||||
Down: LanternProperties
|
||||
}
|
||||
}
|
||||
|
||||
export type ElevatorConfigurationTable = {
|
||||
@@ -48,7 +51,8 @@ export type ElevatorConfigurationTable = {
|
||||
LanternChimeDirection: SoundEnums.ElevatorSoundValues,
|
||||
LanternChimeLanding: SoundEnums.ElevatorSoundValues,
|
||||
},
|
||||
Colors: Colors,
|
||||
Colors: ButtonColors,
|
||||
Lanterns: Lanterns
|
||||
}
|
||||
|
||||
export type DoorsConfigProperties = {
|
||||
|
||||
Reference in New Issue
Block a user