Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

Cutting tool not cutting correctly?

Asked by 4 years ago

So im not that good at explaining but basically im making a tool that allows you to cut parts in half from a certian position, my problem is that its not cutting correctly if its rotated or something, as when its not rotated it works correctly but if it is then the tool cuts its kinda weird, ill put a video showing me cutting the parts in half

Code:

--Define Variables
local CAS = game:GetService("ContextActionService")
local player = game.Players.LocalPlayer
local mouse = player:GetMouse()
local Tool = script.Parent
local mtarget
local omtarget
local down
local newCut
local Side1,Side2,disx1,disx2,pos1,pos2
local targ,CH,Part1,Part2
local siX, siZ

--Cutting Function
function Cut(actionName, UserInputState)
    --print(actionName)
    --print(UserInputState)
                    mtarget = mouse.Target
    if actionName == "Cutting" then
        if mtarget:FindFirstChild("Owner") then
            if mtarget.Owner.Value == player.Name then
                if UserInputState == Enum.UserInputState.Begin then
                    down = true
                    local sized = mtarget.Size
                    if mtarget.Name ~= "CutPart" then
                        local newCut = Instance.new("Part", mtarget) --Create Cut Part
                        targ = newCut.Parent
                        newCut.BrickColor = BrickColor.new("Pastel orange") --Change Color of part
                        newCut.Anchored = true --Anchor the part
                        siX = targ.Size.X
                        siZ = targ.Size.Z
                        if (targ.Orientation.Y > 0 and targ.Orientation.Y < 90) or (targ.Orientation.Y < 180 and targ.Orientation.Y > -90) or (siX > siZ) then
                            newCut.Size = Vector3.new(0.1,0.1,sized.Z+0.1) --Change the size
                            newCut.Position = Vector3.new(mouse.Hit.p.X,targ.Position.Y,targ.Position.Z)--Change the position
                        end
                        if (targ.Orientation.Y > 90 and targ.Orientation.Y < 180) or (targ.Orientation.Y < 0 and targ.Orientation.Y < -90) or (siZ > siX) then
                            newCut.Size = Vector3.new(sized.X+0.1,0.1,0.1) --Change the size
                            newCut.Position = Vector3.new(targ.Position.X,targ.Position.Y,mouse.Hit.p.Z)--Change the position
                        end
                        print(newCut.Position)
                        print(targ.Position)
                        newCut.Orientation = targ.Orientation
                        newCut.Material = "Neon" --Change the material
                        newCut.Name = "CutPart" --Name the part
                        newCut.CanCollide = false
                        targ.Anchored = true
                        while down do
                            newCut.Size = newCut.Size + Vector3.new(0,0.1,0) --Increase size of part
                            if newCut.Size.Y >= targ.Size.Y + 0.2 then
                                Side1 = targ.Position.X - (targ.Size.X/2)
                                Side2 = targ.Position.X + (targ.Size.X/2)

                                if newCut.Position.X > Side1 then
                                    disx1 = newCut.Position.X - Side1
                                    pos1 = disx1/2
                                    --print("Pos1:", pos1)
                                    Part1 = Instance.new("Part", workspace)
                                    Part1.Size = Vector3.new(disx1,targ.Size.Y,targ.Size.Z)
                                    Part1.Position = Vector3.new(targ.Position.X-pos1,targ.Position.Y,targ.Position.Z)
                                    Part1.BrickColor = targ.BrickColor
                                    Part1.Material = targ.Material
                                    Part1.Orientation = targ.Orientation
                                else
                                    disx1 = Side1 - newCut.Position.X
                                    pos1 = (newCut.Position.X - Side1)/2
                                    --print("Pos1:", pos1)
                                    Part1 = Instance.new("Part", workspace)
                                    Part1.Size = Vector3.new(disx1,targ.Size.Y,targ.Size.Z)
                                    Part1.Position = Vector3.new(targ.Position.X-pos1,targ.Position.Y,targ.Position.Z)
                                    Part1.BrickColor = targ.BrickColor
                                    Part1.Material = targ.Material
                                    Part1.Orientation = targ.Orientation
                                end
                                if newCut.Position.X > Side2 then
                                    disx2 = newCut.Position.X - Side2
                                    pos2 = disx2/2
                                    --print("Pos2:", pos2)
                                    Part2 = Instance.new("Part", workspace)
                                    Part2.Size = Vector3.new(disx2,targ.Size.Y,targ.Size.Z)
                                    Part2.Position = Vector3.new(targ.Position.X-pos2,targ.Position.Y,targ.Position.Z)
                                    Part2.BrickColor = targ.BrickColor
                                    Part2.Material = targ.Material
                                    Part2.Orientation = targ.Orientation
                                else
                                    disx2 = Side2 - newCut.Position.X
                                    pos2 = (newCut.Position.X - Side2)/2
                                    --print("Pos2:", pos2)
                                    Part2 = Instance.new("Part", workspace)
                                    Part2.Size = Vector3.new(disx2,targ.Size.Y,targ.Size.Z)
                                    Part2.Position = Vector3.new(targ.Position.X-pos2,targ.Position.Y,targ.Position.Z)
                                    Part2.BrickColor = targ.BrickColor
                                    Part2.Material = targ.Material
                                    Part2.Orientation = targ.Orientation
                                end
                                newCut:Destroy()
                                local children = targ:GetChildren()
                                targ:Destroy()
                                for i = 1, #children do
                                    CH = children[i]
                                    local CH1 = CH:Clone()
                                    local CH2 = CH:Clone()
                                    CH1.Parent = Part1
                                    CH2.Parent = Part2
                                end
                                down = false
                            end
                            wait()  
                        end
                        newCut:Destroy()
                    end
                elseif UserInputState == Enum.UserInputState.End then
                    if targ:FindFirstChild("CutPart") then
                        targ.CutPart:Destroy()
                    end
                    targ.Anchored = false
                    down = false
                end
            end
        end
    end
end

--Bind actions when equipping tool
function Equip()
    CAS:BindAction("Cutting", Cut, false, Enum.UserInputType.MouseButton1)
end

--Unbind actions when unequipping tool
function Unequip()
    CAS:UnbindAction("Cutting")
end

--Check is tool is equipped or unequipped
Tool.Equipped:Connect(Equip)
Tool.Unequipped:Connect(Unequip)

Video: http://www.youtube.com/watch?v=ec2XaD9NjJY&feature=youtu.be

Answer this question