using System.Linq;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class spawn2 : MonoBehaviour
{
public GameObject[] objectToSpawn;
public GameObject Money;
public bool spawn = true;
public float spawnTime = .2f;
public float percentMoney = .1f;
public float percentDoubleSpawn = .5f;
bool doubleSpawned = false;
public float minY = -1.05f;
public float maxY = 1.05f;
public float minDistance = .5f;
public float minYDistance;
public float minXDistance;
float lastSpawnPosition = -100;
float nextSpawnTime = 0;
int numMeteorites = 0;
int cachedSpawns = 5;
Queue<GameObject> recentlySpawned = new Queue<GameObject>();
float minSpawnDistance = 1f;
private void Update()
{
if (nextSpawnTime > 0)
{
nextSpawnTime -= Time.deltaTime;
return;
}
Vector3 newPos = new Vector3(3, Random.Range(minY, maxY), 0);
float[] steps = new[] { -0.1f, 0.1f };
float stepSize = steps[Random.Range(0, steps.Length)];
bool jumped = false;
while (recentlySpawned.Select(x => (Mathf.Abs(x.transform.position.x - newPos.x) > minXDistance || Mathf.Abs(x.transform.position.y - newPos.y) > minYDistance)).Contains(false))
{
newPos.y += stepSize;
if (newPos.y < minY)
{
newPos.y = maxY;
if (jumped) return;
jumped = true;
}
if (newPos.y > maxY)
{
newPos.y = minY;
if (jumped) return;
jumped = true;
}
}
Debug.Log(newPos.y);
int rdm = Random.Range(0, objectToSpawn.Length);
GameObject toSpawn = objectToSpawn[rdm];
if (Random.Range(0, 1f) < percentMoney) toSpawn = Money;
GameObject m = Instantiate(toSpawn, newPos, Quaternion.identity);
dpl_droite meteorite = m.GetComponent<dpl_droite>();
if (meteorite != null) meteorite.number = numMeteorites++;
if (recentlySpawned.Count == cachedSpawns) recentlySpawned.Dequeue();
recentlySpawned.Enqueue(m);
if (!doubleSpawned && Random.Range(0, 1f) < percentDoubleSpawn)
{
nextSpawnTime = spawnTime * Random.Range(.5f, .1f);
doubleSpawned = true;
}
else
{
nextSpawnTime = spawnTime * Random.Range(.5f, 1.1f);
doubleSpawned = false;
}
}
}