--!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