FarmingManager.cs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using Mirror;
  4. using UnityEngine;
  5. public class FarmingManager : NetworkBehaviour
  6. {
  7. public static FarmingManager instance;
  8. void Awake(){
  9. instance = this;
  10. }
  11. void Start()
  12. {
  13. if(!isServer){
  14. Destroy(this);
  15. }
  16. farmingItems = new List<FarmingPositionEntry>();
  17. foreach(FarmingSpawnPoints point in farmingPoints){
  18. for(int i=0; i < point.pointsParent.childCount; i++){
  19. farmingItems.Add(new FarmingPositionEntry(){prefab = point.prefab, spawnLocation = point.pointsParent.GetChild(i)});
  20. }
  21. }
  22. for(int i = 0; i<farmingItems.Count; i++ ){
  23. farmingItems[i].destroyedTime = -timeToReSpawn;
  24. }
  25. }
  26. public float timeToReSpawn = 180f;
  27. public List<FarmingSpawnPoints> farmingPoints;
  28. public List<FarmingPositionEntry> farmingItems;
  29. void Update()
  30. {
  31. for(int i = 0; i<farmingItems.Count; i++ ){
  32. FarmingPositionEntry farmingItem = farmingItems[i];
  33. if(farmingItem.spawnedItem == null ){
  34. if(Time.time - farmingItem.destroyedTime > timeToReSpawn ){
  35. Spawn(i);
  36. }
  37. }
  38. }
  39. }
  40. public void Spawn(int index){
  41. FarmingPositionEntry item = farmingItems[index];
  42. GameObject spawn = Instantiate(item.prefab , item.spawnLocation.position , Quaternion.identity);
  43. farmingItems[index].spawnedItem = spawn;
  44. NetworkServer.Spawn(spawn, NetworkConnectionToServer.LocalConnectionId);
  45. }
  46. public void DestroyItem(GameObject item){
  47. int targetIndex =0;
  48. for(int i=0; i < farmingItems.Count; i++){
  49. if(farmingItems[i].spawnedItem == item){
  50. targetIndex = i;
  51. break;
  52. }
  53. }
  54. farmingItems[targetIndex].destroyedTime = Time.time;
  55. farmingItems[targetIndex].spawnedItem = null;
  56. NetworkServer.Destroy(item);
  57. }
  58. public void DestroyItemByID(uint itemNetId){
  59. Debug.Log("Destroying farming item " + itemNetId);
  60. int targetIndex = 0;
  61. for(int i =0; i < farmingItems.Count; i++){
  62. if(farmingItems[i].spawnedItem == null){continue;}
  63. if(farmingItems[i].spawnedItem.GetComponent<NetworkIdentity>().netId == itemNetId){
  64. targetIndex =i;
  65. farmingItems[i].spawnedItem.GetComponent<FarmItem>().DestroySelf();
  66. break;
  67. }
  68. }
  69. farmingItems[targetIndex].destroyedTime = Time.time;
  70. farmingItems[targetIndex].spawnedItem = null;
  71. }
  72. }
  73. [System.Serializable]
  74. public class FarmingPositionEntry{
  75. public Transform spawnLocation;
  76. public GameObject prefab;
  77. public GameObject spawnedItem;
  78. public float destroyedTime;
  79. }
  80. [System.Serializable]
  81. public class FarmingSpawnPoints{
  82. public Transform pointsParent;
  83. public GameObject prefab;
  84. }