Doors now properly support close and open while moving

This commit is contained in:
2024-09-10 15:17:57 -04:00
parent e0a9dd1178
commit 3180b31928
2 changed files with 32 additions and 27 deletions

View File

@@ -64,7 +64,7 @@ local DoorsConfig: ElevatorTypes.DoorsConfig = {
Cab = { Cab = {
Type = DoorEnums.Door.DoubleSpeed, Type = DoorEnums.Door.DoubleSpeed,
Time = 4, Time = 4,
Goal = Vector3.new(4.027,6.017) Goal = Vector3.new(4.027)
}, },
Landing = { Landing = {
Type = DoorEnums.Door.SingleSpeed, Type = DoorEnums.Door.SingleSpeed,

View File

@@ -20,10 +20,10 @@ type Impl_Constructor = {
__index: Impl_Constructor, __index: Impl_Constructor,
constructor: Constructor_Fun, constructor: Constructor_Fun,
--Class functions --Class functions
OpenCabAsync: (self: ClassConstructor) -> (), OpenCabAsync: (self: ClassConstructor) -> boolean,
CloseCabAsync: (self: ClassConstructor) -> (), CloseCabAsync: (self: ClassConstructor) -> boolean,
OpenAtFloorAsync: (self: ClassConstructor, Floor: number) -> (), OpenAtFloorAsync: (self: ClassConstructor, Floor: number) -> boolean,
CloseAtFloorAsync: (self: ClassConstructor, Floor: number) -> (), CloseAtFloorAsync: (self: ClassConstructor, Floor: number) -> boolean,
} }
type Constructor_Fun = ( type Constructor_Fun = (
@@ -109,47 +109,51 @@ local DoorAnimations = {
@native @native
function DoorAnimations.Cab.SingleSpeed(self, AnimationTime, Door1Position, OpenToVec1) 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(OpenToVec1.X, 0, OpenToVec1.Z) local Door1XZ = Vector3.new(Door1Position.X, 0, Door1Position.Z)
local Door1Y = Vector3.new(0, Door1Position.Y-self.ElevatorBox.Position.Y, 0)
local OpenToVec1XZ = Vector3.new(OpenToVec1.X, 0, OpenToVec1.Z)
local CabDoor1 = self.DoorsTree.Cab[1] :: BasePart local CabDoor1 = self.DoorsTree.Cab[1] :: BasePart
CabDoor1.Position = ElevatorY+CabDoor1.Position:Lerp(OpenToVec1+ElevatorDoor1_Goal, Algebra.Easing.OutQuad(AnimationTime)) CabDoor1.Position = ElevatorY+Door1Y+Door1XZ:Lerp(Door1XZ+OpenToVec1XZ, Algebra.Easing.OutQuad(AnimationTime))
end end
-- local ElevatorBoxY = Vector3.new(0, self.ElevatorBox.Position.Y, 0)
-- local Door1Vector = Vector3.new(ElevatorDoor1_P.X, 0, ElevatorDoor1_P.Z)
-- local Door2Vector = Vector3.new(ElevatorDoor2_P.X, 0, ElevatorDoor2_P.Z)
-- self.ElevatorDoor1.Position = ElevatorBoxY+Door1Vector:Lerp(Door1Vector-Doors.Door1Stopped_X, Ease)
-- self.ElevatorDoor2.Position = ElevatorBoxY+Door2Vector:Lerp(Door2Vector-Doors.Door2Stopped_X, Ease)
@native @native
function DoorAnimations.Cab.DoubleSpeed(self, AnimationTime, Door1Position, Door2Position, OpenToVec1, OpenToVec2) function DoorAnimations.Cab.DoubleSpeed(self, AnimationTime, Door1Position, Door2Position, OpenToVec1, OpenToVec2)
local OutQuad = Algebra.Easing.OutQuad(AnimationTime) local AlgebraEasing = Algebra.Easing.OutQuad(AnimationTime)
local ElevatorY = Vector3.new(0, self.ElevatorBox.Position.Y, 0) local ElevatorY = Vector3.new(0, self.ElevatorBox.Position.Y, 0)
local Door1XZ = Vector3.new(Door1Position.X, 0, Door1Position.Z) local Door1XZ = Vector3.new(Door1Position.X, 0, Door1Position.Z)
local Door2XZ = Vector3.new(Door2Position.X, 0, Door2Position.Z) local Door2XZ = Vector3.new(Door2Position.X, 0, Door2Position.Z)
local Door1Y = Vector3.new(0, Door1Position.Y-self.ElevatorBox.Position.Y, 0)
local Door2Y = Vector3.new(0, Door2Position.Y-self.ElevatorBox.Position.Y, 0)
local OpenToVec1XZ = Vector3.new(OpenToVec1.X, 0, OpenToVec1.Z) local OpenToVec1XZ = Vector3.new(OpenToVec1.X, 0, OpenToVec1.Z)
local OpenToVec2XZ = Vector3.new(OpenToVec2.X, 0, OpenToVec2.Z) local OpenToVec2XZ = Vector3.new(OpenToVec2.X, 0, OpenToVec2.Z)
local CabDoor1 = self.DoorsTree.Cab[1] :: BasePart local CabDoor1 = self.DoorsTree.Cab[1] :: BasePart
local CabDoor2 = self.DoorsTree.Cab[2] :: BasePart local CabDoor2 = self.DoorsTree.Cab[2] :: BasePart
CabDoor1.Position = ElevatorY+Door1XZ:Lerp(Door1XZ+OpenToVec1XZ, OutQuad) CabDoor1.Position = ElevatorY+Door1Y+Door1XZ:Lerp(Door1XZ+OpenToVec1XZ, AlgebraEasing)
CabDoor2.Position = ElevatorY+Door2XZ:Lerp(Door2XZ+OpenToVec2XZ, OutQuad) CabDoor2.Position = ElevatorY+Door2Y+Door2XZ:Lerp(Door2XZ+OpenToVec2XZ, AlgebraEasing)
end end
@native @native
function DoorAnimations.Cab.TripleSpeed(self, AnimationTime, Door1Position, Door2Position, Door3Position, OpenToVec1, OpenToVec2, OpenToVec3) function DoorAnimations.Cab.TripleSpeed(self, AnimationTime, Door1Position, Door2Position, Door3Position, OpenToVec1, OpenToVec2, OpenToVec3)
local OutQuad = Algebra.Easing.OutQuad(AnimationTime) local AlgebraEasing = Algebra.Easing.OutQuad(AnimationTime)
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(OpenToVec1.X, 0, OpenToVec1.Z) local Door1XZ = Vector3.new(Door1Position.X, 0, Door1Position.Z)
local ElevatorDoor2_Goal = Vector3.new(OpenToVec2.X, 0, OpenToVec2.Z) local Door2XZ = Vector3.new(Door2Position.X, 0, Door2Position.Z)
local ElevatorDoor3_Goal = Vector3.new(OpenToVec3.X, 0, OpenToVec3.Z) local Door3XZ = Vector3.new(Door3Position.X, 0, Door3Position.Z)
local Door1Y = Vector3.new(0, Door1Position.Y-self.ElevatorBox.Position.Y, 0)
local Door2Y = Vector3.new(0, Door2Position.Y-self.ElevatorBox.Position.Y, 0)
local Door3Y = Vector3.new(0, Door3Position.Y-self.ElevatorBox.Position.Y, 0)
local OpenToVec1XZ = Vector3.new(OpenToVec1.X, 0, OpenToVec1.Z)
local OpenToVec2XZ = Vector3.new(OpenToVec2.X, 0, OpenToVec2.Z)
local OpenToVec3XZ = Vector3.new(OpenToVec3.X, 0, OpenToVec3.Z)
local CabDoor1 = self.DoorsTree.Cab[1] :: BasePart local CabDoor1 = self.DoorsTree.Cab[1] :: BasePart
local CabDoor2 = self.DoorsTree.Cab[2] :: BasePart local CabDoor2 = self.DoorsTree.Cab[2] :: BasePart
local CabDoor3 = self.DoorsTree.Cab[3] :: BasePart local CabDoor3 = self.DoorsTree.Cab[3] :: BasePart
CabDoor1.Position = ElevatorY+CabDoor1.Position:Lerp(ElevatorDoor1_Goal, OutQuad) CabDoor1.Position = ElevatorY+Door1Y+Door1XZ:Lerp(Door1XZ+OpenToVec1XZ, AlgebraEasing)
CabDoor2.Position = ElevatorY+CabDoor2.Position:Lerp(ElevatorDoor2_Goal, OutQuad) CabDoor2.Position = ElevatorY+Door2Y+Door2XZ:Lerp(Door2XZ+OpenToVec2XZ, AlgebraEasing)
CabDoor3.Position = ElevatorY+CabDoor3.Position:Lerp(ElevatorDoor3_Goal, OutQuad) CabDoor3.Position = ElevatorY+Door3Y+Door3XZ:Lerp(Door3XZ+OpenToVec3XZ, AlgebraEasing)
end end
---- ----
@@ -166,6 +170,7 @@ local function OpenVecTuple(self: ClassConstructor, Opening: boolean, Type: Door
warn("Hall/landing doors were called but no HallFloor number was received") warn("Hall/landing doors were called but no HallFloor number was received")
return nil return nil
end end
local DoorsType: {Instance} = Type == DoorEnums.DoorLocation.Cab and self.DoorsTree.Cab or self.DoorsTree.Hall[HallFloor :: number] local DoorsType: {Instance} = Type == DoorEnums.DoorLocation.Cab and self.DoorsTree.Cab or self.DoorsTree.Hall[HallFloor :: number]
local ConfType = Type == DoorEnums.DoorLocation.Cab and self.DoorConfig.Cab or self.DoorConfig.Landing local ConfType = Type == DoorEnums.DoorLocation.Cab and self.DoorConfig.Cab or self.DoorConfig.Landing
@@ -217,19 +222,19 @@ local function ToggleDoors(self: ClassConstructor, Type: DoorEnums.DoorLocationV
DoorAnimationRuntime(self, Config.Time, function(self, AnimationTime) DoorAnimationRuntime(self, Config.Time, function(self, AnimationTime)
DoorAnimations.Cab[Config.Type](self, AnimationTime, P1, P2, P3, P4, P5, P6) DoorAnimations.Cab[Config.Type](self, AnimationTime, P1, P2, P3, P4, P5, P6)
end) end)
else return true
elseif Type == DoorEnums.DoorLocation.Landing then
DoorAnimationRuntime(self, Config.Time, function(self, AnimationTime) DoorAnimationRuntime(self, Config.Time, function(self, AnimationTime)
DoorAnimations.Landing[Config.Type](self, Floor, AnimationTime, P1, P2, P3, P4, P5, P6) DoorAnimations.Landing[Config.Type](self, Floor, AnimationTime, P1, P2, P3, P4, P5, P6)
end) end)
end
else
return false
end
else
warn("Could not open the elevator doors", debug.traceback())
return false
end
return true return true
end
return false
end
else
return false
end
return false
end end
function Doors:OpenCabAsync() function Doors:OpenCabAsync()