using PashaBibko.Pacore.Attributes; using System.Collections.Generic; using Fruitomation.Game.Items; using Fruitomation.Global; using UnityEngine; namespace Fruitomation.Game { public class FruitSpawner : MonoBehaviour { [Header("Settings")] [SerializeField] private int MaxSpawned; [SerializeField] private float MinSpawnTime; [SerializeField] private float MaxSpawnTime; [Header("References")] [SerializeField] private Transform FruitSpawnParent; [SerializeField] private Canvas GameCanvas; [Header("Prefabs")] [SerializeField] private GameObject ApplePrefab; [SerializeField] private GameObject GrapePrefab; [SerializeField] private GameObject BananaPrefab; [SerializeField] private GameObject MangoPrefab; [SerializeField] private GameObject DurianPrefab; [SerializeField] private GameObject PitayaPrefab; [SerializeField] private GameObject KiwiPrefab; [SerializeField] private GameObject BuddhasHandPrefab; [Header("Read only")] [SerializeField, InspectorReadOnly] private List ActiveFruits; private float TimeUntilNextSpawn; private void Update() { if (ActiveFruits.Count <= MaxSpawned && GameStateController.Is(GameState.Simulation)) { TimeUntilNextSpawn -= Time.deltaTime; if (TimeUntilNextSpawn <= 0f) { TimeUntilNextSpawn = Random.Range(MinSpawnTime, MaxSpawnTime); SpawnFruit(); } } } private void SpawnFruit() { List unlocked = new() { ApplePrefab }; if (UpgradeManager.Is(BasicUpgrade.Grapes)) unlocked.Add(GrapePrefab); if (UpgradeManager.Is(BasicUpgrade.Bananas)) unlocked.Add(BananaPrefab); if (UpgradeManager.Is(BasicUpgrade.Kiwi)) unlocked.Add(KiwiPrefab); if (UpgradeManager.Is(BasicUpgrade.Mangoes)) unlocked.Add(MangoPrefab); if (UpgradeManager.Is(BasicUpgrade.Durian)) unlocked.Add(DurianPrefab); if (UpgradeManager.Is(BasicUpgrade.BuddhasHand)) unlocked.Add(BuddhasHandPrefab); if (UpgradeManager.Is(BasicUpgrade.Pitayas)) unlocked.Add(PitayaPrefab); GameObject prefab = unlocked[Random.Range(0, unlocked.Count)]; GameObject go = Instantiate(prefab, FruitSpawnParent); FruitBehaviour behaviour = go.GetComponent(); Debug.Assert(behaviour is not null, "Could not find FruitBehaviour"); ActiveFruits.Add(behaviour); behaviour.InitBehaviour(GameCanvas); } public void RemoveFruit(FruitBehaviour fruit) => ActiveFruits.Remove(fruit); } }