Merge pull request #1 from unixtensor/Lanterns

Lanterns
This commit is contained in:
2024-09-13 00:16:19 -04:00
committed by GitHub
8 changed files with 152 additions and 58 deletions

File diff suppressed because one or more lines are too long

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,40 +35,45 @@ 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 = 1
Material = Enum.Material.Neon },
}, Down = {
Color = Color3.fromRGB(255, 56, 59),
Material = Enum.Material.Neon,
Time = 1
},
},
Off = {
Up = {
Color = Color3.fromRGB(172,174,197),
Material = Enum.Material.SmoothPlastic,
Time = 1
},
Down = {
Color = Color3.fromRGB(172,174,197),
Material = Enum.Material.SmoothPlastic,
Time = 1
}, },
Off = {
Up = {
Color = Color3.fromRGB(172,174,197),
Material = Enum.Material.SmoothPlastic
},
Down = {
Color = Color3.fromRGB(172,174,197),
Material = Enum.Material.SmoothPlastic
},
}
} }
} }
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

@@ -0,0 +1,65 @@
--!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

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 = {