2026-09-10 21:26:19 +03:00
|
|
|
using UnityEngine;
|
|
|
|
|
[System.Serializable]
|
|
|
|
|
public class ResourceCost
|
|
|
|
|
{
|
|
|
|
|
public ResourceType type;
|
|
|
|
|
public float amount;
|
|
|
|
|
}
|
|
|
|
|
[CreateAssetMenu(fileName = "NewBuilding", menuName = "Game/Building Data")]
|
|
|
|
|
public class BuildingData : ScriptableObject
|
|
|
|
|
{
|
|
|
|
|
[Header("Основное")]
|
|
|
|
|
public string buildingName;
|
|
|
|
|
public Sprite icon;
|
|
|
|
|
public GameObject prefab;
|
|
|
|
|
|
|
|
|
|
[Header("Требования")]
|
|
|
|
|
[Tooltip("Необходимый уровень ратуши")]
|
2026-09-20 22:01:09 +03:00
|
|
|
public int requiredTownHallLevel = 1;
|
2026-09-10 21:26:19 +03:00
|
|
|
|
|
|
|
|
[Header("Стоимость")]
|
|
|
|
|
public ResourceCost[] cost;
|
|
|
|
|
|
2026-10-19 18:39:28 +02:00
|
|
|
// Проверка - хватает ли ресурсов? (только проверяет)
|
|
|
|
|
// Ресурсы -- модуль Экономики, поэтому только через контракт IEconomy
|
|
|
|
|
public bool CanAfford()
|
2026-09-10 21:26:19 +03:00
|
|
|
{
|
2026-10-19 18:39:28 +02:00
|
|
|
return GameServices.TryGet(out IEconomy economy) && economy.CanAfford(ToAmounts(cost));
|
2026-09-10 21:26:19 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Списывает стоимость постройки. Вызывать только после CanAfford() == true
|
|
|
|
|
public void PayCost()
|
|
|
|
|
{
|
2026-10-19 18:39:28 +02:00
|
|
|
if (GameServices.TryGet(out IEconomy economy)) economy.TrySpend(ToAmounts(cost));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static ResourceAmount[] ToAmounts(ResourceCost[] costs)
|
|
|
|
|
{
|
|
|
|
|
var result = new ResourceAmount[costs?.Length ?? 0];
|
|
|
|
|
for (int i = 0; i < result.Length; i++) result[i] = new ResourceAmount(costs[i].type, costs[i].amount);
|
|
|
|
|
return result;
|
2026-09-10 21:26:19 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Текст стоимости для UI, например "50 Wood, 20 Stone"
|
|
|
|
|
public string GetCostText()
|
|
|
|
|
{
|
|
|
|
|
string result = "";
|
|
|
|
|
for (int i = 0; i < cost.Length; i++)
|
|
|
|
|
{
|
|
|
|
|
result += $"{cost[i].amount} {cost[i].type}";
|
|
|
|
|
if (i < cost.Length - 1) result += ", ";
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
}
|