Ad
Still have questions? Join our Discord server and get real time help.
Log in to vote
0

Detecting a Value that is already in a list?

Asked by 5 months ago
Edited 5 months ago

I have been struggling with preventing duplicate walls.

The function below takes two points and makes a wall between them. It then added that walls position to list01

The for loop in this function is what I've recently added and its failed at getting the desired result.

local wallOffset --Offset for midpoint Y axis
local list01 =  {} -- a table for holding each wall that's been placed

--Function for creating walls
local function createWall(last, currentPos)
    --Create a wall and size it between current and last pillar
    local wall = Instance.new("Part")
    wall.Name = "Wall"
    wall.Size = Vector3.new((last-currentPos).Magnitude,9,1)
    --(X,Y,Z) of the midpoint of the wall
    local midX = (last.X + currentPos.X)/2
    local midY = (last.Y + currentPos.Y)/2 - wallOffset
    local midZ = (last.Z + currentPos.Z)/2
    local orientation = (last - currentPos).Unit:Cross(Vector3.new(0,1,0))
    local CFramePos = Vector3.new(midX, midY, midZ)
    --Move wall to Midpoint
    wall.CFrame = CFrame.new(CFramePos, CFramePos + orientation)
    --print out the last pillars POS and the current pillars POS
    print("Last:",last, "Current:",currentPos)
    wall.Anchored = true
    wall.CanCollide = false --Change soon, add to teams disabled collision group
    --Put walls POS in list or destroy wall if already in list.
    for index = 1, #list01 do
        local value = list01[index]
        if value == wall.Position then
            wall:Destroy()
            print("wall destroyed")
            break
        else
            table.insert(list01, wall.Position)
            print("Wasn't Destroyed, added to table")
        end
    end
    print("List number: ", table.getn(list01))

end

I can see that I need to change the for loop(or possibly it's the wrong approach), right now if the first value isn't the same it will add the wall POS to the list regardless if the wall does exist in the list at another index. But if I remove the else statement then I'm not sure where to 'table.insert' when it is a new wall.

That's where I'm at and any help is always appreciated.

1
why are you making the wall before you check if the position is ok? kingdom5 5316 — 5mo
0
@Kingdom5 Where should I make this check? GoodCallMrOlsen 55 — 5mo
0
When I check the position of a wall about to be created against the list of walls created, wall.Position comes up (0,0,0) unless it's after parenting the new wall to the workspace. Which resulted in the for loop being where it is? I am open to another route as this hasn't worked GoodCallMrOlsen 55 — 5mo

Answer this question