Skip to content

Instantly share code, notes, and snippets.

@howmanysmall
Created May 28, 2019 20:59
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save howmanysmall/c6269aed998548b546f4e733cfeb2eb2 to your computer and use it in GitHub Desktop.
Save howmanysmall/c6269aed998548b546f4e733cfeb2eb2 to your computer and use it in GitHub Desktop.
wait(.2)
bin = script.Parent
lastDistR = 0
lastDistL = 0
lastDistF = 0
lastDistB = 0
lastDistT = 0
lastDistB2 = 0
local handles = script.Parent.Handles
handles.Name = "ResizeToolHandles"
local sb = script.Parent.SB
sb.Name = "ResizeToolSelectionBox"
local onSide = false
local dragging = false
function MouseDrag(side, distance)
local part = handles.Adornee
if part == nil then return end
if tostring(side) == "Enum.NormalId.Right" then
if distance - lastDistR > 1 then
local newDist = math.floor(distance - lastDistR)
local cf = part.CFrame * CFrame.fromAxisAngle(Vector3.new(0, 1, 0), -math.pi/2)
local lv = cf.lookVector
local cf2 = part.CFrame
local size = part.Size
part.Size = Vector3.new(part.Size.x + newDist, part.Size.y, part.Size.z)
if part.Size == size then
part.CFrame = cf2 + lv * (0.5*newDist)
cf2 = part.CFrame
end
part.CFrame = cf2 + lv * (0.5*newDist)
lastDistR = lastDistR + newDist
else
if distance - lastDistR < -1 and part.Size.x + math.ceil(distance - lastDistR) < 1 then
local newDist = -(part.Size.x - 1)
local cf = part.CFrame * CFrame.fromAxisAngle(Vector3.new(0, 1, 0), -math.pi/2)
local lv = cf.lookVector
local cf2 = part.CFrame
local size = part.Size
part.Size = Vector3.new(part.Size.x + newDist, part.Size.y, part.Size.z)
if part.Size == size then
part.CFrame = cf2 + lv * (0.5*newDist)
cf2 = part.CFrame
end
part.CFrame = cf2 + lv * (0.5*newDist)
lastDistR = lastDistR + newDist
else
if distance - lastDistR < -1 and part.Size.x + math.ceil(distance - lastDistR) > 0 then
local newDist = math.ceil(distance - lastDistR)
local cf = part.CFrame * CFrame.fromAxisAngle(Vector3.new(0, 1, 0), -math.pi/2)
local lv = cf.lookVector
local cf2 = part.CFrame
local size = part.Size
part.Size = Vector3.new(part.Size.x + newDist, part.Size.y, part.Size.z)
if part.Size == size then
part.CFrame = cf2 + lv * (0.5*newDist)
cf2 = part.CFrame
end
part.CFrame = cf2 + lv * (0.5*newDist)
lastDistR = lastDistR + newDist
end
end
end
end
if tostring(side) == "Enum.NormalId.Left" then
if distance - lastDistL > 1 then
local newDist = math.floor(distance - lastDistL)
local cf = part.CFrame * CFrame.fromAxisAngle(Vector3.new(0, 1, 0), math.pi/2)
local lv = cf.lookVector
local cf2 = part.CFrame
local size = part.Size
part.Size = Vector3.new(part.Size.x + newDist, part.Size.y, part.Size.z)
if part.Size == size then
part.CFrame = cf2 + lv * (0.5*newDist)
cf2 = part.CFrame
end
part.CFrame = cf2 + lv * (0.5*newDist)
lastDistL = lastDistL + newDist
else
if distance - lastDistL < -1 and part.Size.x + math.ceil(distance - lastDistL) < 1 then
local newDist = -(part.Size.x - 1)
local cf = part.CFrame * CFrame.fromAxisAngle(Vector3.new(0, 1, 0), math.pi/2)
local lv = cf.lookVector
local cf2 = part.CFrame
local size = part.Size
part.Size = Vector3.new(part.Size.x + newDist, part.Size.y, part.Size.z)
if part.Size == size then
part.CFrame = cf2 + lv * (0.5*newDist)
cf2 = part.CFrame
end
part.CFrame = cf2 + lv * (0.5*newDist)
lastDistL = lastDistL + newDist
else
if distance - lastDistL < -1 and part.Size.x + math.ceil(distance - lastDistL) > 0 then
local newDist = math.ceil(distance - lastDistL)
local cf = part.CFrame * CFrame.fromAxisAngle(Vector3.new(0, 1, 0), math.pi/2)
local lv = cf.lookVector
local cf2 = part.CFrame
local size = part.Size
part.Size = Vector3.new(part.Size.x + newDist, part.Size.y, part.Size.z)
if part.Size == size then
part.CFrame = cf2 + lv * (0.5*newDist)
cf2 = part.CFrame
end
part.CFrame = cf2 + lv * (0.5*newDist)
lastDistL = lastDistL + newDist
end
end
end
end
if tostring(side) == "Enum.NormalId.Front" then
if distance - lastDistF > 1 then
local newDist = math.floor(distance - lastDistF)
local cf = part.CFrame
local lv = cf.lookVector
local cf2 = part.CFrame
local size = part.Size
part.Size = Vector3.new(part.Size.x, part.Size.y, part.Size.z + newDist)
if part.Size == size then
part.CFrame = cf2 + lv * (0.5*newDist)
cf2 = part.CFrame
end
part.CFrame = cf2 + lv * (0.5*newDist)
lastDistF = lastDistF + newDist
else
if distance - lastDistF < -1 and part.Size.z + math.ceil(distance - lastDistF) < 1 then
local newDist = -(part.Size.z - 1)
local cf = part.CFrame
local lv = cf.lookVector
local cf2 = part.CFrame
local size = part.Size
part.Size = Vector3.new(part.Size.x, part.Size.y, part.Size.z + newDist)
if part.Size == size then
part.CFrame = cf2 + lv * (0.5*newDist)
cf2 = part.CFrame
end
part.CFrame = cf2 + lv * (0.5*newDist)
lastDistF = lastDistF + newDist
else
if distance - lastDistF < -1 and part.Size.z + math.ceil(distance - lastDistF) > 0 then
local newDist = math.ceil(distance - lastDistF)
local cf = part.CFrame
local lv = cf.lookVector
local cf2 = part.CFrame
local size = part.Size
part.Size = Vector3.new(part.Size.x, part.Size.y, part.Size.z + newDist)
if part.Size == size then
part.CFrame = cf2 + lv * (0.5*newDist)
cf2 = part.CFrame
end
part.CFrame = cf2 + lv * (0.5*newDist)
lastDistF = lastDistF + newDist
end
end
end
end
if tostring(side) == "Enum.NormalId.Back" then
if distance - lastDistB > 1 then
local newDist = math.floor(distance - lastDistB)
local cf = part.CFrame * CFrame.fromAxisAngle(Vector3.new(0, 1, 0), math.pi)
local lv = cf.lookVector
local cf2 = part.CFrame
local size = part.Size
part.Size = Vector3.new(part.Size.x, part.Size.y, part.Size.z + newDist)
if part.Size == size then
part.CFrame = cf2 + lv * (0.5*newDist)
cf2 = part.CFrame
end
part.CFrame = cf2 + lv * (0.5*newDist)
lastDistB = lastDistB + newDist
else
if distance - lastDistB < -1 and part.Size.z + math.ceil(distance - lastDistB) < 1 then
local newDist = -(part.Size.z - 1)
local cf = part.CFrame * CFrame.fromAxisAngle(Vector3.new(0, 1, 0), math.pi)
local lv = cf.lookVector
local cf2 = part.CFrame
local size = part.Size
part.Size = Vector3.new(part.Size.x, part.Size.y, part.Size.z + newDist)
if part.Size == size then
part.CFrame = cf2 + lv * (0.5*newDist)
cf2 = part.CFrame
end
part.CFrame = cf2 + lv * (0.5*newDist)
lastDistB = lastDistB + newDist
else
if distance - lastDistB < -1 and part.Size.z + math.ceil(distance - lastDistB) > 0 then
local newDist = math.ceil(distance - lastDistB)
local cf = part.CFrame * CFrame.fromAxisAngle(Vector3.new(0, 1, 0), math.pi)
local lv = cf.lookVector
local cf2 = part.CFrame
local size = part.Size
part.Size = Vector3.new(part.Size.x, part.Size.y, part.Size.z + newDist)
if part.Size == size then
part.CFrame = cf2 + lv * (0.5*newDist)
cf2 = part.CFrame
end
part.CFrame = cf2 + lv * (0.5*newDist)
lastDistB = lastDistB + newDist
end
end
end
end
if tostring(side) == "Enum.NormalId.Top" then
local r = 1.2
if tostring(part.formFactor) == "Enum.FormFactor.Plate" then
r = 0.4
end
if tostring(part.formFactor) == "Enum.FormFactor.Symmetric" then
r = 1
end
if distance - lastDistT > r then
local newDist = distance - lastDistT
local cf = part.CFrame * CFrame.fromAxisAngle(Vector3.new(1, 0, 0), math.pi/2)
local lv = cf.lookVector
local cf2 = part.CFrame
local size = part.Size
part.Size = Vector3.new(part.Size.x, part.Size.y + newDist, part.Size.z)
if true then
newDist = part.Size.y - size.y
end
if part.Size == size then
part.CFrame = cf2 + lv * (0.5*newDist)
cf2 = part.CFrame
end
part.CFrame = cf2 + lv * (0.5*newDist)
lastDistT = lastDistT + newDist
else
if distance - lastDistT < -r and part.Size.y + (distance - lastDistT) < r then
local newDist = -(part.Size.y - r)
local cf = part.CFrame * CFrame.fromAxisAngle(Vector3.new(1, 0, 0), math.pi/2)
local lv = cf.lookVector
local cf2 = part.CFrame
local size = part.Size
part.Size = Vector3.new(part.Size.x, part.Size.y + newDist, part.Size.z)
if true then
newDist = part.Size.y - size.y
end
if part.Size == size then
part.CFrame = cf2 + lv * (0.5*newDist)
cf2 = part.CFrame
end
part.CFrame = cf2 + lv * (0.5*newDist)
lastDistT = lastDistT + newDist
else
if distance - lastDistT < -r and part.Size.y + (distance - lastDistT) > r then
local newDist = (distance - lastDistT)
local cf = part.CFrame * CFrame.fromAxisAngle(Vector3.new(1, 0, 0), math.pi/2)
local lv = cf.lookVector
local cf2 = part.CFrame
local size = part.Size
part.Size = Vector3.new(part.Size.x, part.Size.y + newDist, part.Size.z)
if true then
newDist = part.Size.y - size.y
end
if part.Size == size then
part.CFrame = cf2 + lv * (0.5*newDist)
cf2 = part.CFrame
end
part.CFrame = cf2 + lv * (0.5*newDist)
lastDistT = lastDistT + newDist
end
end
end
end
if tostring(side) == "Enum.NormalId.Bottom" then
local r = 1.2
if tostring(part.formFactor) == "Enum.FormFactor.Plate" then
r = 0.4
end
if tostring(part.formFactor) == "Enum.FormFactor.Symmetric" then
r = 1
end
if distance - lastDistB2 > r then
local newDist = distance - lastDistB2
local cf = part.CFrame * CFrame.fromAxisAngle(Vector3.new(1, 0, 0), -math.pi/2)
local lv = cf.lookVector
local cf2 = part.CFrame
local size = part.Size
part.Size = Vector3.new(part.Size.x, part.Size.y + newDist, part.Size.z)
if true then
newDist = part.Size.y - size.y
end
if part.Size == size then
part.CFrame = cf2 + lv * (0.5*newDist)
cf2 = part.CFrame
end
part.CFrame = cf2 + lv * (0.5*newDist)
lastDistB2 = lastDistB2 + newDist
else
if distance - lastDistB2 < -r and part.Size.y + (distance - lastDistB2) < r then
local newDist = -(part.Size.y - r)
local cf = part.CFrame * CFrame.fromAxisAngle(Vector3.new(1, 0, 0), -math.pi/2)
local lv = cf.lookVector
local cf2 = part.CFrame
local size = part.Size
part.Size = Vector3.new(part.Size.x, part.Size.y + newDist, part.Size.z)
if true then
newDist = part.Size.y - size.y
end
if part.Size == size then
part.CFrame = cf2 + lv * (0.5*newDist)
cf2 = part.CFrame
end
part.CFrame = cf2 + lv * (0.5*newDist)
lastDistB2 = lastDistB2 + newDist
else
if distance - lastDistB2 < -r and part.Size.y + (distance - lastDistB2) > r then
local newDist = (distance - lastDistB2)
local cf = part.CFrame * CFrame.fromAxisAngle(Vector3.new(1, 0, 0), -math.pi/2)
local lv = cf.lookVector
local cf2 = part.CFrame
local size = part.Size
part.Size = Vector3.new(part.Size.x, part.Size.y + newDist, part.Size.z)
if true then
newDist = part.Size.y - size.y
end
if part.Size == size then
part.CFrame = cf2 + lv * (0.5*newDist)
cf2 = part.CFrame
end
part.CFrame = cf2 + lv * (0.5*newDist)
lastDistB2 = lastDistB2 + newDist
end
end
end
end
end
function onButton1Down(side)
onDown()
if handles.Adornee == nil then return end
if tostring(side) == "Enum.NormalId.Right" then
lastDistR = 0
end
if tostring(side) == "Enum.NormalId.Left" then
lastDistL = 0
end
if tostring(side) == "Enum.NormalId.Front" then
lastDistF = 0
end
if tostring(side) == "Enum.NormalId.Back" then
lastDistB = 0
end
if tostring(side) == "Enum.NormalId.Top" then
lastDistT = 0
end
if tostring(side) == "Enum.NormalId.Bottom" then
lastDistB2 = 0
end
end
function onEnter(mouse)
onSide = true
mouse.Icon = "rbxasset://textures\\DragCursor.png"
end
function onLeave(mouse)
onSide = false
if dragging == true then return end
mouse.Icon = "rbxasset://textures\\DragCursor.png"
end
function onDown()
dragging = true
end
function onUp(mouse)
if dragging == false then return end
dragging = false
if onSide == false then
mouse.Icon = "rbxasset://textures\\DragCursor.png"
end
end
function onClick(mouse)
local obj = mouse.Target
if obj ~= nil then
if obj.Locked == true then
return
end
end
handles.Adornee = obj
sb.Adornee = obj
end
function onSelected(mouse)
mouse.Icon = "rbxasset://textures\\DragCursor.png"
if con1 ~= nil then
con1:disconnect()
con2:disconnect()
con3:disconnect()
end
onSide = false
dragging = false
con1 = handles.MouseEnter:connect(function() onEnter(mouse) end)
con2 = handles.MouseLeave:connect(function() onLeave(mouse) end)
con3 = mouse.Button1Up:connect(function() onUp(mouse) end)
handles.Parent = bin.Parent.Parent:FindFirstChild("PlayerGui")
sb.Parent = handles.Parent
mouse.Button1Down:connect(function() onClick(mouse) end)
end
function onDeselected()
handles.Adornee = nil
sb.Adornee = nil
end
handles.MouseDrag:connect(MouseDrag)
handles.MouseButton1Down:connect(onButton1Down)
bin.Selected:connect(onSelected)
bin.Deselected:connect(onDeselected)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment