99 lines
2.8 KiB
C#
99 lines
2.8 KiB
C#
using UnityEngine;
|
||||
|
|
using System.Collections;
|
|||
|
|
|
|||
|
|
public class ResourceCollector : MonoBehaviour
|
|||
|
|
{
|
|||
|
|
[Header("Что производит это здание")]
|
|||
|
|
public ResourceType resourceType;
|
|||
|
|
|
|||
|
|
[Tooltip("База награды за клик (используется для расчета множителя уровня)")]
|
|||
|
|
public float amountPerClick = 10f;
|
|||
|
|
|
|||
|
|
[Header("Параметры хранилища")]
|
|||
|
|
[Tooltip("Максимальная вместимость")]
|
|||
|
|
public float maxCapacity = 100f;
|
|||
|
|
|
|||
|
|
[Tooltip("Текущий запас (меняется автоматически)")]
|
|||
|
|
public float currentStock = 0f;
|
|||
|
|
|
|||
|
|
[Header("Уровень здания")]
|
|||
|
|
public int level = 1;
|
|||
|
|
public float perLevelMultiplier = 1.2f;
|
|||
|
|
|
|||
|
|
private ResourceManager _manager;
|
|||
|
|
private bool isRecharging = false;
|
|||
|
|
|
|||
|
|
void Awake()
|
|||
|
|
{
|
|||
|
|
_manager = ResourceManager.Instance;
|
|||
|
|
if (_manager == null)
|
|||
|
|
{
|
|||
|
|
Debug.LogError($"{gameObject.name}: ResourceManager не найден!");
|
|||
|
|
enabled = false;
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
currentStock = 0f;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// НОВЫЙ МЕТОД: Чтобы UI мог спрашивать: "Сколько там сейчас?"
|
|||
|
|
public float GetCurrentStock()
|
|||
|
|
{
|
|||
|
|
return currentStock;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public float GetMaxCapacity()
|
|||
|
|
{
|
|||
|
|
return maxCapacity;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void OnMouseDown()
|
|||
|
|
{
|
|||
|
|
if (currentStock <= 0)
|
|||
|
|
{
|
|||
|
|
Debug.Log($"[КЛИК] {gameObject.name} пуст. Идет восстановление...");
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
float finalAmount = amountPerClick * Mathf.Pow(perLevelMultiplier, level - 1);
|
|||
|
|
|
|||
|
|
// Отдаем всё, что накопилось
|
|||
|
|
float reward = currentStock;
|
|||
|
|
|
|||
|
|
_manager.AddResource(resourceType, reward);
|
|||
|
|
|
|||
|
|
// СБРОС В НОЛЬ
|
|||
|
|
currentStock = 0f;
|
|||
|
|
|
|||
|
|
Debug.Log($"[СБОР] Получено {reward:F1} {resourceType}. Запас сброшен в 0.");
|
|||
|
|
|
|||
|
|
if (!isRecharging)
|
|||
|
|
{
|
|||
|
|
StartCoroutine(RechargeRoutine());
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
System.Collections.IEnumerator RechargeRoutine()
|
|||
|
|
{
|
|||
|
|
if (isRecharging) yield break;
|
|||
|
|
isRecharging = true;
|
|||
|
|
|
|||
|
|
float rechargeRate = 5f; // Единиц в секунду
|
|||
|
|
|
|||
|
|
while (currentStock < maxCapacity)
|
|||
|
|
{
|
|||
|
|
currentStock += rechargeRate * Time.deltaTime;
|
|||
|
|
if (currentStock > maxCapacity) currentStock = maxCapacity;
|
|||
|
|
|
|||
|
|
yield return null;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
isRecharging = false;
|
|||
|
|
Debug.Log($"[ГОТОВО] {gameObject.name} полностью заполнен!");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void Upgrade()
|
|||
|
|
{
|
|||
|
|
level++;
|
|||
|
|
Debug.Log($"[АПГРЕЙД] Уровень {level}");
|
|||
|
|
}
|
|||
|
|
}
|