Files
MVP1/Assets/Scripts/Construction of buildings/NewEmptyCSharpScript.cs
T

81 lines
2.5 KiB
C#
Raw Normal View History

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()
{
Debug.Log($"[Ратуша] Клик! текущий уровень: {currentLevel}. Улучшение...");
Upgrade();
}
}