using UnityEngine; // Модуль Экономики: временная добыча по клику (уйдёт в этапе 3 -- производство через рабочих). public class ResourceCollector : MonoBehaviour, ILeveledBuilding { // Уровень здания для Поселения (оно сохраняет уровни, не зная, что это за здание) public int Level { get => level; set => level = value; } [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; } public float GetCurrentStock() { return currentStock; } public float GetMaxCapacity() { return maxCapacity; } void OnMouseDown() { if (UIBlocker.IsPointerOverUI()) return; // клик по панели HUD не должен собирать ресурс под ней if (isRecharging) { Debug.Log($"[КЛИК] {gameObject.name}: уже идёт восстановление, ждём."); return; } if (currentStock > 0) { float reward = currentStock; // берём всё, что накопилось _manager.AddResource(resourceType, reward); currentStock = 0f; Debug.Log($"[СБОР] Получено {reward:F1} {resourceType}. Запас сброшен в 0."); StartCoroutine(RechargeRoutine()); } else { Debug.Log($"[КЛИК] {gameObject.name} пуст, запускаем восстановление."); 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}"); } }