mirror of
https://github.com/unixtensor/Roblox-Elevator-Game.git
synced 2025-12-14 06:41:55 +00:00
Doors now properly support close and open while moving
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
@@ -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)
|
||||||
|
return true
|
||||||
end
|
end
|
||||||
else
|
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
warn("Could not open the elevator doors", debug.traceback())
|
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
return true
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
function Doors:OpenCabAsync()
|
function Doors:OpenCabAsync()
|
||||||
|
|||||||
Reference in New Issue
Block a user