From 21a8a228499df675e4106c71dd51fc9a422a7dcc Mon Sep 17 00:00:00 2001 From: unittensor Date: Wed, 1 May 2024 21:17:09 -0400 Subject: [PATCH] work on door floors --- src/server/main/Elevators/Floors.lua | 36 -------------- src/server/main/Elevators/Otis1960/Doors.lua | 8 +-- src/server/main/Elevators/Otis1960/init.lua | 51 +++++++++++--------- src/server/main/Load/Tags/init.lua | 28 ++++++++++- 4 files changed, 58 insertions(+), 65 deletions(-) delete mode 100644 src/server/main/Elevators/Floors.lua diff --git a/src/server/main/Elevators/Floors.lua b/src/server/main/Elevators/Floors.lua deleted file mode 100644 index df1d3cc..0000000 --- a/src/server/main/Elevators/Floors.lua +++ /dev/null @@ -1,36 +0,0 @@ ---!optimize 2 ---!native ---!strict - -local Floors = {} -Floors.__index = Floors - -local Storage = game:GetService("ReplicatedStorage") -local CS = game:GetService("CollectionService") - -local Tags = require(Storage:WaitForChild("Tags")) - -function Floors.constructor(NumberOfFloors: number, Year: string) - local Floors = {} - for i: number = 1, NumberOfFloors do - local FloorTag_1 = CS:GetTagged(`ElevatorDoor_{Year}_Floor{tostring(i)}_1`) - local FloorTag_2 = CS:GetTagged(`ElevatorDoor_{Year}_Floor{tostring(i)}_2`) - if FloorTag_1 then - table.insert(Floors, FloorTag_1) - end - if FloorTag_2 then - table.insert(Floors, FloorTag_2) - end - end - - return setmetatable({ - NumberOfFloors = NumberOfFloors, - Floors = Floors - }, Floors) -end - -function Floors:GetFloor(Floor: number): Instance? - -end - -return Floors \ No newline at end of file diff --git a/src/server/main/Elevators/Otis1960/Doors.lua b/src/server/main/Elevators/Otis1960/Doors.lua index 6f1455f..a7ee85a 100644 --- a/src/server/main/Elevators/Otis1960/Doors.lua +++ b/src/server/main/Elevators/Otis1960/Doors.lua @@ -92,12 +92,12 @@ local function DoorsAnimationFloor(floor: number, opening: boolean?, activated_v local DoorTween1 = Tween.constructor(TweenInfo.new( TweenTime, activated_via_censor and Enum.EasingStyle.Linear or Doors.ElevatorDoorStyle, - Enum.EasingDirection.InOut + Enum.EasingDirection.Out ), Floor10_Door1) local DoorTween2 = Tween.constructor(TweenInfo.new( TweenTime, activated_via_censor and Enum.EasingStyle.Linear or Doors.ElevatorDoorStyle, - Enum.EasingDirection.InOut + Enum.EasingDirection.Out ), Floor10_Door2) local Door1Tween_Floor: Tween = DoorTween1:Start(nil, { Position = opening and init_closed_door1 or init_opened_door1 @@ -134,14 +134,14 @@ local function DoorsAnimation(self: ClassConstructor, opening: boolean?, activat }, TweenInfo.new( TweenTime, activated_via_censor and Enum.EasingStyle.Linear or Doors.ElevatorDoorStyle, - Enum.EasingDirection.InOut + Enum.EasingDirection.Out )) local Door2Tween = self.DoorTween2:Start(nil, { Position = opening and init_closed_door2 or init_opened_door2 }, TweenInfo.new( TweenTime, activated_via_censor and Enum.EasingStyle.Linear or Doors.ElevatorDoorStyle, - Enum.EasingDirection.InOut + Enum.EasingDirection.Out )) if not opening then diff --git a/src/server/main/Elevators/Otis1960/init.lua b/src/server/main/Elevators/Otis1960/init.lua index 37605a9..f6cb8b1 100644 --- a/src/server/main/Elevators/Otis1960/init.lua +++ b/src/server/main/Elevators/Otis1960/init.lua @@ -45,6 +45,8 @@ type Impl_Static_Props = { LanternDisplayColorOff: Color3, LanternChimeDirection: rbxassetid, LanternChimeLanding: rbxassetid, + FloorLevelingDistance: number, + LeveledDistance: number, __Moving: boolean, __CurrentFloor: number } @@ -81,6 +83,8 @@ type ButtonFunctions = { local Otis1960 = {} :: Impl_Constructor Otis1960.__index = Otis1960 +Otis1960.FloorLevelingDistance = 2.5 +Otis1960.LeveledDistance = 0.5 Otis1960.Responsiveness = 50 Otis1960.MaxVelocity = 10 Otis1960.ButtonActivatedColor = Color3.fromRGB(180,0,0) @@ -185,6 +189,21 @@ function Otis1960.constructor(TagsConstructor, ButtonsTags, LanternsTags) return ClassConstructor end +local function FloorLeveling(self: ClassConstructor, RequestedLevel: number) + self.BoxAlignPosition.MaxVelocity = 1 + self.LanternsConstructor:Toggle(true, RequestedLevel) +end + +local function FloorLeveled(self: ClassConstructor, RequestedLevel: number) + (self.__MovingConnection :: RBXScriptConnection):Disconnect() + + Otis1960.__Moving = false + Otis1960.__CurrentFloor = RequestedLevel + self.BoxAlignPosition.MaxVelocity = Otis1960.MaxVelocity + + self.LanternsConstructor:Reset() +end + function Otis1960:__MoveFloors(GoalLevelVEC, RequestedLevel, GoingUp) local RotationDelta = 0 local ElevatorBoxCurrentPos = self.ElevatorBox_1960.Position @@ -214,34 +233,20 @@ function Otis1960:__MoveFloors(GoalLevelVEC, RequestedLevel, GoingUp) --Kill the connection if GoingUp then - if ElevatorPosition.Y>=self.BoxAlignPosition.Position.Y-1 then - self.BoxAlignPosition.MaxVelocity = .35 - self.LanternsConstructor:Toggle(true, RequestedLevel) + if ElevatorPosition.Y>=self.BoxAlignPosition.Position.Y-Otis1960.FloorLevelingDistance then + FloorLeveling(self, RequestedLevel) end - - if ElevatorPosition.Y>=self.BoxAlignPosition.Position.Y-.5 then - (self.__MovingConnection :: RBXScriptConnection):Disconnect() - - Otis1960.__Moving = false - Otis1960.__CurrentFloor = RequestedLevel - self.BoxAlignPosition.MaxVelocity = Otis1960.MaxVelocity - - self.LanternsConstructor:Reset() + + if ElevatorPosition.Y>=self.BoxAlignPosition.Position.Y-Otis1960.LeveledDistance then + FloorLeveled(self, RequestedLevel) end else - if ElevatorPosition.Y<=self.BoxAlignPosition.Position.Y+1 then - self.BoxAlignPosition.MaxVelocity = .35 - self.LanternsConstructor:Toggle(true, RequestedLevel) + if ElevatorPosition.Y<=self.BoxAlignPosition.Position.Y+Otis1960.FloorLevelingDistance then + FloorLeveling(self, RequestedLevel) end - if ElevatorPosition.Y<=self.BoxAlignPosition.Position.Y+.5 then - (self.__MovingConnection :: RBXScriptConnection):Disconnect() - - Otis1960.__Moving = false - Otis1960.__CurrentFloor = RequestedLevel - self.BoxAlignPosition.MaxVelocity = Otis1960.MaxVelocity - - self.LanternsConstructor:Reset() + if ElevatorPosition.Y<=self.BoxAlignPosition.Position.Y+Otis1960.LeveledDistance then + FloorLeveled(self, RequestedLevel) end end end) diff --git a/src/server/main/Load/Tags/init.lua b/src/server/main/Load/Tags/init.lua index 957cb3d..d64945c 100644 --- a/src/server/main/Load/Tags/init.lua +++ b/src/server/main/Load/Tags/init.lua @@ -19,12 +19,14 @@ type Impl_Constructor = { Request: (self: ClassConstructor, Name: string) -> TagProduct | Error, __ElevatorLanterns: (self: ClassConstructor) -> LanternsTree, __ElevatorButtons: (self: ClassConstructor) -> ElevatorModelButtons, + __ElevatorDoors: (self: ClassConstructor) -> any, __Interactables: (self: ClassConstructor) -> InteractablesTree } & Impl_Static_Props type Impl_Static_Props = { Decoders: { - CarTag: (FloorTag: string) -> number? + CarTag: (FloorTag: string) -> number?, + FloorTag: (FloorTag: string) -> string? } } @@ -116,8 +118,12 @@ Tags.__index = Tags Tags.Decoders = { CarTag = function(FloorTag) - local Match = FloorTag:match('%d+$') + local Match = FloorTag:match('^%d+$') return Match and tonumber(Match) + end, + + FloorTag = function(FloorTag) + return FloorTag:match('^Floor%d+$') end } @@ -230,6 +236,24 @@ function Tags:__ElevatorButtons() return Buttons end +function Tags:__ElevatorDoors() + local Doors = {} + + for _, EnumValue in Enums.Elevator do + Doors[EnumValue :: Enums.ElevatorValues] = {} + + for TagName: string, Inst: TagProduct in self.__export do + local Split = TagName:split('_') + local ModelHint = Split[1] + local FloorHint = Split[2] + + if ModelHint == (EnumValue :: Enums.ElevatorValues) and Tags.Decoders.FloorTag(ModelHint) then + + end + end + end +end + function Tags:__Interactables() local Interactables: InteractablesTree = { LightSwitches = {}