diff --git a/src/server/main/Elevators/Map/Haughton/Doors.luau b/src/server/main/Elevators/Map/Haughton/Doors.luau index dee1d6b..3c94fd7 100644 --- a/src/server/main/Elevators/Map/Haughton/Doors.luau +++ b/src/server/main/Elevators/Map/Haughton/Doors.luau @@ -39,24 +39,39 @@ type Constructor_Fun = ( LandingDoorsTree: Tags.LandingTags ) -> ClassConstructor +type Attributes = { + Hall: { + Open: BoolValue + } +} + type Constructor_Return_Props = { ElevatorBox: BasePart, CabDoorsType: DoorEnums.DoorEnumValues, CabDoorsTree: {BasePart}, LandingDoorsType: DoorEnums.DoorEnumValues, - LandingDoorsTree: Tags.LandingTags + LandingDoorsTree: Tags.LandingTags, + Attributes: Attributes } local Doors = {} :: Impl_Constructor Doors.__index = Doors function Doors.constructor(ElevatorBox, CabDoorsType, CabDoorsTree, LandingDoorsType, LandingDoorsTree) + local HallOpen = Instance.new("BoolValue") :: BoolValue + HallOpen.Value = true + return setmetatable({ ElevatorBox = ElevatorBox, CabDoorsType = CabDoorsType, CabDoorsTree = CabDoorsTree, LandingDoorsType = LandingDoorsType, - LandingDoorsTree = LandingDoorsTree + LandingDoorsTree = LandingDoorsTree, + Attributes = { + Hall = { + Open = HallOpen + } + } }, Doors) end @@ -64,21 +79,25 @@ type DoorAnimationCallback = (self: ClassConstructor, Alpha: number, Time: local function DoorAnimationAsync(self: ClassConstructor, Time: number, Callback: DoorAnimationCallback<()>) local Alpha = 0 local StartTime = os.clock() + while RS.Stepped:Wait() do Alpha+=1e-3 local AnimationTime = Algebra.LinearElapse(StartTime, Time) Callback(self, Alpha, AnimationTime) if AnimationTime>=1 then - print("door animation killed") break end end end type DoorAnimationsMap = { - Cab: {[DoorEnums.DoorEnumValues]: DoorAnimationCallback}, - Floor: {[DoorEnums.DoorEnumValues]: DoorAnimationCallback} + Cab: { + [DoorEnums.DoorEnumValues]: DoorAnimationCallback + }, + Floor: { + [DoorEnums.DoorEnumValues]: DoorAnimationCallback + } } local DoorAnimations: DoorAnimationsMap = { Cab = {}, @@ -100,21 +119,20 @@ DoorAnimations.Cab[DoorEnums.Door.TripleSpeed] = function(self, Alpha, Animation end -DoorAnimations.Floor[DoorEnums.Door.SingleSpeed] = function(self, Alpha, AnimationTime, Floor, DoorP, OpenFromVec1) - local Door = self.LandingDoorsTree[Floor][1] :: BasePart - Door.Position = DoorP:Lerp(OpenFromVec1, Algebra.Easing.OutQuad(AnimationTime)) +DoorAnimations.Floor[DoorEnums.Door.SingleSpeed] = function(self, Alpha, AnimationTime, Floor, DoorPosition, OpenFromVec1) + (self.LandingDoorsTree[Floor][1] :: BasePart).Position = DoorPosition:Lerp(OpenFromVec1, Algebra.Easing.OutQuad(AnimationTime)) end function Doors:OpenCabAsync(ObjectSpaceDistance) local OpenFromVecTuple = self.CabDoorsTree[1].Position+ObjectSpaceDistance - DoorAnimationAsync(self, 3, function(self, Alpha, Time) + DoorAnimationAsync(self, 4, function(self, Alpha, Time) DoorAnimations.Cab[self.CabDoorsType](self, Alpha, Time, OpenFromVecTuple) end) end function Doors:CloseCabAsync(ObjectSpaceDistance) local CloseFromVecTuple = self.CabDoorsTree[1].Position-ObjectSpaceDistance - DoorAnimationAsync(self, 3, function(self, Alpha, Time) + DoorAnimationAsync(self, 4, function(self, Alpha, Time) DoorAnimations.Cab[self.CabDoorsType](self, Alpha, Time, CloseFromVecTuple) end) end @@ -125,20 +143,26 @@ function Doors:CloseFloorAsync(Floor, ObjectSpaceDistance) assert(DoorFloor) local Door = DoorFloor[1] assert(Door) - local DoorP = (Door :: BasePart).Position - local OpenFromVecTuple = DoorP+ObjectSpaceDistance - DoorAnimationAsync(self, 3, function(self, Alpha, Time) - DoorAnimations.Floor[self.CabDoorsType](self, Alpha, Time, Floor, DoorP, OpenFromVecTuple) + 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 = false end function Doors:OpenFloorAsync(Floor, ObjectSpaceDistance) - -- --this needs to be made custom for self.CabDoorsType - -- local OpenFromVecTuple = (self.LandingDoorsTree[Floor][1] :: BasePart).Position+ObjectSpaceDistance - - -- DoorAnimationAsync(self, 1, function(self, Alpha, Time) - -- DoorAnimations.Cab[self.CabDoorsType](self, Alpha, Time, OpenFromVecTuple) - -- end) + --this needs to be made custom for self.CabDoorsType + local DoorFloor = self.LandingDoorsTree[Floor] + assert(DoorFloor) + local Door = DoorFloor[1] + assert(Door) + 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 diff --git a/src/server/main/Elevators/Map/Haughton/init.luau b/src/server/main/Elevators/Map/Haughton/init.luau index 26ab399..2f9bf61 100644 --- a/src/server/main/Elevators/Map/Haughton/init.luau +++ b/src/server/main/Elevators/Map/Haughton/init.luau @@ -35,6 +35,7 @@ return function(TagsConstructor: TagsModule.TagsConstructor, ButtonTags: TagsMod ButtonsConstructor:InitForElevator(2, ButtonPromptsDistance) local TractionRopesConstructor = TractionRopes.constructor(CabRopesObject, PulleyRopesObject) + local DoorsConstructor = Doors.constructor(ElevatorBoxModel, DoorEnums.Door.SingleSpeed, CabDoorsTree, DoorEnums.Door.SingleSpeed, LandingDoorTags) local EventsConstructor = Events.constructor( Elevator, Config, @@ -46,7 +47,4 @@ return function(TagsConstructor: TagsModule.TagsConstructor, ButtonTags: TagsMod ) EventsConstructor:InitButtons() - local DoorsConstructor = Doors.constructor(ElevatorBoxModel, DoorEnums.Door.SingleSpeed, CabDoorsTree, DoorEnums.Door.SingleSpeed, LandingDoorTags) - task.wait(2) - DoorsConstructor:CloseFloorAsync(1, HallDoorOffset) end