Hello, I try to spawn chests on random spawn point. Also I need to check if this spawn point is free. First part works, but I have problems with second. Sometimes it spawns multiple chests at the same place in a row. Please help, here is my code:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Tilemaps;
public class SpawnLootBox : MonoBehaviour
{
public GameObject[] spawnPoints;
private GameObject[] numberOfChest;
public GameObject chest;
private float countSeconds = 0;
private int numberOfBoxesToSpawn;
private SpawnPointNumber spawnPointNumber;
public List<int> takenPlaces = new List<int>();
private bool placeIsTaken;
private int spawn;
void Update()
{
if (countSeconds <= 0)
{
countSeconds = Random.Range(1, 3);
StartCoroutine(Wait(countSeconds));
}
}
private IEnumerator Wait(float seconds)
{
yield return new WaitForSeconds(seconds);
countSeconds = 0;
numberOfBoxesToSpawn = Random.Range(1, 4);
numberOfChest = GameObject.FindGameObjectsWithTag("Chest");
while (numberOfBoxesToSpawn > 0 && numberOfChest.Length < 6)
{
SpawnBox();
numberOfBoxesToSpawn--;
}
}
private void SpawnBox()
{
spawn = Random.Range(0, spawnPoints.Length);
CheckList();
if (placeIsTaken == false)
{
GameObject newChest = GameObject.Instantiate(chest, spawnPoints[spawn].transform.position, Quaternion.identity);
spawnPointNumber = newChest.GetComponent<SpawnPointNumber>();
spawnPointNumber.spawnNumber = spawn;
takenPlaces.Add(spawn);
}
}
private void CheckList()
{
foreach (int i in takenPlaces)
{
if (i == spawn)
{
placeIsTaken = true;
SpawnBox();
break;
}
}
placeIsTaken = false;
}
}