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

Push sides to push block?

Asked by
iNicklas 215 Moderation Voter
8 years ago

Inspired from Zelda, its a crate that is supposed to be able to move to the right,left,front,back.

But for some reason it only moves front, and back.

canPush = true
script.Parent.Touched:connect(function(hit)
    if canPush == true then canPush = false
    local back = Vector3.new(script.Parent.CFrame.X + script.Parent.Size.X/2, script.Parent.Size.Y, script.Parent.Size.Z)
    local front = Vector3.new(script.Parent.CFrame.X - script.Parent.Size.X/2, script.Parent.Size.Y, script.Parent.Size.Z)
    local right = Vector3.new(script.Parent.Size.X, script.Parent.Size.Y, script.Parent.CFrame.Z - script.Parent.Size.X/2)
    local left = Vector3.new(script.Parent.Size.X, script.Parent.Size.Y, script.Parent.CFrame.Z + script.Parent.Size.X/2)
    local frontmag = (front - hit.Position).magnitude
    local backmag = (back - hit.Position).magnitude
    local leftmag = (left - hit.Position).magnitude 
    local rightmag = (right - hit.Position).magnitude
    if frontmag < backmag and frontmag < rightmag and frontmag < leftmag then
        for i = 1, 40 do
        wait()
        script.Parent.CFrame = script.Parent.CFrame - Vector3.new(-0.1, 0, 0)
        end
    elseif backmag < frontmag and backmag < rightmag and backmag < leftmag then
        for i = 1, 40 do
        wait()
        script.Parent.CFrame = script.Parent.CFrame + Vector3.new(-0.1, 0, 0)
        end
    elseif rightmag < frontmag and rightmag < backmag and rightmag < leftmag then
        for i = 1, 40 do
        wait()
        script.Parent.CFrame = script.Parent.CFrame - Vector3.new(0, 0, -0.1)
        end
    elseif leftmag < frontmag and leftmag < backmag and leftmag < rightmag then
        for i = 1, 40 do
        wait()
        script.Parent.CFrame = script.Parent.CFrame + Vector3.new(0, 0, -0.1)
        end
        end
    wait(1)
    canPush = true
    end
end)

1 answer

Log in to vote
1
Answered by 8 years ago

Take a look at your for loops. Two of them have the same increments, which means the box will only ever be able to move two directions. Change two of the for loops from negative to positive respective to their directions.

I would suggest a different method than magnitudes though, because it's not very reliable. Try using raycasting instead.

Ad

Answer this question