обавлена click-to-collect механика, World Space Canvas над зданиями

This commit is contained in:
2026-09-05 14:10:05 +03:00
parent f572d35064
commit bd088aaf54
6 changed files with 10137 additions and 308 deletions
+40 -25
View File
@@ -1,5 +1,6 @@
using UnityEngine;
using System.Collections;
using System;
public class ResourceCollector : MonoBehaviour
{
@@ -48,49 +49,63 @@ public class ResourceCollector : MonoBehaviour
void OnMouseDown()
{
if (currentStock <= 0)
{
Debug.Log($"[КЛИК] {gameObject.name} пуст. Идет восстановление...");
return;
}
// Если уже идёт восстановление — ничего не делаем
if (isRecharging)
{
Debug.Log($"[КЛИК] {gameObject.name}: уже идёт восстановление, ждём.");
return;
}
// Если запас есть — забираем ресурсы
if (currentStock > 0)
{
float finalAmount = amountPerClick * Mathf.Pow(perLevelMultiplier, level - 1);
// Отдаем всё, что накопилось
float reward = currentStock;
float reward = currentStock; // берём всё, что накопилось
_manager.AddResource(resourceType, reward);
// СБРОС В НОЛЬ
currentStock = 0f;
Debug.Log($"[СБОР] Получено {reward:F1} {resourceType}. Запас сброшен в 0.");
// Сразу запускаем восстановление после сбора
if (!isRecharging)
{
StartCoroutine(RechargeRoutine());
}
}
else
{
// Если запаса нет и восстановление ещё не запущено — запускаем его
Debug.Log($"[КЛИК] {gameObject.name} пуст, запускаем восстановление.");
if (!isRecharging)
{
StartCoroutine(RechargeRoutine());
}
}
}
System.Collections.IEnumerator RechargeRoutine()
{
if (isRecharging) yield break;
isRecharging = true;
{
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} полностью заполнен!");
float rechargeRate = 5f; // единиц в секунду
float timeToFill = (maxCapacity - currentStock) / rechargeRate;
float elapsed = 0f;
while (elapsed < timeToFill)
{
elapsed += Time.deltaTime;
float progress = Mathf.Clamp01(elapsed / timeToFill);
currentStock = Mathf.Lerp(currentStock, maxCapacity, progress);
yield return null;
}
currentStock = maxCapacity;
isRecharging = false;
Debug.Log($"[ГОТОВО] {gameObject.name} полностью заполнен!");
}
public void Upgrade()
{
level++;