So I have a door that is part of a room. It has a button with a script that tweens the door to the left (Opening the door), and that also tweens it back into it's initial position (Closing the door).
I keep the room in replicated storage and I clone multiple copies of it. Then I change the CFrame of each room to stack them on top of each other.
When in game, and I press the button they all tween to the location they were set to before being put in replicated storage.
Here's the code that tweens it,
doorTween = {} door = script.Parent:WaitForChild("Door") doorPos = door.Position local TweenService = game:GetService("TweenService") -- Tweening info --------------------------------------------------------- local goalOpen = {} goalOpen.Position = Vector3.new(door.Position.X + 5.501, door.Position.Y, door.Position.Z - 4.95) local goalClosed = {} goalClosed.Position = doorPos local tweenInfo = TweenInfo.new(3) local tweenOpen = TweenService:Create(door, tweenInfo, goalOpen) local tweenClose = TweenService:Create(door, tweenInfo, goalClosed) -------------------------------------------------------------------------- -- Add a few functions to the table function doorTween.playCloseDoor() tweenClose:Play() end function doorTween.playOpenDoor() tweenOpen:Play() end return doorTween
Edit: Script that plays the tweens,
local doorFunctions = require(script.Parent.DoorTweenModule) local lock = script.Parent:WaitForChild("Lock") local outButton = script.Parent:WaitForChild("OutButton") local inButton = script.Parent:WaitForChild("InButton") local clickDetectorOut = outButton.Button:WaitForChild("ClickDetector") local clickDetectorIn = inButton.Button:WaitForChild("ClickDetector") local isOpen = false clickDetectorOut.MouseClick:Connect(function() if(not lock.Value) then if(isOpen) then doorFunctions.playCloseDoor() else doorFunctions.playOpenDoor() end isOpen = not isOpen end end) clickDetectorIn.MouseClick:Connect(function() if(not lock.Value) then if(isOpen) then doorFunctions.playCloseDoor() else doorFunctions.playOpenDoor() end isOpen = not isOpen end end)