92 lines
2.2 KiB
Lua
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
|