Files
MVP1/Assets/Scripts/Modules/Core/Events/GameEvents.cs
T
AlexanderandClaude Opus 5.5 4865b14ff2 Гарнизон города
Модуль Армии (Bogatyri.Army, без Unity):
- гарнизон — часть воинов в городе: защищает город и в походы не уходит, всего воинов столько же
- IArmy: GarrisonTotal, GetGarrison(type), AvailableForMarch, SetGarrison(count)
- гарнизон набирается по составу армии, не больше воинов в городе; после потерь обрезается по типам
- в поход уходят только свободные воины (TakeForMarch)
- сохранение: строка garrison= в секции army (старые сохранения — без гарнизона); сброс очищает
- TroopsChangedEvent.Garrison

Интерфейс:
- окно «Войска» в городе: карточка «Гарнизон города» (0, -10, -1, +1, +10, «Все»)
- карта мира: «Свободно / Гарнизон / В походе», ползунок похода и прогноз — только по свободным воинам
- понятная ошибка, если воины есть, но все в гарнизоне

Тест «один солдат в одном месте»: 30 воинов, 10 в гарнизон → 20 свободны, всего 30 (решение команды от 19.10.2026).
Документы Army, Core, World, README обновлены.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 16:54:49 +01:00

119 lines
4.1 KiB
C#

// События, которыми модули сообщают друг другу о случившемся.
// Событие -- это факт в прошедшем времени ("ресурс изменился"), а не просьба что-то сделать.
// Добавляя событие, впиши его в документ модуля-отправителя (Docs/Modules).
// ---------------- Экономика ----------------
public struct ResourceChangedEvent
{
public ResourceType Type;
public float Value;
}
// ---------------- Поселение ----------------
public struct BuildingPlacedEvent
{
public string BuildingName;
}
public struct TownHallLevelChangedEvent
{
public int Level;
}
// Поселение начинает восстанавливать здания из сохранения: самое время добавить в список стройки
// здания, которые появляются кодом (например, Казармы)
public struct SettlementRestoringEvent { }
// ---------------- Время ----------------
// Время игры промотано вперёд (отладочная панель). Модули досчитывают прошедшее время.
public struct GameTimeAdvancedEvent
{
public long Seconds;
public long UnixNow;
}
// ---------------- Население ----------------
// Число людей изменилось (прирост, загрузка, сброс, изменение войска)
public struct PopulationChangedEvent
{
public int Total;
public int Civilians;
public int Soldiers;
public int HousingCap;
}
// Голод начался (IsStarving = true) или закончился
public struct StarvationChangedEvent
{
public bool IsStarving;
}
// ---------------- Армия ----------------
// Число воинов изменилось (обучение, потери, поход, возвращение, загрузка)
public struct TroopsChangedEvent
{
public int AtHome;
public int InMarches;
public int Garrison; // из AtHome -- в гарнизоне
}
// ---------------- Глобальный мир ----------------
public struct MarchStartedEvent
{
public int MarchId;
public string TargetId;
public int Soldiers;
}
public struct MarchBattleResolvedEvent
{
public int MarchId;
public string TargetId;
public bool Victory;
public int Soldiers;
public int Survivors;
}
public struct MarchReturnedEvent
{
public int MarchId;
public bool Victory;
public int Survivors;
public int Sent; // сколько воинов уходило в поход
public bool TargetEmpty; // лагерь уже был разбит: боя не было, вернулись все
public string TargetName; // куда ходили ("Замок Змея Горыныча", имя соседа)
public string LootText; // добыча текстом: "+20 золота, +40 еды" или "нет"
}
// ---------------- Чат ----------------
// Новое сообщение в любом канале (своё или чужое)
public struct ChatMessageReceivedEvent
{
public ChatMessage Message;
}
// ---------------- Круг ----------------
// Игрок вступил в Круг или создал свой
public struct CircleJoinedEvent
{
public string CircleId;
public string CircleName;
public bool Created;
}
// Игрок вышел из Круга (Disbanded -- Круг распущен, игрок был в нём один)
public struct CircleLeftEvent
{
public string CircleId;
public string CircleName;
public bool Disbanded;
}
// ---------------- Сохранения ----------------
public struct GameLoadedEvent { }
// Файла сохранения нет -- это первая игра на устройстве (стартовые ресурсы, стартовое войско)
public struct NewGameStartedEvent { }
public struct GameSavedEvent { }
// Сохранения сброшены, все модули уже в состоянии новой игры
public struct GameResetEvent { }