using UnityEngine; public class CubeClash_HazardManager : MonoBehaviour { [Header("Hazards")] public GameObject windGustPrefab; public GameObject birdPrefab; public GameObject butterflyPrefab; public GameObject cubeLidPrefab; public GameObject shockZonePrefab; [Header("Items")] public GameObject blueberryPrefab; public GameObject timeBombPrefab; [Header("Timing")] public float hazardInterval = 5f; public float itemInterval = 8f; private float hazardTimer; private float itemTimer; void Update() { hazardTimer += Time.deltaTime; itemTimer += Time.deltaTime; // If ANY occupant (hazard or item) exists, do not spawn anything. if (CubeClash_HazardMarker.ActiveCount > 0) return; // Try hazard first (your original order). If both timers are ready the same frame, // the first spawn will add a marker immediately, so the item block won’t run. if (hazardTimer >= hazardInterval) { SpawnHazard(); hazardTimer = 0f; return; // ensure only one spawn per frame } if (itemTimer >= itemInterval) { SpawnItem(); itemTimer = 0f; return; // ensure only one spawn per frame } } void SpawnHazard() { int roll = Random.Range(0, 4); GameObject prefab = null; switch (roll) { case 0: prefab = windGustPrefab; break; case 1: prefab = birdPrefab; break; case 2: prefab = butterflyPrefab; break; case 3: prefab = shockZonePrefab; break; //case 4: prefab = cubeLidPrefab; break; } if (!prefab) return; GameObject go; if (prefab == shockZonePrefab || prefab == cubeLidPrefab) go = Instantiate(prefab, GetRandomPos(), Quaternion.identity); else go = Instantiate(prefab); // Ensure it’s marked so ActiveCount blocks further spawns if (!go.GetComponent()) go.AddComponent(); } void SpawnItem() { int roll = Random.Range(0, 2); GameObject prefab = null; switch (roll) { case 0: prefab = blueberryPrefab; break; case 1: prefab = timeBombPrefab; break; } if (!prefab) return; GameObject go = Instantiate(prefab); // Reuse the SAME marker for items too if (!go.GetComponent()) go.AddComponent(); } Vector3 GetRandomPos() { return new Vector3(Random.Range(-3f, 3f), 1f, Random.Range(-3f, 3f)); } }