Untitled
unknown
csharp
2 months ago
2.8 kB
6
Indexable
using System; using System.Collections.Generic; using UnityEngine; public class BuildingManager : MonoBehaviour { public static BuildingManager Instance; [SerializeField] private List<BuildingObject> buildingDatabase = new List<BuildingObject>(); private Dictionary<string, BuildingObject> _buildingCache; public List<BuildingObject> GetBuildings() { return buildingDatabase; } public void Awake() { Instance = this; InitializeBuildingCache(); } private void InitializeBuildingCache() { _buildingCache = new Dictionary<string, BuildingObject>(); foreach (var building in buildingDatabase) { if (_buildingCache.ContainsKey(building.BuildingID)) { Debug.LogError($"Duplicate building ID: {building.BuildingID}"); continue; } _buildingCache.Add(building.BuildingID, building); } } public BuildingObject GetBuildingByID(string buildingID) { if (string.IsNullOrEmpty(buildingID)) { Debug.LogError("Attempted to search with null/empty ID"); return null; } if (_buildingCache.TryGetValue(buildingID, out var building)) { return building; } Debug.LogWarning($"Building with ID '{buildingID}' not found!"); return null; } public readonly List<IBuilding> CurrentBuildings = new List<IBuilding>(); //Постройка объекта в клетке public void BuildBuilding(BuildingObject buildingObject, GridCell gridCell) { var building = Instantiate(buildingObject.Prefab, gridCell.transform.position, Quaternion.identity); building.transform.SetParent(gridCell.transform); gridCell.currentObject = building; RegisterBuilding(building.GetComponent<IBuilding>()); } //Уничтожение клетки public void DestroyBuilding(GridCell gridCell) { if (gridCell.currentObject == null) { Debug.LogWarning("Клетка пустая."); return; }; var building = gridCell.currentObject; gridCell.currentObject = null; UnregisterBuilding(building.GetComponent<IBuilding>()); Destroy(building.gameObject); } private void RegisterBuilding(IBuilding building) { if (!CurrentBuildings.Contains(building)) { CurrentBuildings.Add(building); } } private void UnregisterBuilding(IBuilding building) { if (CurrentBuildings.Contains(building)) { CurrentBuildings.Remove(building); } } }
Editor is loading...
Leave a Comment