Добавлены префабы построек, BuildManager, BuildMenuUI и скрипт камеры
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user