mirror of
https://github.com/unixtensor/Roblox-Elevator-Game.git
synced 2025-12-14 06:41:55 +00:00
Crazy door system
This commit is contained in:
@@ -11,53 +11,70 @@ local StorageService = game:GetService("ReplicatedStorage")
|
|||||||
local Types = MainDir:WaitForChild("Types")
|
local Types = MainDir:WaitForChild("Types")
|
||||||
local Enums = require(StorageService:WaitForChild("Enums"))
|
local Enums = require(StorageService:WaitForChild("Enums"))
|
||||||
local ElevatorTypes = require(Types:WaitForChild("Elevator"))
|
local ElevatorTypes = require(Types:WaitForChild("Elevator"))
|
||||||
|
local DoorEnums = require(Types:WaitForChild("Enums"):WaitForChild("Doors"))
|
||||||
--local SoundEnums = require(Types:WaitForChild("Enums"):WaitForChild("Sounds"))
|
--local SoundEnums = require(Types:WaitForChild("Enums"):WaitForChild("Sounds"))
|
||||||
|
|
||||||
local HaughtonConfiguration = {} :: ElevatorTypes.ElevatorConfigurationTable
|
local ElevatorConfig = {} :: ElevatorTypes.ElevatorConfigurationTable
|
||||||
HaughtonConfiguration.Name = Enums.Elevator.Haughton
|
ElevatorConfig.Name = Enums.Elevator.Haughton
|
||||||
HaughtonConfiguration.FloorLevelingDistance = 6
|
ElevatorConfig.FloorLevelingDistance = 6
|
||||||
HaughtonConfiguration.FloorLeveling3PhaseDistance = 1.5
|
ElevatorConfig.FloorLeveling3PhaseDistance = 1.5
|
||||||
HaughtonConfiguration.LevelingVelocity = .5
|
ElevatorConfig.LevelingVelocity = .5
|
||||||
HaughtonConfiguration.Phase3LevelingVelocity = .5
|
ElevatorConfig.Phase3LevelingVelocity = .5
|
||||||
HaughtonConfiguration.ParkedDistance = 0.2
|
ElevatorConfig.ParkedDistance = 0.2
|
||||||
HaughtonConfiguration.Responsiveness = 5
|
ElevatorConfig.Responsiveness = 5
|
||||||
HaughtonConfiguration.MaxVelocity = 7
|
ElevatorConfig.MaxVelocity = 7
|
||||||
|
|
||||||
HaughtonConfiguration.Functions = {
|
ElevatorConfig.Functions = {
|
||||||
ManualTravelStart = true
|
ManualTravelStart = true
|
||||||
}
|
}
|
||||||
|
|
||||||
HaughtonConfiguration.Colors = {
|
ElevatorConfig.Colors = {
|
||||||
ButtonActivated = {
|
ButtonActivated = {
|
||||||
Color = Color3.fromRGB(162, 106, 76),
|
Color = Color3.fromRGB(162,106,76),
|
||||||
Material = Enum.Material.Neon
|
Material = Enum.Material.Neon
|
||||||
},
|
},
|
||||||
ButtonDeactivated = {
|
ButtonDeactivated = {
|
||||||
Color = Color3.fromRGB(136, 143, 145),
|
Color = Color3.fromRGB(136,143,145),
|
||||||
Material = Enum.Material.SmoothPlastic
|
Material = Enum.Material.SmoothPlastic
|
||||||
},
|
},
|
||||||
LanternIndicator = {
|
LanternIndicator = {
|
||||||
On = {
|
On = {
|
||||||
Up = {
|
Up = {
|
||||||
Color = Color3.fromRGB(44, 255, 157),
|
Color = Color3.fromRGB(44,255,157),
|
||||||
Material = Enum.Material.Neon
|
Material = Enum.Material.Neon
|
||||||
},
|
},
|
||||||
Down = {
|
Down = {
|
||||||
Color = Color3.fromRGB(255, 29, 101),
|
Color = Color3.fromRGB(255,29,101),
|
||||||
Material = Enum.Material.Neon
|
Material = Enum.Material.Neon
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Off = {
|
Off = {
|
||||||
Up = {
|
Up = {
|
||||||
Color = Color3.fromRGB(172, 174, 197),
|
Color = Color3.fromRGB(172,174,197),
|
||||||
Material = Enum.Material.SmoothPlastic
|
Material = Enum.Material.SmoothPlastic
|
||||||
},
|
},
|
||||||
Down = {
|
Down = {
|
||||||
Color = Color3.fromRGB(172, 174, 197),
|
Color = Color3.fromRGB(172,174,197),
|
||||||
Material = Enum.Material.SmoothPlastic
|
Material = Enum.Material.SmoothPlastic
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return HaughtonConfiguration
|
local DoorsConfig: ElevatorTypes.DoorsConfig = {
|
||||||
|
Cab = {
|
||||||
|
Type = DoorEnums.Door.DoubleSpeed,
|
||||||
|
Time = 4,
|
||||||
|
Goal = Vector3.new(4.027,0,0)
|
||||||
|
},
|
||||||
|
Landing = {
|
||||||
|
Type = DoorEnums.Door.SingleSpeed,
|
||||||
|
Time = 4,
|
||||||
|
Goal = Vector3.new(4.15,0,0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
Elevator = ElevatorConfig,
|
||||||
|
Doors = DoorsConfig
|
||||||
|
}
|
||||||
@@ -9,7 +9,10 @@ local MainDir = ElevatorsDir.Parent
|
|||||||
local Storage = game:GetService("ReplicatedStorage")
|
local Storage = game:GetService("ReplicatedStorage")
|
||||||
local RS = game:GetService("RunService")
|
local RS = game:GetService("RunService")
|
||||||
|
|
||||||
local DoorEnums = require(MainDir:WaitForChild("Types"):WaitForChild("Enums"):WaitForChild("Doors"))
|
local Types = MainDir:WaitForChild("Types")
|
||||||
|
|
||||||
|
local DoorEnums = require(Types:WaitForChild("Enums"):WaitForChild("Doors"))
|
||||||
|
local ElevatorEnums = require(Types:WaitForChild("Elevator"))
|
||||||
local Tags = require(MainDir:WaitForChild("Map"):WaitForChild("Load"):WaitForChild("Tags"))
|
local Tags = require(MainDir:WaitForChild("Map"):WaitForChild("Load"):WaitForChild("Tags"))
|
||||||
local Algebra = require(Storage:WaitForChild("Algebra"))
|
local Algebra = require(Storage:WaitForChild("Algebra"))
|
||||||
|
|
||||||
@@ -20,22 +23,18 @@ type Impl_Constructor = {
|
|||||||
--Class functions
|
--Class functions
|
||||||
OpenCabAsync: (self: ClassConstructor, ObjectSpaceDistance: Vector3) -> (),
|
OpenCabAsync: (self: ClassConstructor, ObjectSpaceDistance: Vector3) -> (),
|
||||||
CloseCabAsync: (self: ClassConstructor, ObjectSpaceDistance: Vector3) -> (),
|
CloseCabAsync: (self: ClassConstructor, ObjectSpaceDistance: Vector3) -> (),
|
||||||
OpenFloorAsync: (self: ClassConstructor, Floor: number, ObjectSpaceDistance: Vector3) -> (),
|
OpenAtFloorAsync: (self: ClassConstructor, Floor: number) -> (),
|
||||||
CloseFloorAsync: (self: ClassConstructor, Floor: number, ObjectSpaceDistance: Vector3) -> (),
|
CloseAtFloorAsync: (self: ClassConstructor, Floor: number) -> (),
|
||||||
}
|
}
|
||||||
|
|
||||||
type LandingDoorsTree = {
|
|
||||||
[number]: {BasePart}
|
|
||||||
}
|
|
||||||
type CabDoorsTree = {
|
type CabDoorsTree = {
|
||||||
[number]: {BasePart}
|
[number]: {BasePart}
|
||||||
}
|
}
|
||||||
|
|
||||||
type Constructor_Fun = (
|
type Constructor_Fun = (
|
||||||
|
DoorConfig: ElevatorEnums.DoorsConfig,
|
||||||
ElevatorBox: BasePart,
|
ElevatorBox: BasePart,
|
||||||
CabDoorsType: DoorEnums.DoorEnumValues,
|
|
||||||
CabDoorsTree: {BasePart},
|
CabDoorsTree: {BasePart},
|
||||||
LandingDoorsType: DoorEnums.DoorEnumValues,
|
|
||||||
LandingDoorsTree: Tags.LandingTags
|
LandingDoorsTree: Tags.LandingTags
|
||||||
) -> ClassConstructor
|
) -> ClassConstructor
|
||||||
|
|
||||||
@@ -45,124 +44,170 @@ type Attributes = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Events = {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
type Constructor_Return_Props = {
|
type Constructor_Return_Props = {
|
||||||
|
DoorConfig: ElevatorEnums.DoorsConfig,
|
||||||
ElevatorBox: BasePart,
|
ElevatorBox: BasePart,
|
||||||
CabDoorsType: DoorEnums.DoorEnumValues,
|
|
||||||
CabDoorsTree: {BasePart},
|
CabDoorsTree: {BasePart},
|
||||||
LandingDoorsType: DoorEnums.DoorEnumValues,
|
|
||||||
LandingDoorsTree: Tags.LandingTags,
|
LandingDoorsTree: Tags.LandingTags,
|
||||||
Attributes: Attributes
|
Attributes: Attributes,
|
||||||
|
|
||||||
|
__Connections: {
|
||||||
|
DoorAnimationStep: RBXScriptConnection?
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
local Doors = {} :: Impl_Constructor
|
local Doors = {} :: Impl_Constructor
|
||||||
Doors.__index = Doors
|
Doors.__index = Doors
|
||||||
|
|
||||||
function Doors.constructor(ElevatorBox, CabDoorsType, CabDoorsTree, LandingDoorsType, LandingDoorsTree)
|
function Doors.constructor(DoorConfig, ElevatorBox, CabDoorsTree, LandingDoorsTree)
|
||||||
local HallOpen = Instance.new("BoolValue") :: BoolValue
|
local HallOpen = Instance.new("BoolValue") :: BoolValue
|
||||||
HallOpen.Value = true
|
HallOpen.Value = true
|
||||||
|
|
||||||
return setmetatable({
|
return setmetatable({
|
||||||
|
DoorConfig = DoorConfig,
|
||||||
ElevatorBox = ElevatorBox,
|
ElevatorBox = ElevatorBox,
|
||||||
CabDoorsType = CabDoorsType,
|
|
||||||
CabDoorsTree = CabDoorsTree,
|
CabDoorsTree = CabDoorsTree,
|
||||||
LandingDoorsType = LandingDoorsType,
|
|
||||||
LandingDoorsTree = LandingDoorsTree,
|
LandingDoorsTree = LandingDoorsTree,
|
||||||
|
|
||||||
Attributes = {
|
Attributes = {
|
||||||
Hall = {
|
Hall = {
|
||||||
Open = HallOpen
|
Open = HallOpen
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
__Connections = {}
|
||||||
}, Doors)
|
}, Doors)
|
||||||
end
|
end
|
||||||
|
|
||||||
type DoorAnimationCallback<T...> = (self: ClassConstructor, Alpha: number, Time: number, T...) -> ()
|
type DoorAnimationCallback<T...> = (self: ClassConstructor, Time: number, T...) -> ()
|
||||||
local function DoorAnimationAsync(self: ClassConstructor, Time: number, Callback: DoorAnimationCallback<()>)
|
local function DoorAnimationRuntime(self: ClassConstructor, Time: number, Callback: DoorAnimationCallback<()>)
|
||||||
local Alpha = 0
|
if self.__Connections.DoorAnimationStep and self.__Connections.DoorAnimationStep.Connected then
|
||||||
local StartTime = os.clock()
|
self.__Connections.DoorAnimationStep:Disconnect()
|
||||||
|
end
|
||||||
|
|
||||||
while RS.Stepped:Wait() do
|
local StartTime = os.clock()
|
||||||
Alpha+=1e-3
|
self.__Connections.DoorAnimationStep = RS.Stepped:Connect(function(_delta: number, _dt: number)
|
||||||
local AnimationTime = Algebra.LinearElapse(StartTime, Time)
|
local AnimationTime = Algebra.LinearElapse(StartTime, Time)
|
||||||
Callback(self, Alpha, AnimationTime)
|
Callback(self, AnimationTime)
|
||||||
|
|
||||||
if AnimationTime>=1 then
|
if AnimationTime>=1 then
|
||||||
break
|
(self.__Connections.DoorAnimationStep :: RBXScriptConnection):Disconnect()
|
||||||
end
|
end
|
||||||
end
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--a<T> = ...T
|
||||||
type DoorAnimationsMap = {
|
type DoorAnimationsMap = {
|
||||||
Cab: {
|
Cab: {
|
||||||
[DoorEnums.DoorEnumValues]: DoorAnimationCallback<Vector3, Vector3?, Vector3?>
|
SingleSpeed: DoorAnimationCallback<Vector3, Vector3, Vector3>,
|
||||||
|
DoubleSpeed: DoorAnimationCallback<Vector3, Vector3, Vector3, Vector3>,
|
||||||
|
TripleSpeed: DoorAnimationCallback<Vector3, Vector3, Vector3, Vector3, Vector3, Vector3>,
|
||||||
},
|
},
|
||||||
Floor: {
|
Floor: {
|
||||||
[DoorEnums.DoorEnumValues]: DoorAnimationCallback<number, Vector3, Vector3>
|
SingleSpeed: DoorAnimationCallback<number, Vector3, Vector3>,
|
||||||
|
DoubleSpeed: DoorAnimationCallback<number, Vector3, Vector3, Vector3>,
|
||||||
|
TripleSpeed: DoorAnimationCallback<number, Vector3, Vector3, Vector3, Vector3>,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
local DoorAnimations: DoorAnimationsMap = {
|
local DoorAnimations = {
|
||||||
Cab = {},
|
Cab = {},
|
||||||
Floor = {}
|
Floor = {}
|
||||||
}
|
} :: DoorAnimationsMap
|
||||||
|
|
||||||
DoorAnimations.Cab[DoorEnums.Door.SingleSpeed] = function(self, Alpha, AnimationTime, OpenFromVec1)
|
--Cab doors--
|
||||||
|
function DoorAnimations.Cab.SingleSpeed(self, AnimationTime, Door1Position, OpenToVec1)
|
||||||
local ElevatorY = Vector3.new(0, self.ElevatorBox.Position.Y, 0)
|
local ElevatorY = Vector3.new(0, self.ElevatorBox.Position.Y, 0)
|
||||||
local ElevatorDoor1_Goal = Vector3.new(OpenFromVec1.X, 0, OpenFromVec1.Z)
|
local ElevatorDoor1_Goal = Vector3.new(OpenToVec1.X, 0, OpenToVec1.Z)
|
||||||
|
|
||||||
self.CabDoorsTree[1].Position = ElevatorY+self.CabDoorsTree[1].Position:Lerp(OpenFromVec1+ElevatorDoor1_Goal, Algebra.Easing.InOutQuart(AnimationTime))
|
self.CabDoorsTree[1].Position = ElevatorY+self.CabDoorsTree[1].Position:Lerp(OpenToVec1+ElevatorDoor1_Goal, Algebra.Easing.InOutQuart(AnimationTime))
|
||||||
end
|
end
|
||||||
|
|
||||||
DoorAnimations.Cab[DoorEnums.Door.DoubleSpeed] = function(self, Alpha, AnimationTime, OpenFromVec1, OpenFromVec2)
|
function DoorAnimations.Cab.DoubleSpeed(self, AnimationTime, Door1Position, Door2Position, OpenToVec1, OpenToVec2)
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
DoorAnimations.Cab[DoorEnums.Door.TripleSpeed] = function(self, Alpha, AnimationTime, OpenFromVec1, OpenFromVec2, OpenFromVec3)
|
function DoorAnimations.Cab.TripleSpeed(self, AnimationTime, Door1Position, Door2Position, Door3Position, OpenToVec1, OpenToVec2, OpenToVec3)
|
||||||
|
|
||||||
end
|
end
|
||||||
|
----
|
||||||
|
|
||||||
DoorAnimations.Floor[DoorEnums.Door.SingleSpeed] = function(self, Alpha, AnimationTime, Floor, DoorPosition, OpenFromVec1)
|
--Floor doors--
|
||||||
(self.LandingDoorsTree[Floor][1] :: BasePart).Position = DoorPosition:Lerp(OpenFromVec1, Algebra.Easing.OutQuad(AnimationTime))
|
function DoorAnimations.Floor.SingleSpeed(self, Floor, AnimationTime, Door1Position, OpenToVec1)
|
||||||
|
(self.LandingDoorsTree[Floor][1] :: BasePart).Position = Door1Position:Lerp(OpenToVec1, Algebra.Easing.OutQuad(AnimationTime))
|
||||||
|
end
|
||||||
|
---
|
||||||
|
|
||||||
|
--Goofy ahh function
|
||||||
|
local function OpenVecTuple(self: ClassConstructor, FloorWithDoors: Tags.LandingDoors, Opening: boolean, Type: DoorEnums.DoorEnumValues): ...Vector3?
|
||||||
|
if Type == DoorEnums.Door.SingleSpeed then
|
||||||
|
local P = (FloorWithDoors[1] :: BasePart).Position
|
||||||
|
return table.unpack({
|
||||||
|
P,
|
||||||
|
P+(Opening and -self.DoorConfig.Cab.Goal or self.DoorConfig.Cab.Goal)
|
||||||
|
})
|
||||||
|
elseif Type == DoorEnums.Door.DoubleSpeed then
|
||||||
|
local P = (FloorWithDoors[1] :: BasePart).Position
|
||||||
|
local P2 = (FloorWithDoors[2] :: BasePart).Position
|
||||||
|
return table.unpack({
|
||||||
|
P,
|
||||||
|
P2,
|
||||||
|
P+(Opening and -self.DoorConfig.Cab.Goal or self.DoorConfig.Cab.Goal),
|
||||||
|
(P2+(Opening and -self.DoorConfig.Cab.Goal or self.DoorConfig.Cab.Goal))/2
|
||||||
|
})
|
||||||
|
elseif Type == DoorEnums.Door.TripleSpeed then
|
||||||
|
--idk man
|
||||||
|
local P = (FloorWithDoors[1] :: BasePart).Position
|
||||||
|
local P2 = (FloorWithDoors[2] :: BasePart).Position
|
||||||
|
local P3 = (FloorWithDoors[3] :: BasePart).Position
|
||||||
|
return table.unpack({
|
||||||
|
P,
|
||||||
|
P2,
|
||||||
|
P3,
|
||||||
|
P+(Opening and -self.DoorConfig.Cab.Goal or self.DoorConfig.Cab.Goal),
|
||||||
|
(P2+(Opening and -self.DoorConfig.Cab.Goal or self.DoorConfig.Cab.Goal))/1.5,
|
||||||
|
(P3+(Opening and -self.DoorConfig.Cab.Goal or self.DoorConfig.Cab.Goal))/2,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
return nil
|
||||||
end
|
end
|
||||||
|
|
||||||
function Doors:OpenCabAsync(ObjectSpaceDistance)
|
function Doors:OpenCabAsync(ObjectSpaceDistance)
|
||||||
local OpenFromVecTuple = self.CabDoorsTree[1].Position+ObjectSpaceDistance
|
-- local OpenFromVecTuple = self.CabDoorsTree[1].Position+ObjectSpaceDistance
|
||||||
DoorAnimationAsync(self, 4, function(self, Alpha, Time)
|
-- --local Open = OpenVecTuple(self, DoorEnums.DoorLocation.Cab)
|
||||||
DoorAnimations.Cab[self.CabDoorsType](self, Alpha, Time, OpenFromVecTuple)
|
|
||||||
end)
|
-- DoorAnimationRuntime(self, self.DoorConfig.Cab.Time, function(self, AnimationTime)
|
||||||
|
-- DoorAnimations.Cab[self.DoorConfig.Cab.Type](self, AnimationTime, OpenFromVecTuple)
|
||||||
|
-- end)
|
||||||
end
|
end
|
||||||
|
|
||||||
function Doors:CloseCabAsync(ObjectSpaceDistance)
|
function Doors:CloseCabAsync(ObjectSpaceDistance)
|
||||||
local CloseFromVecTuple = self.CabDoorsTree[1].Position-ObjectSpaceDistance
|
|
||||||
DoorAnimationAsync(self, 4, function(self, Alpha, Time)
|
|
||||||
DoorAnimations.Cab[self.CabDoorsType](self, Alpha, Time, CloseFromVecTuple)
|
|
||||||
end)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function Doors:CloseFloorAsync(Floor, ObjectSpaceDistance)
|
--this module is built off my insanity
|
||||||
--this needs to be made custom for self.CabDoorsType
|
local function ToggleFloorDoors(self: ClassConstructor, Floor: number, Opening: boolean)
|
||||||
local DoorFloor = self.LandingDoorsTree[Floor]
|
local FloorWithDoors = self.LandingDoorsTree[Floor]
|
||||||
assert(DoorFloor)
|
if FloorWithDoors then
|
||||||
local Door = DoorFloor[1]
|
local OpenFromVecTuple = OpenVecTuple(self, FloorWithDoors, Opening, self.DoorConfig.Landing.Type)
|
||||||
assert(Door)
|
assert(OpenFromVecTuple)
|
||||||
local DoorPosition = (Door :: BasePart).Position
|
|
||||||
local OpenFromVecTuple = DoorPosition+ObjectSpaceDistance
|
DoorAnimationRuntime(self, self.DoorConfig.Landing.Time, function(self, AnimationTime)
|
||||||
DoorAnimationAsync(self, 4, function(self, Alpha, Time)
|
DoorAnimations.Floor[self.DoorConfig.Landing.Type](self, Floor, AnimationTime, OpenFromVecTuple)
|
||||||
DoorAnimations.Floor[self.CabDoorsType](self, Alpha, Time, Floor, DoorPosition, OpenFromVecTuple)
|
end)
|
||||||
end)
|
else
|
||||||
self.Attributes.Hall.Open.Value = false
|
warn(`Could not open the door at floor: {Floor}, it does not exist in the landing doors tree.`)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function Doors:OpenFloorAsync(Floor, ObjectSpaceDistance)
|
function Doors:CloseAtFloorAsync(Floor)
|
||||||
--this needs to be made custom for self.CabDoorsType
|
ToggleFloorDoors(self, Floor, false)
|
||||||
local DoorFloor = self.LandingDoorsTree[Floor]
|
end
|
||||||
assert(DoorFloor)
|
|
||||||
local Door = DoorFloor[1]
|
function Doors:OpenAtFloorAsync(Floor)
|
||||||
assert(Door)
|
ToggleFloorDoors(self, Floor, true)
|
||||||
local DoorPosition = (Door :: BasePart).Position
|
|
||||||
local OpenFromVecTuple = DoorPosition-ObjectSpaceDistance
|
|
||||||
DoorAnimationAsync(self, 4, function(self, Alpha, Time)
|
|
||||||
DoorAnimations.Floor[self.CabDoorsType](self, Alpha, Time, Floor, DoorPosition, OpenFromVecTuple)
|
|
||||||
end)
|
|
||||||
self.Attributes.Hall.Open.Value = true
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
--!strict
|
--!strict
|
||||||
|
|
||||||
local ButtonPromptsDistance = Vector3.new(-.05,0,0)
|
local ButtonPromptsDistance = Vector3.new(-.05,0,0)
|
||||||
local HallDoorOffset = Vector3.new(4.15,0,0)
|
|
||||||
|
|
||||||
local ParentDir = script.Parent
|
local ParentDir = script.Parent
|
||||||
local ElevatorsDir = ParentDir.Parent
|
local ElevatorsDir = ParentDir.Parent
|
||||||
@@ -29,16 +28,16 @@ return function(TagsConstructor: TagsModule.TagsConstructor, ButtonTags: TagsMod
|
|||||||
--TEMP
|
--TEMP
|
||||||
local CabDoorsTree = {} :: {BasePart}
|
local CabDoorsTree = {} :: {BasePart}
|
||||||
|
|
||||||
local Elevator = InitElevator.constructor(ElevatorBoxModel, Config, Leveling)
|
local Elevator = InitElevator.constructor(ElevatorBoxModel, Config.Elevator, Leveling)
|
||||||
local MovingObjectsConstructor = MovingObjects.constructor(TagsConstructor)
|
local MovingObjectsConstructor = MovingObjects.constructor(TagsConstructor)
|
||||||
local ButtonsConstructor = Buttons.constructor(Config.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 TractionRopesConstructor = TractionRopes.constructor(CabRopesObject, PulleyRopesObject)
|
local TractionRopesConstructor = TractionRopes.constructor(CabRopesObject, PulleyRopesObject)
|
||||||
local DoorsConstructor = Doors.constructor(ElevatorBoxModel, DoorEnums.Door.SingleSpeed, CabDoorsTree, DoorEnums.Door.SingleSpeed, LandingDoorTags)
|
local DoorsConstructor = Doors.constructor(Config.Doors, ElevatorBoxModel, CabDoorsTree, LandingDoorTags)
|
||||||
local EventsConstructor = Events.constructor(
|
local EventsConstructor = Events.constructor(
|
||||||
Elevator,
|
Elevator,
|
||||||
Config,
|
Config.Elevator,
|
||||||
ButtonsConstructor,
|
ButtonsConstructor,
|
||||||
ElevatorBoxModel,
|
ElevatorBoxModel,
|
||||||
Leveling,
|
Leveling,
|
||||||
@@ -47,4 +46,6 @@ return function(TagsConstructor: TagsModule.TagsConstructor, ButtonTags: TagsMod
|
|||||||
)
|
)
|
||||||
EventsConstructor:InitButtons()
|
EventsConstructor:InitButtons()
|
||||||
|
|
||||||
|
task.wait(2)
|
||||||
|
DoorsConstructor:CloseAtFloorAsync(1)
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -139,8 +139,10 @@ export type ExportedTags = {
|
|||||||
[string]: TagProduct
|
[string]: TagProduct
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type LandingDoors = {Instance}
|
||||||
|
|
||||||
export type LandingTags = {
|
export type LandingTags = {
|
||||||
[number]: {Instance}
|
[number]: LandingDoors
|
||||||
}
|
}
|
||||||
|
|
||||||
export type DoorTags = {
|
export type DoorTags = {
|
||||||
|
|||||||
@@ -2,11 +2,14 @@
|
|||||||
--!native
|
--!native
|
||||||
--!strict
|
--!strict
|
||||||
|
|
||||||
local EnumsDir = script.Parent:WaitForChild("Enums")
|
local ParentDir = script.Parent
|
||||||
|
|
||||||
|
local EnumsDir = ParentDir:WaitForChild("Enums")
|
||||||
|
|
||||||
local StorageService = game:GetService("ReplicatedStorage")
|
local StorageService = game:GetService("ReplicatedStorage")
|
||||||
|
|
||||||
local Enums = require(StorageService:WaitForChild("Enums"))
|
local DoorEnums = require(EnumsDir:WaitForChild("Doors"))
|
||||||
|
local Enums = require(StorageService:WaitForChild("Enums"))
|
||||||
local SoundEnums = require(EnumsDir:WaitForChild("Sounds"))
|
local SoundEnums = require(EnumsDir:WaitForChild("Sounds"))
|
||||||
|
|
||||||
export type ButtonProperties = {
|
export type ButtonProperties = {
|
||||||
@@ -49,4 +52,17 @@ export type ElevatorConfigurationTable = {
|
|||||||
Colors: Colors,
|
Colors: Colors,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type DoorsConfig = {
|
||||||
|
Cab: {
|
||||||
|
Type: DoorEnums.DoorEnumValues,
|
||||||
|
Time: number,
|
||||||
|
Goal: Vector3
|
||||||
|
},
|
||||||
|
Landing: {
|
||||||
|
Type: DoorEnums.DoorEnumValues,
|
||||||
|
Time: number,
|
||||||
|
Goal: Vector3
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
@@ -15,4 +15,13 @@ DoorEnums.Door = {
|
|||||||
TripleSpeed = "TripleSpeed" :: TripleSpeed
|
TripleSpeed = "TripleSpeed" :: TripleSpeed
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type DoorLocationEnums = typeof(DoorEnums.Door)
|
||||||
|
export type Cab = "Cab"
|
||||||
|
export type Landing = "Landing"
|
||||||
|
export type DoorLocationValues = Cab | Landing
|
||||||
|
DoorEnums.DoorLocation = {
|
||||||
|
Cab = "Cab" :: Cab,
|
||||||
|
Landing = "Landing" :: Landing
|
||||||
|
}
|
||||||
|
|
||||||
return DoorEnums
|
return DoorEnums
|
||||||
Reference in New Issue
Block a user