From 3180b3192821b5ebb81100337ea0a8ea05d6c788 Mon Sep 17 00:00:00 2001 From: unixtensor Date: Tue, 10 Sep 2024 15:17:57 -0400 Subject: [PATCH] Doors now properly support close and open while moving --- .../main/Elevators/Map/Haughton/Config.luau | 2 +- .../main/Elevators/Map/Haughton/Doors.luau | 57 ++++++++++--------- 2 files changed, 32 insertions(+), 27 deletions(-) diff --git a/src/server/main/Elevators/Map/Haughton/Config.luau b/src/server/main/Elevators/Map/Haughton/Config.luau index b3ecf36..161d652 100644 --- a/src/server/main/Elevators/Map/Haughton/Config.luau +++ b/src/server/main/Elevators/Map/Haughton/Config.luau @@ -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, diff --git a/src/server/main/Elevators/Map/Haughton/Doors.luau b/src/server/main/Elevators/Map/Haughton/Doors.luau index 2e693d1..7d8cf56 100644 --- a/src/server/main/Elevators/Map/Haughton/Doors.luau +++ b/src/server/main/Elevators/Map/Haughton/Doors.luau @@ -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,19 +222,19 @@ 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) + return true end - else return false end else - warn("Could not open the elevator doors", debug.traceback()) return false end - return true + return false end function Doors:OpenCabAsync()