Files
PlaneBuilding/scripts/modules/objects/Rope.lua
T

92 lines
2.2 KiB
Lua

local module = {}
local partStateModule = require(_G.Modules.PartStateModule)
function setup(this,rope,context)
local function new(name,tab)
local part = Instance.new(name)
_G.Union(part,tab)
return part
end
local node1 = rope["1"]
local node2 = rope["2"]
if rope.Name == "Shaft" then -- Make two universal constraints
local constraint1 = new("UniversalConstraint",{
Parent = node1,
Attachment0 = new("Attachment",{
Parent = node1
}),
Attachment1 = new("Attachment",{
Parent = rope,
WorldCFrame = node1.CFrame
})
})
local constraint2 = new("UniversalConstraint",{
Parent = node2,
Attachment0 = new("Attachment",{
Parent = node2
}),
Attachment1 = new("Attachment",{
Parent = rope,
WorldCFrame = node2.CFrame
})
})
elseif rope.Name == "Rope" or rope.Name == "Rod2" then
rope.Transparency = 1
rope.CanCollide = false
rope.Massless = true
local name
if rope.name == "Rope" then name = "RopeConstraint" end
if rope.Name == "Rod2" then name = "RodConstraint" end
local constraint = new(name,{
Parent = rope,
Attachment0 = new("Attachment",{
Parent = node1
}),
Attachment1 = new("Attachment",{
Parent = node2
}),
Visible = true,
Thickness = rope.Size.Y
})
if rope.Length.Value == 0 then rope.Length.Value = constraint.CurrentDistance end
constraint.Length = rope.Length.Value
end
node1.CanCollide = true -- Resize and make nodes non-collide
node2.CanCollide = true
node1.Size = Vector3.one * rope.Size.Y
node2.Size = node1.Size
for index,joint in pairs(rope:GetJoints()) do -- Fix welds in new version
if joint:IsA("WeldConstraint") then
local other = joint.Part0
if joint.Part0 == rope then other = joint.Part1 end
local closest = node1
if (node2.Position-other.Position).Magnitude < (node1.Position-other.Position).Magnitude then closest = node2 end
new("WeldConstraint",{
Parent = rope,
Part0 = closest,
Part1 = other,
Name = "BuiltWeldConstraint"
})
if index > 1 then joint:Destroy() end
end
end
end
function module.new(this,rope,context)
if _G.IsServer then setup(this,rope,context) end
return this
end
module.manifest = {
"Rod2",
"Rope",
"Shaft"
}
return module