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

@@ -35,40 +35,45 @@ ElevatorConfig.Colors = {
ButtonDeactivated = {
Color = Color3.fromRGB(136,143,145),
Material = Enum.Material.SmoothPlastic
},
LanternIndicator = {
}
}
ElevatorConfig.Lanterns = {
On = {
Up = {
Color = Color3.fromRGB(44,255,157),
Material = Enum.Material.Neon
Material = Enum.Material.Neon,
Time = 1
},
Down = {
Color = Color3.fromRGB(255,29,101),
Material = Enum.Material.Neon
Color = Color3.fromRGB(255, 56, 59),
Material = Enum.Material.Neon,
Time = 1
},
},
Off = {
Up = {
Color = Color3.fromRGB(172,174,197),
Material = Enum.Material.SmoothPlastic
Material = Enum.Material.SmoothPlastic,
Time = 1
},
Down = {
Color = Color3.fromRGB(172,174,197),
Material = Enum.Material.SmoothPlastic
Material = Enum.Material.SmoothPlastic,
Time = 1
},
}
}
}
local DoorsConfig: ElevatorTypes.DoorsConfig = {
Cab = {
Type = DoorEnums.Door.DoubleSpeed,
Time = 4,
Time = 5,
Goal = Vector3.new(4.027)
},
Landing = {
Type = DoorEnums.Door.SingleSpeed,
Time = 4,
Time = 5,
Goal = Vector3.new(4.221)
}
}

View File

@@ -5,8 +5,11 @@ local ParentDir = script.Parent
local ElevatorsDir = ParentDir.Parent.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 InitElevator = require(ElevatorsDir:WaitForChild("System"))
local InitElevator = require(ElevatorSystem)
local Doors = require(ParentDir:WaitForChild("Doors"))
local Buttons = require(ParentDir:WaitForChild("Buttons"))
local MovingObjects = require(ParentDir:WaitForChild("MovingObjects"))
@@ -25,6 +28,7 @@ type Constructor_Fun = (
ElevatorConstructor: InitElevator.constructor,
ElevatorConfig: ElevatorTypes.ElevatorConfigurationTable,
DoorsConstructor: Doors.constructor,
ArrowLanternsConstructor: ArrowLanterns.constructor,
ButtonsConstructor: Buttons.constructor,
ElevatorBoxModel: BasePart,
Leveling: {number},
@@ -36,6 +40,7 @@ type Constructor_Return_Props = {
ElevatorConstructor: InitElevator.constructor,
ElevatorConfig: ElevatorTypes.ElevatorConfigurationTable,
DoorsConstructor: Doors.constructor,
ArrowLanternsConstructor: ArrowLanterns.constructor,
ButtonsConstructor: Buttons.constructor,
ElevatorBoxModel: BasePart,
Leveling: {number},
@@ -50,6 +55,7 @@ function Events.constructor(
ElevatorConstructor,
ElevatorConfig,
DoorsConstructor,
ArrowLanternsConstructor,
ButtonsConstructor,
ElevatorBoxModel,
Leveling,
@@ -60,6 +66,7 @@ function Events.constructor(
ElevatorConstructor = ElevatorConstructor,
ElevatorConfig = ElevatorConfig,
DoorsConstructor = DoorsConstructor,
ArrowLanternsConstructor = ArrowLanternsConstructor,
ButtonsConstructor = ButtonsConstructor,
ElevatorBoxModel = ElevatorBoxModel,
Leveling = Leveling,
@@ -68,6 +75,20 @@ function Events.constructor(
}, Events)
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)
self.ElevatorConstructor.Events.Traveling:Connect(function(_DeltaTime: number, CabPosition: Vector3)
local CabVelocity = self.ElevatorBoxModel:GetVelocityAtPosition(CabPosition)
@@ -102,7 +123,12 @@ local function ElevatorEvents(self: ClassConstructor)
self.DoorsConstructor:OpenCabAsync()
end
self.MovingObjectsConstructor:RotateRelayCogs3()
self.ElevatorConfig.FloorLevelingDistance = 10
print(self.ElevatorConfig.FloorLevelingDistance)
end)
ElevatorAttributes(self)
end
function Events:InitButtons()

View File

@@ -1,13 +1,16 @@
--!optimize 2
--!strict
local ButtonPromptsDistance = Vector3.new(-.05,0,0)
local ButtonPromptsDistance = Vector3.new(-.05)
local ParentDir = script.Parent
local ElevatorsDir = ParentDir.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 Config = require(script:WaitForChild("Config"))
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)
ButtonsConstructor:InitForElevator(2, ButtonPromptsDistance)
local ArrowLanternConstructor = ArrowLantern.constructor(LanternTags, Config.Elevator)
local TractionRopesConstructor = TractionRopes.constructor(CabRopesObject, PulleyRopesObject)
local DoorsConstructor = Doors.constructor(Leveling, ElevatorBoxModel, Config.Doors, LandingDoorTags)
local EventsConstructor = Events.constructor(
Elevator,
Config.Elevator,
DoorsConstructor,
ArrowLanternConstructor,
ButtonsConstructor,
ElevatorBoxModel,
Leveling,
MovingObjectsConstructor,
TractionRopesConstructor
)
TractionRopesConstructor:Update()
EventsConstructor:InitButtons()
ArrowLanternConstructor:Toggle(true, true)
if DoorsConstructor:OpenAtFloor(Elevator.Attributes.CurrentFloor.Value) then
DoorsConstructor:OpenCabAsync()
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 = {
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}`)

View File

@@ -16,19 +16,22 @@ export type ButtonProperties = {
Material: Enum.Material
}
export type Colors = {
export type ButtonColors = {
ButtonActivated: ButtonProperties,
ButtonDeactivated: ButtonProperties,
LanternIndicator: {
}
export type LanternProperties = ButtonProperties & {Time: number}
export type Lanterns = {
On: {
Up: ButtonProperties,
Down: ButtonProperties
Up: LanternProperties,
Down: LanternProperties
},
Off: {
Up: ButtonProperties,
Down: ButtonProperties
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 = {