1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- local Workspace = game:GetService("Workspace")
- local CollectionService = game:GetService("CollectionService")
- local RunService = game:GetService("RunService")
- local FLOATY_TAG = "floaty"
- local PI = math.pi
- local TAU = PI * 2
- local SPEED = 1.5
- local floaties = {}
- local function addFloaty(part)
- floaties[part] = {
- part = part,
- originalCFrame = part.CFrame,
- offset = math.random() * TAU * SPEED
- }
- end
- local function removeFloaty(part)
- floaties[part] = nil
- end
- local function update(t, dt)
- for _, floaty in pairs(floaties) do
- local part = floaty.part
- local origCFrame = floaty.originalCFrame
- local scaledTime = (t*SPEED) + floaty.offset
-
- local xDisplacement = math.sin(scaledTime%TAU)
- local yDisplacement = math.sin((scaledTime+(0.2516623*TAU))%TAU)
- local zDisplacement = math.cos((scaledTime+(0.6572269*TAU))%TAU)
- local posTransform = CFrame.new(xDisplacement*0.5,yDisplacement*1, zDisplacement*0.5)
- local angularTransform = CFrame.Angles(xDisplacement*math.rad(10),yDisplacement*math.rad(15), zDisplacement*math.rad(15))
- local transform = posTransform * angularTransform
- part.CFrame = origCFrame * transform
- end
- end
- for _, part in pairs(CollectionService:GetTagged(FLOATY_TAG)) do
- addFloaty(part)
- end
- CollectionService:GetInstanceAddedSignal(FLOATY_TAG):Connect(addFloaty)
- CollectionService:GetInstanceRemovedSignal(FLOATY_TAG):Connect(removeFloaty)
- RunService.Stepped:Connect(update)
|