Files
MVP1/Assets/Scripts/Modules/Core/Events/GameEvents.cs
T

197 lines
8.4 KiB
C#
Raw Normal View History

// События, которыми модули сообщают друг другу о случившемся.
// Событие -- это факт в прошедшем времени ("ресурс изменился"), а не просьба что-то сделать.
// Добавляя событие, впиши его в документ модуля-отправителя (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;
}
// Расчёт игры (модуль Населения: добыча, еда, прирост) дошёл до момента UnixNow (04.11).
// Приходит в начале каждого шага расчёта (раз в 10 игровых минут офлайна) и в конце каждого Tick.
// Всё, что должно случиться по времени (стройка закончилась), применяется здесь -- тогда следующий шаг
// уже считается с новым городом, и добыча идёт ровно с момента завершения, а не с начала офлайна.
public struct GameTimeSimulatedEvent
{
public long UnixNow;
}
// ---------------- Население ----------------
// Число людей изменилось (прирост, загрузка, сброс, изменение войска)
public struct PopulationChangedEvent
{
public int Total;
public int Civilians;
public int Soldiers;
public int HousingCap;
}
// Рабочих переставили (окно "Рабочие", автоматическое заполнение новых мест)
public struct WorkersChangedEvent
{
public int Workers;
public int FreeWorkers;
}
// Голод начался (IsStarving = true) или закончился
public struct StarvationChangedEvent
{
public bool IsStarving;
}
// ---------------- Армия ----------------
// Число воинов изменилось (обучение, потери, поход, возвращение, загрузка)
public struct TroopsChangedEvent
{
public int AtHome;
public int InMarches;
2026-10-27 16:54:49 +01:00
public int Garrison; // из AtHome -- в гарнизоне
public int Wounded; // раненые: в госпитале или ждут места (не в AtHome)
}
// Раненые вылечены и вернулись в город. Один раз на группу лечения (BatchId), TimeMs -- когда закончили
public struct SoldiersHealedEvent
{
public int BatchId;
public int Type;
public int Count;
public long TimeMs;
}
// Заказ обучения закончен: воины уже в Армии. Приходит один раз на заказ (OrderId), TimeMs -- когда был готов
public struct TroopsTrainedEvent
{
public int OrderId;
public int Type;
public int Count;
public long TimeMs;
}
// ---------------- Глобальный мир ----------------
// У событий похода -- номер похода и точное время по часам игры (документ 02 комплекта от 29.10.2026):
// TimeMs -- когда это случилось, а не когда игра это заметила (после офлайна это разные моменты).
public struct MarchStartedEvent
{
public int MarchId;
public long TimeMs; // выступление
public string TargetId;
public int Soldiers;
public bool IsScout; // поход «Разведка»: без боя и добычи
}
public struct MarchBattleResolvedEvent
{
public int MarchId;
public long BattleId; // номер боя (= Seed): по нему бой можно перепроверить
public long TimeMs; // приход к цели и бой
public string TargetId;
public bool Victory;
public int Soldiers;
public int Survivors;
}
public struct MarchReturnedEvent
{
public int MarchId;
public long TimeMs; // возвращение домой
public bool Victory;
public int Survivors;
public int Sent; // сколько воинов уходило в поход
public bool TargetEmpty; // лагерь уже был разбит / ресурсной точки уже не было: боя и сбора не было, вернулись все
public bool IsGather; // поход на ресурсную точку (сбор, а не бой)
public bool IsScout; // поход «Разведка»: дошли до цели и вернулись, боя и добычи нет
public int Wounded; // раненых привезли домой -- они в госпитале (или ждут места)
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 { }
// ---------------- Мир -> Разведка ----------------
// Мир сейчас продвинет время до ToMs: разведка успевает досчитать наблюдение по армиям, которые ещё на карте
// (после продвижения вернувшиеся походы исчезают). Публикует MarchManager перед каждым расчётом мира.
public struct WorldAdvancingEvent
{
public long ToMs;
}
// ---------------- Разведка ----------------
// У всех событий -- устойчивый номер события (армия + номер наблюдения) и время по часам игры (ТЗ разведки, раздел 10)
public struct ArmySpottedEvent // чужая армия вошла в зону обзора
{
public string EventId;
public string ArmyId;
public long TimeMs;
public int ApproxMin, ApproxMax;
}
public struct ArmyLostContactEvent // чужая армия вышла из зоны обзора -- остаётся метка последнего контакта
{
public string EventId;
public string ArmyId;
public long TimeMs;
}
public struct ArmyIdentifiedEvent // владелец чужой армии опознан
{
public string EventId;
public string ArmyId;
public string OwnerId;
public long TimeMs;
}