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