Untitled
unknown
csharp
9 months ago
2.8 kB
7
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