using System; using System.Collections; using System.Collections.Generic; using BitStrap; using UnityEngine; public class FishDelaySpawner : MonoBehaviour { [Serializable] public struct stFish { public FishSpawner fishSpawner; public stFish(FishSpawner fishSpawner_) { fishSpawner = fishSpawner_; } } [ReadOnly] public List fishes = new List(); public int maxSpawnPerFrame = 5; private bool spawnIsRun; private static FishDelaySpawner instance; public bool isLock; public static FishDelaySpawner Instance { get { if (!instance) { instance = UnityEngine.Object.FindObjectOfType(); } return instance; } } private void Update() { if (fishes.Count > 0 && !spawnIsRun) { spawnIsRun = true; StartCoroutine(SpawnAllFish(0.1f)); } } public IEnumerator SpawnAllFish(float delay) { while (fishes.Count > 0) { while (isLock) { yield return 0.001f; } isLock = true; Debug.Log("JKM spawn num fish " + fishes.Count + "_start at " + Time.time); List fishes2 = fishes; fishes = new List(); isLock = false; foreach (stFish item in fishes2) { Fish fish = item.fishSpawner.SpawnFish(); fish.Initialize(); yield return 0.5f; } Debug.Log("JKM spawn end at " + Time.time); } spawnIsRun = false; } public void AddFish(FishSpawner fishSpawner_) { fishes.Add(new stFish(fishSpawner_)); } }