mirror of
https://github.com/unixtensor/Roblox-Elevator-Game.git
synced 2025-12-14 06:41:55 +00:00
95 lines
3.7 KiB
Lua
95 lines
3.7 KiB
Lua
--!optimize 2
|
|
--!native
|
|
--!strict
|
|
|
|
type ClassConstructor = typeof(setmetatable({} :: Constructor_Return_Props, {} :: Impl_Constructor))
|
|
type Impl_Constructor = {
|
|
__index: Impl_Constructor,
|
|
constructor: Constructor_Fun,
|
|
--Class functions
|
|
UpdateCFrame: (self: ClassConstructor) -> (),
|
|
Frame_Pullies: (self: ClassConstructor, Delta: number, ElevatorVelocity_Y: number) -> (),
|
|
Frame_PiePlate: (self: ClassConstructor, Delta: number, ElevatorVelocity_Y: number) -> ()
|
|
}
|
|
|
|
type Constructor_Fun = (InstanceTree: InstanceTree) -> ClassConstructor
|
|
type Constructor_Return_Props = InstanceTree
|
|
|
|
export type MachineRoom = {
|
|
Pulley: UnionOperation,
|
|
Pulley2: UnionOperation,
|
|
Governor: UnionOperation,
|
|
GovernorFlyballs: Part,
|
|
PiePlatePulley: UnionOperation,
|
|
PiePlateSelector: UnionOperation,
|
|
PiePlatePlates: UnionOperation,
|
|
|
|
_CFrame: {
|
|
PulleyCFrame: CFrame,
|
|
Pulley2CFrame: CFrame,
|
|
GovernorCFrame: CFrame,
|
|
GovernorFlyballsCFrame: CFrame,
|
|
PieplatePulleyCFrame: CFrame,
|
|
PieplateSelectorCFrame: CFrame,
|
|
PiePlatePlatesCFrame: CFrame
|
|
}
|
|
}
|
|
|
|
export type InstanceTree = {
|
|
MachineRoom: MachineRoom
|
|
}
|
|
|
|
export type MovingObjectsConstructor = ClassConstructor
|
|
|
|
local MovingObjects = {} :: Impl_Constructor
|
|
MovingObjects.__index = MovingObjects
|
|
|
|
function MovingObjects.constructor(InstanceTree)
|
|
local self = InstanceTree :: Constructor_Return_Props
|
|
|
|
self.MachineRoom._CFrame.PulleyCFrame = InstanceTree.MachineRoom.Pulley.CFrame
|
|
self.MachineRoom._CFrame.Pulley2CFrame = InstanceTree.MachineRoom.Pulley2.CFrame
|
|
self.MachineRoom._CFrame.GovernorCFrame = InstanceTree.MachineRoom.Governor.CFrame
|
|
self.MachineRoom._CFrame.GovernorFlyballsCFrame = InstanceTree.MachineRoom.GovernorFlyballs.CFrame
|
|
self.MachineRoom._CFrame.PieplatePulleyCFrame = InstanceTree.MachineRoom.PiePlatePulley.CFrame
|
|
self.MachineRoom._CFrame.PiePlatePlatesCFrame = InstanceTree.MachineRoom.PiePlatePlates.CFrame
|
|
|
|
--static
|
|
self.MachineRoom._CFrame.PieplateSelectorCFrame = InstanceTree.MachineRoom.PiePlateSelector.CFrame
|
|
|
|
return setmetatable(self, MovingObjects)
|
|
end
|
|
|
|
function MovingObjects:UpdateCFrame()
|
|
self.MachineRoom._CFrame.PulleyCFrame = self.MachineRoom.Pulley.CFrame
|
|
self.MachineRoom._CFrame.Pulley2CFrame = self.MachineRoom.Pulley2.CFrame
|
|
self.MachineRoom._CFrame.GovernorCFrame = self.MachineRoom.Governor.CFrame
|
|
self.MachineRoom._CFrame.GovernorFlyballsCFrame = self.MachineRoom.GovernorFlyballs.CFrame
|
|
self.MachineRoom._CFrame.PieplatePulleyCFrame = self.MachineRoom.PiePlatePulley.CFrame
|
|
self.MachineRoom._CFrame.PieplateSelectorCFrame = self.MachineRoom.PiePlateSelector.CFrame
|
|
end
|
|
|
|
function MovingObjects:Frame_Pullies(Delta, ElevatorVelocity_Y)
|
|
local MR = self.MachineRoom
|
|
local MR_C = MR._CFrame
|
|
|
|
local RotAngle = Delta*ElevatorVelocity_Y
|
|
local PullAngle_2 = math.rad(RotAngle/2)
|
|
local PullAngle = math.rad(RotAngle)
|
|
|
|
MR.Pulley.CFrame = MR_C.PulleyCFrame *CFrame.Angles(-PullAngle_2, 0, 0)
|
|
MR.Pulley2.CFrame = MR_C.Pulley2CFrame *CFrame.Angles(PullAngle_2, 0, 0)
|
|
MR.Governor.CFrame = MR_C.GovernorCFrame *CFrame.Angles(0, PullAngle_2, 0)
|
|
MR.GovernorFlyballs.CFrame = MR_C.GovernorFlyballsCFrame*CFrame.Angles(PullAngle, 0, 0)
|
|
MR.PiePlatePulley.CFrame = MR_C.PieplatePulleyCFrame *CFrame.Angles(PullAngle_2, 0, 0)
|
|
end
|
|
|
|
function MovingObjects:Frame_PiePlate(Delta, ElevatorVelocity_Y)
|
|
local MR = self.MachineRoom
|
|
local MR_C = MR._CFrame
|
|
|
|
MR.PiePlateSelector.CFrame = MR_C.PieplateSelectorCFrame+Vector3.new(0, Delta/580, 0)
|
|
MR.PiePlatePlates.CFrame = MR_C.PiePlatePlatesCFrame *CFrame.Angles(-math.rad(Delta*5), 0, 0)
|
|
end
|
|
|
|
return MovingObjects |