Super-Nostalgia-Zone/Server/Scripts/Cylinders/init.server.lua

77 lines
1.8 KiB
Lua

local CollectionService = game:GetService("CollectionService")
local cylinderSurface = script:WaitForChild("CylinderSurface")
local cylinderListener = CollectionService:GetInstanceAddedSignal("Cylinder")
local min, max = math.min, math.max
local function makeCylinderSurface(part, sizeUpdated)
local surface = cylinderSurface:Clone()
surface.Parent = part
surface.Adornee = part
surface.Archivable = false
local lastSize = Vector3.new()
local function onSizeUpdated()
local size = part.Size
if size ~= lastSize then
local scale = min(size.Y, size.Z)
surface.CanvasSize = Vector2.new(max(100, scale * 100), max(100, scale * 100))
lastSize = size
end
end
onSizeUpdated()
sizeUpdated:Connect(onSizeUpdated)
return surface
end
local function bindCylinder(part)
if not part:IsA("Part") then
return
end
local sizeUpdated = part:GetPropertyChangedSignal("Size")
part.Shape = "Ball"
part:MakeJoints()
local mesh = Instance.new("SpecialMesh")
mesh.MeshId = "rbxassetid://1009010722"
mesh.Archivable = false
mesh.Parent = part
local leftSurface = makeCylinderSurface(part, sizeUpdated)
leftSurface.Face = "Left"
local rightSurface = makeCylinderSurface(part, sizeUpdated)
rightSurface.Face = "Right"
local function onSizeUpdated()
local size = part.Size
local scale = math.min(size.Y,size.Z)
mesh.Scale = Vector3.new(scale,scale,scale)
end
onSizeUpdated()
sizeUpdated:Connect(onSizeUpdated)
end
local function findCylinder(obj)
if obj:IsA("Part") and obj.Shape == Enum.PartType.Cylinder then
CollectionService:AddTag(obj, "Cylinder")
end
end
for _, obj in pairs(workspace:GetDescendants()) do
findCylinder(obj)
end
for _, cylinder in pairs(CollectionService:GetTagged("Cylinder")) do
bindCylinder(cylinder)
end
workspace.DescendantAdded:Connect(findCylinder)
cylinderListener:Connect(bindCylinder)