обавлена click-to-collect механика, World Space Canvas над зданиями
This commit is contained in:
@@ -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++;
|
||||
|
||||
Reference in New Issue
Block a user