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 = {
Type = DoorEnums.Door.DoubleSpeed,
Time = 4,
Goal = Vector3.new(4.027,6.017)
Goal = Vector3.new(4.027)
},
Landing = {
Type = DoorEnums.Door.SingleSpeed,

View File

@@ -20,10 +20,10 @@ type Impl_Constructor = {
__index: Impl_Constructor,
constructor: Constructor_Fun,
--Class functions
OpenCabAsync: (self: ClassConstructor) -> (),
CloseCabAsync: (self: ClassConstructor) -> (),
OpenAtFloorAsync: (self: ClassConstructor, Floor: number) -> (),
CloseAtFloorAsync: (self: ClassConstructor, Floor: number) -> (),
OpenCabAsync: (self: ClassConstructor) -> boolean,
CloseCabAsync: (self: ClassConstructor) -> boolean,
OpenAtFloorAsync: (self: ClassConstructor, Floor: number) -> boolean,
CloseAtFloorAsync: (self: ClassConstructor, Floor: number) -> boolean,
}
type Constructor_Fun = (
@@ -109,47 +109,51 @@ local DoorAnimations = {
@native
function DoorAnimations.Cab.SingleSpeed(self, AnimationTime, Door1Position, OpenToVec1)
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
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
-- 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
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 Door1XZ = Vector3.new(Door1Position.X, 0, Door1Position.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 OpenToVec2XZ = Vector3.new(OpenToVec2.X, 0, OpenToVec2.Z)
local CabDoor1 = self.DoorsTree.Cab[1] :: BasePart
local CabDoor2 = self.DoorsTree.Cab[2] :: BasePart
CabDoor1.Position = ElevatorY+Door1XZ:Lerp(Door1XZ+OpenToVec1XZ, OutQuad)
CabDoor2.Position = ElevatorY+Door2XZ:Lerp(Door2XZ+OpenToVec2XZ, OutQuad)
CabDoor1.Position = ElevatorY+Door1Y+Door1XZ:Lerp(Door1XZ+OpenToVec1XZ, AlgebraEasing)
CabDoor2.Position = ElevatorY+Door2Y+Door2XZ:Lerp(Door2XZ+OpenToVec2XZ, AlgebraEasing)
end
@native
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 ElevatorDoor1_Goal = Vector3.new(OpenToVec1.X, 0, OpenToVec1.Z)
local ElevatorDoor2_Goal = Vector3.new(OpenToVec2.X, 0, OpenToVec2.Z)
local ElevatorDoor3_Goal = Vector3.new(OpenToVec3.X, 0, OpenToVec3.Z)
local Door1XZ = Vector3.new(Door1Position.X, 0, Door1Position.Z)
local Door2XZ = Vector3.new(Door2Position.X, 0, Door2Position.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 CabDoor2 = self.DoorsTree.Cab[2] :: BasePart
local CabDoor3 = self.DoorsTree.Cab[3] :: BasePart
CabDoor1.Position = ElevatorY+CabDoor1.Position:Lerp(ElevatorDoor1_Goal, OutQuad)
CabDoor2.Position = ElevatorY+CabDoor2.Position:Lerp(ElevatorDoor2_Goal, OutQuad)
CabDoor3.Position = ElevatorY+CabDoor3.Position:Lerp(ElevatorDoor3_Goal, OutQuad)
CabDoor1.Position = ElevatorY+Door1Y+Door1XZ:Lerp(Door1XZ+OpenToVec1XZ, AlgebraEasing)
CabDoor2.Position = ElevatorY+Door2Y+Door2XZ:Lerp(Door2XZ+OpenToVec2XZ, AlgebraEasing)
CabDoor3.Position = ElevatorY+Door3Y+Door3XZ:Lerp(Door3XZ+OpenToVec3XZ, AlgebraEasing)
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")
return nil
end
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
@@ -217,20 +222,20 @@ local function ToggleDoors(self: ClassConstructor, Type: DoorEnums.DoorLocationV
DoorAnimationRuntime(self, Config.Time, function(self, AnimationTime)
DoorAnimations.Cab[Config.Type](self, AnimationTime, P1, P2, P3, P4, P5, P6)
end)
else
return true
elseif Type == DoorEnums.DoorLocation.Landing then
DoorAnimationRuntime(self, Config.Time, function(self, AnimationTime)
DoorAnimations.Landing[Config.Type](self, Floor, AnimationTime, P1, P2, P3, P4, P5, P6)
end)
end
else
return false
end
else
warn("Could not open the elevator doors", debug.traceback())
return false
end
return true
end
return false
end
else
return false
end
return false
end
function Doors:OpenCabAsync()
return ToggleDoors(self, DoorEnums.DoorLocation.Cab, true)