|
|
Line 1: |
Line 1: |
| <pre>
| | {{delete}} |
| local makeWeld = game.Lighting:FindFirstChild("MakeWeld")
| |
| local selectFirst = game.Lighting:FindFirstChild("WeldSelectFirst")
| |
| local selectSecond = game.Lighting:FindFirstChild("WeldSelectSecond")
| |
| local printC0 = game.Lighting:FindFirstChild("PrintC0")
| |
| local printC1 = game.Lighting:FindFirstChild("PrintC1")
| |
| local editWelds = game.Lighting:FindFirstChild("EditWelds")
| |
| local finalizeWelds = game.Lighting:FindFirstChild("FinalizeWelds")
| |
| local clearScript = game.Lighting:FindFirstChild("RemoveWeldScript")
| |
| | |
| if makeWeld == nil then
| |
| makeWeld = Instance.new("BoolValue")
| |
| makeWeld.Name = "MakeWeld"
| |
| makeWeld.Value = false
| |
| makeWeld.Parent = game.Lighting
| |
| end
| |
| | |
| if selectFirst == nil then
| |
| selectFirst = Instance.new("BoolValue")
| |
| selectFirst.Name = "WeldSelectFirst"
| |
| selectFirst.Value = false
| |
| selectFirst.Parent = game.Lighting
| |
| end
| |
| | |
| if selectSecond == nil then
| |
| selectSecond = Instance.new("BoolValue")
| |
| selectSecond.Name = "WeldSelectSecond"
| |
| selectSecond.Value = false
| |
| selectSecond.Parent = game.Lighting
| |
| end
| |
| | |
| | |
| if printC0 == nil then
| |
| printC0 = Instance.new("BoolValue")
| |
| printC0.Name = "PrintC0"
| |
| printC0.Value = false
| |
| printC0.Parent = game.Lighting
| |
| end
| |
| | |
| if printC1 == nil then
| |
| printC1 = Instance.new("BoolValue")
| |
| printC1.Name = "PrintC1"
| |
| printC1.Value = false
| |
| printC1.Parent = game.Lighting
| |
| end
| |
| | |
| if editWelds == nil then
| |
| editWelds = Instance.new("BoolValue")
| |
| editWelds.Name = "EditWelds"
| |
| editWelds.Value = false
| |
| editWelds.Parent = game.Lighting
| |
| end
| |
| | |
| if finalizeWelds == nil then
| |
| finalizeWelds = Instance.new("BoolValue")
| |
| finalizeWelds.Name = "FinalizeWelds"
| |
| finalizeWelds.Value = false
| |
| finalizeWelds.Parent = game.Lighting
| |
| end
| |
| | |
| if clearScript == nil then
| |
| clearScript = Instance.new("BoolValue")
| |
| clearScript.Name = "RemoveWeldScript"
| |
| clearScript.Value = false
| |
| clearScript.Parent = game.Lighting
| |
| end
| |
| | |
| | |
| function waitUntilOnePartSelected()
| |
| local failSauce = true
| |
| selection = game.Selection:Get()
| |
| while (failSauce) do
| |
| while (#selection ~= 1) do selection = game.Selection:Get() wait() end -- stall
| |
| | |
| if selection[1].className ~= "Part" and selection[1].className ~= "TrussPart" and selection[1].className ~= "WedgePart" then
| |
| print("Selected object is still not of type Part! Try harder.")
| |
| game.Selection:Set({})
| |
| else failSauce = false end
| |
| end
| |
| return selection[1]
| |
| end
| |
| | |
| function checkIfOneWeldSelected()
| |
| selection = game.Selection:Get()
| |
| if #selection ~= 1 then
| |
| print("You must select only a single weld!")
| |
| return nil
| |
| end
| |
| if selection[1].className ~= "Weld" then
| |
| print("That is not a weld you have selected.")
| |
| return nil
| |
| end
| |
| | |
| return selection[1]
| |
| end
| |
| | |
| | |
| function onMakeWeld(property)
| |
| if makeWeld.Value == false then return
| |
| else makeWeld.Value = false end
| |
| | |
| selection = game.Selection:Get()
| |
| if #selection > 2 or #selection < 1 then
| |
| print("Only 2 parts may be selected!")
| |
| return
| |
| end
| |
| if selection[1].className ~= "Part" and selection[1].className ~= "TrussPart" and selection[1].className ~= "WedgePart" then
| |
| print("First thing selected is not of type Part! Bad you!")
| |
| return
| |
| end
| |
| if selection[2].className ~= "Part" and selection[2].className ~= "TrussPart" and selection[2].className ~= "WedgePart" then
| |
| print("Second thing selected is not of type Part! Dislike.")
| |
| return
| |
| end
| |
| | |
| -- if we get here, we know we have two parts selected... time to bring out the spotwelders :D
| |
| newWeld = Instance.new("Weld")
| |
| newWeld.Part0 = selection[1]
| |
| newWeld.Part1 = selection[2]
| |
| newWeld.Name = selection[1].Name .. "#" .. selection[2].Name .. "#" .. "Weld"
| |
| newWeld.C1 = newWeld.Part1.CFrame:inverse() * newWeld.Part0.CFrame
| |
| | |
| print("Weld created... where would you like to place it? [Select ONE part now]")
| |
| | |
| newWeldBase = waitUntilOnePartSelected()
| |
| | |
| newWeld.Parent = selection[1]
| |
| end
| |
| | |
| | |
| function onSelectFirst(property)
| |
| if selectFirst.Value == false then return
| |
| else selectFirst.Value = false end
| |
| | |
| currWeld = checkIfOneWeldSelected()
| |
| | |
| if currWeld == nil then return end
| |
| | |
| game.Selection:Set({currWeld.Part0})
| |
| end
| |
| | |
| function onSelectSecond(property)
| |
| if selectSecond.Value == false then return
| |
| else selectSecond.Value = false end
| |
| | |
| currWeld = checkIfOneWeldSelected()
| |
| | |
| if currWeld == nil then return end
| |
| | |
| game.Selection:Set({currWeld.Part1})
| |
| end
| |
| | |
| | |
| function onPrintC0(property)
| |
| if printC0.Value == false then return
| |
| else printC0.Value = false end
| |
| | |
| currWeld = checkIfOneWeldSelected()
| |
| | |
| if currWeld == nil then return end
| |
| | |
| print(currWeld.C0)
| |
| end
| |
| | |
| function onPrintC1(property)
| |
| if printC1.Value == false then return
| |
| else printC1.Value = false end
| |
| | |
| currWeld = checkIfOneWeldSelected()
| |
| | |
| if currWeld == nil then return end
| |
| | |
| print(currWeld.C1)
| |
| end
| |
| | |
| local weldsToPreserve = {}
| |
| local oldParents = {}
| |
| function onEditWelds(property)
| |
| if editWelds.Value == false then return
| |
| else editWelds.Value = false end
| |
| | |
| selected = game.Selection:Get()
| |
|
| |
| -- make sure they're all welds
| |
| phailThis = false
| |
| for i = 1, #selected do
| |
| if selected[i].className ~= "Weld" then phailThis = true end
| |
| end
| |
| | |
| if phailThis then
| |
| print("One of the selected objects is not a weld; please select welds to preserve only")
| |
| return
| |
| end
| |
| | |
| weldsToPreserve = {}
| |
| oldParents = {}
| |
| for i = 1, #selected do
| |
| table.insert(weldsToPreserve, selected[i])
| |
| table.insert(oldParents, selected[i].Parent)
| |
| end
| |
| print("Welds will be preserved upon finalizeWelds call [unless editWelds is called again first].")
| |
| end
| |
| | |
| function onFinalizeWelds(property)
| |
| if finalizeWelds.Value == false then return
| |
| else finalizeWelds.Value = false end
| |
| | |
| for i = 1, #weldsToPreserve do
| |
| tempWeld = weldsToPreserve[i]
| |
| tempWeld.C1 = tempWeld.Part1.CFrame:inverse() * tempWeld.Part0.CFrame
| |
| tempWeld.Parent = oldParents[i]
| |
| end
| |
| | |
| print(#weldsToPreserve, " welds preserved")
| |
| end
| |
| | |
| | |
| function onClearScript(property)
| |
| if clearScript.Value == false then return
| |
| else clearScript.Value = false end
| |
| | |
| makeWeld:remove()
| |
| selectFirst:remove()
| |
| selectSecond:remove()
| |
| printC0:remove()
| |
| printC1:remove()
| |
| editWelds:remove()
| |
| finalizeWelds:remove()
| |
| clearScript:remove()
| |
| end
| |
| | |
| | |
| makeWeld.Changed:connect(onMakeWeld)
| |
| selectFirst.Changed:connect(onSelectFirst)
| |
| selectSecond.Changed:connect(onSelectSecond)
| |
| printC0.Changed:connect(onPrintC0)
| |
| printC1.Changed:connect(onPrintC1)
| |
| editWelds.Changed:connect(onEditWelds)
| |
| finalizeWelds.Changed:connect(onFinalizeWelds)
| |
| clearScript.Changed:connect(onClearScript)
| |
| | |
| </pre>
| |