77 lines
1.8 KiB
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)
|