- Ядро (Bogatyri.Core): контракты модулей, EventBus, GameServices, SaveRegistry - Модули: Экономика, Поселение, Армия, Глобальный мир, Боевая система, Сохранения (каждый — отдельный asmdef, видит только ядро) - App/GameModules: регистрация модулей и связь с GameProgress/Казармами - Сохранения v2 по секциям модулей, перенос старого save.json и походов из progress.json - Сброс сохранений: ISaveSystem.ResetAll, ResetState у модулей, меню Tools - EditMode-тесты модулей, документы по каждому модулю с журналом изменений Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
56 lines
2.2 KiB
C#
56 lines
2.2 KiB
C#
using UnityEngine;
|
|
|
|
// Вешается на ЛЮБОЕ здание (лесопилка, каменоломня, шахта) -- настраиваешь
|
|
// в Inspector, какой ресурс и сколько оно производит. Один скрипт на все типы построек.
|
|
//
|
|
// ПРИМЕР НАСТРОЙКИ:
|
|
// Лесопилка: resourceType = Wood, amountPerTick = 5, tickInterval = 3
|
|
// Каменоломня: resourceType = Stone, amountPerTick = 4, tickInterval = 3
|
|
// Шахта: resourceType = Iron, amountPerTick = 2, tickInterval = 4 (руда добывается медленнее)
|
|
|
|
public class ResourceProducer : MonoBehaviour
|
|
{
|
|
[Header("Что производит это здание")]
|
|
public ResourceType resourceType;
|
|
public float amountPerTick = 1f;
|
|
public float tickInterval = 3f; // секунд между "тиками" производства
|
|
|
|
[Header("Уровень здания (для будущего апгрейда)")]
|
|
public int level = 1;
|
|
[Tooltip("Множитель производства за каждый уровень выше первого")]
|
|
public float perLevelMultiplier = 1.2f;
|
|
|
|
private float timer;
|
|
|
|
void Update()
|
|
{
|
|
timer += Time.deltaTime;
|
|
|
|
if (timer >= tickInterval)
|
|
{
|
|
timer -= tickInterval;
|
|
Produce();
|
|
}
|
|
}
|
|
|
|
void Produce()
|
|
{
|
|
if (ResourceManager.Instance == null)
|
|
{
|
|
Debug.LogWarning($"{gameObject.name}: ResourceManager.Instance не найден. " +
|
|
"Убедись, что на сцене есть объект с компонентом ResourceManager.");
|
|
return;
|
|
}
|
|
|
|
float finalAmount = amountPerTick * Mathf.Pow(perLevelMultiplier, level - 1);
|
|
ResourceManager.Instance.AddResource(resourceType, finalAmount);
|
|
Debug.Log($"{gameObject.name} произвел {finalAmount} {resourceType}. Итого: {ResourceManager.Instance.GetResource(resourceType)}");
|
|
}
|
|
|
|
// Вызывай при апгрейде здания (кнопка "улучшить" повесишь позже)
|
|
public void Upgrade()
|
|
{
|
|
level++;
|
|
}
|
|
}
|