mmorpg2d/Assets/Script/FarmingManager.cs
2025-06-07 23:53:54 +05:30

103 lines
2.9 KiB
C#

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<FarmingPositionEntry>();
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<farmingItems.Count; i++ ){
farmingItems[i].destroyedTime = -timeToReSpawn;
}
}
public float timeToReSpawn = 180f;
public List<FarmingSpawnPoints> farmingPoints;
public List<FarmingPositionEntry> farmingItems;
void Update()
{
for(int i = 0; i<farmingItems.Count; i++ ){
FarmingPositionEntry farmingItem = farmingItems[i];
if(farmingItem.spawnedItem == null ){
if(Time.time - farmingItem.destroyedTime > 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<NetworkIdentity>().netId == itemNetId){
targetIndex =i;
farmingItems[i].spawnedItem.GetComponent<FarmItem>().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;
}