List.Contains not working as intended
Hello, this has been bugging me for two days and I cannot figure out why List.Contains is not working as it should. I am basically creating a random map of 2d tiles, and each tile that is placed is put into a list of Vector3s, so that the next tile can be checked against that list so duplicate positions are avoided.
This works most of the time. Except the few cases where a duplicate overrides the list and list.contains does not pick up on it. At the end of my for loop, I print out each Vector3 in the list and both of the coordinates show up, where the second one should never exist in the first place.
Setting up the variables:
 void SpawnLevelForHexagon (){
 
     ResetLevel();
     Vector3 previousLocation = new Vector3(0,0,0); 
     Vector3 newLocation;
     List<Vector3> locationList = new List<Vector3>(); // Set up the list to prevent overlap
     locationList.Add(new Vector3(0,0,0));    // Add the first tile to the list
     Vector3 problemLocation = new Vector3(0,0,0);  // debugging variable
For loop to place each tile:
 for (int i = levelSize; i > 1; i--) {    
         
         int ranx = Random.Range(0,2) * 2 - 1;     // 1 or -1
         int rany = Random.Range(0,2) * 2 - 1;      // 1 or -1
         int ranz = Random.Range(0,5);            // Random variable to decide to place either a horizontal or diagonal tile
 
         if (ranz == 0){                            // 25% chance to place a hortizontal tile
             Code to place horizontal tile
         } 
 
         else {                                // 75% chance to place a diagonal tile
             newLocation = previousLocation + new Vector3(0.5f * tileWidth * ranx, 0.75f * tileHeight * rany, 0);
             int n = 2;
             while (locationList.Contains(newLocation)){
                 newLocation = previousLocation + new Vector3(n * 0.5f * tileWidth * ranx, n * 0.75f * tileHeight * rany, 0);
                 n++;
             }
           problemLocation = newLocation;    
         }
 
         Instantiate(mapTile, newLocation, Quaternion.identity); // Spawn a new map Tile
         previousLocation = newLocation; // Set the new previousLocation variable to the newly placed tile's location        
         locationList.Add(problemLocation);    // Add the new location to a list for checking overlap        
     }
The conflict only appears for diagonal tiles. But I guess sometimes the List.Contains function doesn't find the newLocation that already exists in the list. And like I said, I print out all the contents of the list after the for loop and two copies of the same Vector3 are in the list when there's a conflict but the tiles still overlap on top of each other.
I'll take any help I can get. I'm sorry if this post is verbose I tried my best to explain it quickly.
Your answer
 
 
             Follow this Question
Related Questions
Unique list of Vector3's 1 Answer
Trying to Generate Different Random Values for Position of Game Object Instances [C#] 1 Answer
How do I properly use List-Vector3-.Contains()? 1 Answer
Overriding List.Contains Equals() for a custom class 0 Answers
What is the most effective way to structure Card Effects in a Single Player game? 1 Answer
 koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                