using System.Collections; using System.Collections.Generic; using Mirror; using UnityEngine; public class FarmingManager : NetworkBehaviour { public static FarmingManager instance; void Awake(){ instance = this; } void Start() { if(!isServer){ Destroy(this); } farmingItems = new List(); foreach(FarmingSpawnPoints point in farmingPoints){ for(int i=0; i < point.pointsParent.childCount; i++){ farmingItems.Add(new FarmingPositionEntry(){prefab = point.prefab, spawnLocation = point.pointsParent.GetChild(i)}); } } for(int i = 0; i farmingPoints; public List farmingItems; void Update() { for(int i = 0; i timeToReSpawn ){ Spawn(i); } } } } public void Spawn(int index){ FarmingPositionEntry item = farmingItems[index]; GameObject spawn = Instantiate(item.prefab , item.spawnLocation.position , Quaternion.identity); farmingItems[index].spawnedItem = spawn; NetworkServer.Spawn(spawn, NetworkConnectionToServer.LocalConnectionId); } public void DestroyItem(GameObject item){ int targetIndex =0; for(int i=0; i < farmingItems.Count; i++){ if(farmingItems[i].spawnedItem == item){ targetIndex = i; break; } } farmingItems[targetIndex].destroyedTime = Time.time; farmingItems[targetIndex].spawnedItem = null; NetworkServer.Destroy(item); } public void DestroyItemByID(uint itemNetId){ Debug.Log("Destroying farming item " + itemNetId); int targetIndex = 0; for(int i =0; i < farmingItems.Count; i++){ if(farmingItems[i].spawnedItem == null){continue;} if(farmingItems[i].spawnedItem.GetComponent().netId == itemNetId){ targetIndex =i; farmingItems[i].spawnedItem.GetComponent().DestroySelf(); break; } } farmingItems[targetIndex].destroyedTime = Time.time; farmingItems[targetIndex].spawnedItem = null; } } [System.Serializable] public class FarmingPositionEntry{ public Transform spawnLocation; public GameObject prefab; public GameObject spawnedItem; public float destroyedTime; } [System.Serializable] public class FarmingSpawnPoints{ public Transform pointsParent; public GameObject prefab; }