2025-09-01 05:03:00 +05:00
|
|
|
|
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;
|
|
|
|
|
|
2025-09-04 12:13:13 +05:00
|
|
|
|
// 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<6F>t run.
|
2025-09-01 05:03:00 +05:00
|
|
|
|
if (hazardTimer >= hazardInterval)
|
|
|
|
|
{
|
|
|
|
|
SpawnHazard();
|
|
|
|
|
hazardTimer = 0f;
|
2025-09-04 12:13:13 +05:00
|
|
|
|
return; // ensure only one spawn per frame
|
2025-09-01 05:03:00 +05:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (itemTimer >= itemInterval)
|
|
|
|
|
{
|
|
|
|
|
SpawnItem();
|
|
|
|
|
itemTimer = 0f;
|
2025-09-04 12:13:13 +05:00
|
|
|
|
return; // ensure only one spawn per frame
|
2025-09-01 05:03:00 +05:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SpawnHazard()
|
|
|
|
|
{
|
2025-09-04 12:13:13 +05:00
|
|
|
|
int roll = Random.Range(0, 4);
|
|
|
|
|
GameObject prefab = null;
|
2025-09-01 05:03:00 +05:00
|
|
|
|
switch (roll)
|
|
|
|
|
{
|
2025-09-04 12:13:13 +05:00
|
|
|
|
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;
|
2025-09-01 05:03:00 +05:00
|
|
|
|
}
|
2025-09-04 12:13:13 +05:00
|
|
|
|
if (!prefab) return;
|
|
|
|
|
|
|
|
|
|
GameObject go;
|
|
|
|
|
if (prefab == shockZonePrefab || prefab == cubeLidPrefab)
|
|
|
|
|
go = Instantiate(prefab, GetRandomPos(), Quaternion.identity);
|
|
|
|
|
else
|
|
|
|
|
go = Instantiate(prefab);
|
|
|
|
|
|
|
|
|
|
// Ensure it<69>s marked so ActiveCount blocks further spawns
|
|
|
|
|
if (!go.GetComponent<CubeClash_HazardMarker>())
|
|
|
|
|
go.AddComponent<CubeClash_HazardMarker>();
|
2025-09-01 05:03:00 +05:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SpawnItem()
|
|
|
|
|
{
|
|
|
|
|
int roll = Random.Range(0, 2);
|
2025-09-04 12:13:13 +05:00
|
|
|
|
GameObject prefab = null;
|
2025-09-01 05:03:00 +05:00
|
|
|
|
switch (roll)
|
|
|
|
|
{
|
2025-09-04 12:13:13 +05:00
|
|
|
|
case 0: prefab = blueberryPrefab; break;
|
|
|
|
|
case 1: prefab = timeBombPrefab; break;
|
2025-09-01 05:03:00 +05:00
|
|
|
|
}
|
2025-09-04 12:13:13 +05:00
|
|
|
|
if (!prefab) return;
|
|
|
|
|
|
|
|
|
|
GameObject go = Instantiate(prefab);
|
|
|
|
|
|
|
|
|
|
// Reuse the SAME marker for items too
|
|
|
|
|
if (!go.GetComponent<CubeClash_HazardMarker>())
|
|
|
|
|
go.AddComponent<CubeClash_HazardMarker>();
|
2025-09-01 05:03:00 +05:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Vector3 GetRandomPos()
|
|
|
|
|
{
|
|
|
|
|
return new Vector3(Random.Range(-3f, 3f), 1f, Random.Range(-3f, 3f));
|
|
|
|
|
}
|
|
|
|
|
}
|