2026-09-20 22:01:09 +03:00
|
|
|
using UnityEngine;
|
|
|
|
|
|
|
|
|
|
// Вешается на объект Ратуши, который уже стоит на карте.
|
|
|
|
|
// Хранит текущий уровень -- от него зависит, какие здания разблокированы в BuildManager.
|
|
|
|
|
|
|
|
|
|
public class TownHall : MonoBehaviour
|
|
|
|
|
{
|
|
|
|
|
public static TownHall Instance { get; private set; }
|
|
|
|
|
|
|
|
|
|
[Header("Уровень")]
|
|
|
|
|
public int currentLevel = 1;
|
|
|
|
|
public int maxLevel = 10;
|
|
|
|
|
|
|
|
|
|
[Header("Стоимость апгрейда (растёт с каждым уровнем)")]
|
|
|
|
|
public ResourceCost[] baseUpgradeCost;
|
|
|
|
|
[Tooltip("Во сколько раз дорожает апгрейд за каждый следующий уровень")]
|
|
|
|
|
public float costMultiplierPerLevel = 1.5f;
|
|
|
|
|
|
|
|
|
|
void Awake()
|
|
|
|
|
{
|
|
|
|
|
if (Instance != null && Instance != this)
|
|
|
|
|
{
|
|
|
|
|
Destroy(gameObject);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
Instance = this;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Стоимость апгрейда на текущем уровне (растёт по экспоненте)
|
|
|
|
|
public ResourceCost[] GetUpgradeCost()
|
|
|
|
|
{
|
|
|
|
|
ResourceCost[] scaled = new ResourceCost[baseUpgradeCost.Length];
|
|
|
|
|
float multiplier = Mathf.Pow(costMultiplierPerLevel, currentLevel - 1);
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < baseUpgradeCost.Length; i++)
|
|
|
|
|
{
|
|
|
|
|
scaled[i] = new ResourceCost
|
|
|
|
|
{
|
|
|
|
|
type = baseUpgradeCost[i].type,
|
|
|
|
|
amount = baseUpgradeCost[i].amount * multiplier
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
return scaled;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public bool CanUpgrade()
|
|
|
|
|
{
|
|
|
|
|
if (currentLevel >= maxLevel) return false;
|
|
|
|
|
if (ResourceManager.Instance == null) return false;
|
|
|
|
|
|
|
|
|
|
foreach (var c in GetUpgradeCost())
|
|
|
|
|
{
|
|
|
|
|
if (!ResourceManager.Instance.HasEnough(c.type, c.amount))
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void Upgrade()
|
|
|
|
|
{
|
|
|
|
|
if (!CanUpgrade())
|
|
|
|
|
{
|
|
|
|
|
Debug.Log("[РАТУША] Не хватает ресурсов на апгрейд или максимальный уровень.");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
foreach (var c in GetUpgradeCost())
|
|
|
|
|
{
|
|
|
|
|
ResourceManager.Instance.TrySpend(c.type, c.amount);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
currentLevel++;
|
|
|
|
|
Debug.Log($"[РАТУША] Улучшена до уровня {currentLevel}!");
|
|
|
|
|
}
|
|
|
|
|
void OnMouseDown()
|
|
|
|
|
{
|
2026-10-12 23:54:03 +03:00
|
|
|
if (UIBlocker.IsPointerOverUI()) return; // клик по панели HUD не должен улучшать Ратушу под ней
|
2026-09-20 22:01:09 +03:00
|
|
|
Debug.Log($"[Ратуша] Клик! текущий уровень: {currentLevel}. Улучшение...");
|
|
|
|
|
Upgrade();
|
|
|
|
|
}
|
|
|
|
|
}
|