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

What's a effective way to check if a Part (Brick) is surrounded by other bricks?

Asked by 10 years ago

What's a effective way to check if a Part (Brick) is surrounded by other brick.

Such as in the game "The Quarry" when you mine a block another block is added to the side of the block that is mined giving the illusion that the mine is endless.

1 answer

Log in to vote
0
Answered by
Goulstem 8144 Badge of Merit Moderation Voter Administrator Community Moderator
10 years ago

Awhile back, I noticed the same thing in the Quarry. But I noticed it in a different sort of way. If you reach to the spots in between the layers(dirt,stone,granite,obsidian) then you'll notice that if you mine a block down below the layer then all the blocks surrounding it will turn into the next layer type, whilst if you were to just mine to the side they're the previous layer type. This is mostly noticable with the intersection between granite and obsidian(if you play the game enough to get that far)

A way to implement this feature is to make a function that checks every part in the workspace and compare the magnitude, since presumedly if the part were to be right next to the focus part, then the checking value should be less than or equal to 1.

I'm not sure if this is the most efficient way but it works.

function checkDist(model,part)
    for i,v in pairs(model:GetChildren()) do
        if v:IsA("BasePart") then
            if (v.CFrame.p - part.CFrame.p).magnitude <= 1 then
                return v;
            end
        end
        if #v:GetChildren() > 0 then
            checkDist(v)
        end
    end
end

local closestPart = checkDist(workspace,workspace.Part)
if closestPart ~= nil then
    closestPart.Transparency = 0 --idk lol, do whatever you want
else
    local p = Instance.new("Part",workspace)
    --Define Properties here--
    p.CFrame = CFrame.new(workspace.Part.CFrame.p + Vector3.new(-p.Size.X,0,0))
end
Ad

Answer this question