# alexkol-v/xru1 architecture

> Architecture diagram of the GitHub repository alexkol-v/xru1, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-08-11). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/alexkol-v/xru1
- Repository: https://github.com/alexkol-v/xru1

## Overview

#### 1. Назначение и запуск
XRU1 — Windows-демо одиночной пошаговой тактики на Unreal Engine 5.7, построенное как вертикальный срез: меню → интро → хаб → обучение → миссия → результат. Стартовая карта — `Content/XRU1Game/Maps/L_MainMenu.umap`; хаб — `Content/XRU1Game/Maps/L_Hub.umap`; боевая карта и сценарные субуровни — `Content/XRU1Game/Maps/Main_Map_Showreel.umap`, `Content/XRU1Game/Maps/SubLavel/`.

Код собирается в UE C++-модуль `Source/XRU1/XRU1.Build.cs`; проектный вход — `XRU1.uproject`, Windows targets — `Source/XRU1.Target.cs` и `Source/XRU1Editor.Target.cs`.

#### 2. Тактическое ядро и жизненный цикл хода
`UTurnManagerSubsystem` владеет фазами игрока и противника, сменой ходов и AP-бюджетом. Игроковые команды принимаются контроллером и камерой, а механика действий реализуется C++-способностями и боевыми статическими расчётами:
- `Source/XRU1/Tactics/TurnManagerSubsystem.h`
- `Source/XRU1/Tactics/TacticalPlayerController.cpp`
- `Source/XRU1/Tactics/GA_Attack.cpp`

Ввод Enhanced Input из `Content/XRU1Game/Input/IMC_Tactical.uasset` направляет выбор, перемещение, атаку, overwatch, оборону, способности и завершение хода в контроллер.

#### 3. Боевая модель: единая механика для игрока и AI
Юниты основаны на GAS-иерархии и содержат атрибуты, AP и тактическое состояние. Огонь, линия видимости, укрытие и шанс попадания должны рассчитываться общими предикатами для AI, HUD и способностей; визуальная часть не должна повторно реализовывать механику.
- `Source/XRU1/Characters/TDCombatant.h`
- `Source/XRU1/Tactics/ActionPointsComponent.cpp`
- `Source/XRU1/Tactics/TacticsCombatStatics.cpp`

Критическая граница действия — `UAnimNotify_FireCommit`: до notify AP/результат могут быть отменены, после него применяются необратимые бросок, урон и смерть. Overwatch реализован отдельной способностью: `Source/XRU1/Tactics/GA_Overwatch.cpp`.

#### 4. Мир, сценарии и AI
`ATacticalScenarioDirector` оркестрирует загрузочный сценарий, актёров, цели, события миссии, голос и финальные условия. Сценарные Data Assets отделяют контент миссий от кода; Blueprint-версии директоров и encounter-ов связывают C++-состояние с уровнями.
- `Source/XRU1/Tactics/TacticalScenarioDirector.cpp`
- `Source/XRU1/Tactics/TacticalScenarioDataAsset.h`
- `Content/XRU1Game/Data/Missions/DA_Scenario_Mission01.uasset`

AI использует контроллер, профиль сложности и utility-оценку действий, но тот же AP и firing solution, что игрок. `TacticalAIDirectorSubsystem` управляет фазой противника и encounter-ами.
- `Source/XRU1/Tactics/UnitAIController.cpp`
- `Source/XRU1/Tactics/AIActionEvaluators.cpp`
- `Content/XRU1Game/Data/AI/DA_AI_Marauder_Default.uasset`

#### 5. Представление, UI и атмосферные системы
Blueprint/UI — презентационный слой над C++-механикой: CommonUI layout/HUD отображают AP, здоровье, укрытие, цели и результаты. Тактическое отображение также включает fog-of-war и визуализацию диапазона перемещения.
- `Source/XRU1/UI/GameUIManagerSubsystem.cpp`
- `Source/XRU1/UI/TacticalHUDWidget.cpp`
- `Source/XRU1/Tactics/FogOfWarSubsystem.cpp`

Подтверждённые боевые события передаются в звук и VFX-подсистемы; выстрелы визуализируются tracer-актором. Субтитры поддерживают ролики и звук.
- `Source/XRU1/Audio/TacticsAudioSubsystem.cpp`
- `Source/XRU1/FX/MissionVfxSubsystem.cpp`
- `Source/XRU1/Subtitles/SubtitleSubsystem.cpp`

#### 6. Прогрессия, плагины и границы инфраструктуры
Хабовая карта и POI-маркеры ведут в доступные миссии; кампания сохраняется в `TacticsCampaign`. Квесты, обучение и StateTree-задачи предоставлены отдельным C++-плагином, который зависит от message router. Команды фракций вынесены в TeamManager.
- `Source/XRU1/Hub/HubGameMode.cpp`
- `Plugins/STQuestSystem/Source/STQuestSystem/Public/QuestSubsystem.h`
- `Plugins/GameplayMessageRouter/Source/GameplayMessageRuntime/Public/GameFramework/GameplayMessageSubsystem.h`

Среда выполнения — локальный UE5 standalone для Windows; серверных/API-интеграций в игровом контуре не видно. Репозиторий требует Git LFS для бинарных UE-ассетов. Плагин `Plugins/UnrealClaude/` — редакторская/MCP-интеграция для авторинга, а не часть игрового runtime.

Main entry points: [`Source/XRU1/Tactics/TurnManagerSubsystem.h`](https://github.com/alexkol-v/xru1/blob/main/Source/XRU1/Tactics/TurnManagerSubsystem.h) (Turn manager), [`Source/XRU1/Tactics/TacticsCombatStatics.cpp`](https://github.com/alexkol-v/xru1/blob/main/Source/XRU1/Tactics/TacticsCombatStatics.cpp) (Combat rules), [`Source/XRU1/Tactics/TacticalScenarioDirector.cpp`](https://github.com/alexkol-v/xru1/blob/main/Source/XRU1/Tactics/TacticalScenarioDirector.cpp) (Scenario director), [`Source/XRU1/Tactics/TacticalPlayerController.cpp`](https://github.com/alexkol-v/xru1/blob/main/Source/XRU1/Tactics/TacticalPlayerController.cpp) (Player controller)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["Runtime &amp; content"]
  node_project["UE5 Windows project<br/>project entry<br/>[XRU1.uproject]"]
  node_module["XRU1 C++ module<br/>UE module<br/>[XRU1.Build.cs]"]
  node_flow_maps["Menu, hub &amp; mission maps<br/>UE maps<br/>[L_MainMenu.umap]"]
  node_mission_map["Combat map &amp; sublevels<br/>streamed map content"]
end

subgraph group_combat["Tactical combat"]
  node_input["Tactical input mapping<br/>Enhanced Input"]
  node_player_control["Player controller<br/>command gateway"]
  node_turn_manager{{"Turn manager<br/>world subsystem"}}
  node_combatants["GAS combatants<br/>unit model<br/>[TDCombatant.h]"]
  node_action_points["Action points"]
  node_combat_rules["Combat rules<br/>shared calculations"]
  node_abilities["Attack &amp; overwatch abilities<br/>GAS abilities<br/>[GA_Attack.cpp]"]
end

subgraph group_scenario["Scenarios &amp; AI"]
  node_scenario_director{{"Scenario director<br/>mission orchestrator"}}
  node_scenario_data["Mission scenario data<br/>Data Asset"]
  node_ai_director["AI director<br/>world subsystem"]
  node_ai_evaluation["AI utility evaluation<br/>decision model"]
  node_ai_profile["AI difficulty profile<br/>Data Asset"]
end

subgraph group_presentation["Presentation"]
  node_ui_fog["HUD &amp; tactical visibility<br/>presentation subsystem"]
  node_av_feedback["Audio, VFX &amp; subtitles<br/>event presentation"]
end

subgraph group_progression["Progression &amp; plugins"]
  node_hub_campaign["Hub &amp; campaign<br/>progression flow<br/>[HubGameMode.cpp]"]
  node_quests_messages["Quest plugin &amp; message router<br/>plugin integration<br/>[QuestSubsystem.h]"]
end

node_project -->|"loads"| node_module
node_project -->|"starts at"| node_flow_maps
node_flow_maps -->|"hub flow"| node_hub_campaign
node_hub_campaign -->|"launches mission"| node_mission_map
node_mission_map -->|"hosts"| node_scenario_director
node_input -->|"commands"| node_player_control
node_player_control -->|"submits actions"| node_turn_manager
node_turn_manager -->|"allocates"| node_action_points
node_action_points -->|"tracks AP for"| node_combatants
node_player_control -->|"activates"| node_abilities
node_abilities -->|"resolves with"| node_combat_rules
node_combat_rules -->|"applies outcomes"| node_combatants
node_turn_manager -->|"starts enemy phase"| node_ai_director
node_ai_director -->|"selects actions via"| node_ai_evaluation
node_ai_profile -->|"configures"| node_ai_evaluation
node_ai_evaluation -->|"uses"| node_combat_rules
node_scenario_data -->|"defines"| node_scenario_director
node_scenario_director -->|"sets mission state"| node_turn_manager
node_combatants -->|"exposes tactical state"| node_ui_fog
node_combat_rules -->|"provides previews"| node_ui_fog
node_abilities -->|"confirmed events"| node_av_feedback
node_scenario_director -->|"voice and results"| node_av_feedback
node_quests_messages -.->|"supports quests/tutorial"| node_hub_campaign

click node_project "https://github.com/alexkol-v/xru1/blob/main/XRU1.uproject"
click node_module "https://github.com/alexkol-v/xru1/blob/main/Source/XRU1/XRU1.Build.cs"
click node_flow_maps "https://github.com/alexkol-v/xru1/blob/main/Content/XRU1Game/Maps/L_MainMenu.umap"
click node_mission_map "https://github.com/alexkol-v/xru1/blob/main/Content/XRU1Game/Maps/Main_Map_Showreel.umap"
click node_input "https://github.com/alexkol-v/xru1/blob/main/Content/XRU1Game/Input/IMC_Tactical.uasset"
click node_player_control "https://github.com/alexkol-v/xru1/blob/main/Source/XRU1/Tactics/TacticalPlayerController.cpp"
click node_turn_manager "https://github.com/alexkol-v/xru1/blob/main/Source/XRU1/Tactics/TurnManagerSubsystem.h"
click node_combatants "https://github.com/alexkol-v/xru1/blob/main/Source/XRU1/Characters/TDCombatant.h"
click node_action_points "https://github.com/alexkol-v/xru1/blob/main/Source/XRU1/Tactics/ActionPointsComponent.cpp"
click node_combat_rules "https://github.com/alexkol-v/xru1/blob/main/Source/XRU1/Tactics/TacticsCombatStatics.cpp"
click node_abilities "https://github.com/alexkol-v/xru1/blob/main/Source/XRU1/Tactics/GA_Attack.cpp"
click node_scenario_director "https://github.com/alexkol-v/xru1/blob/main/Source/XRU1/Tactics/TacticalScenarioDirector.cpp"
click node_scenario_data "https://github.com/alexkol-v/xru1/blob/main/Content/XRU1Game/Data/Missions/DA_Scenario_Mission01.uasset"
click node_ai_director "https://github.com/alexkol-v/xru1/blob/main/Source/XRU1/Tactics/UnitAIController.cpp"
click node_ai_evaluation "https://github.com/alexkol-v/xru1/blob/main/Source/XRU1/Tactics/AIActionEvaluators.cpp"
click node_ai_profile "https://github.com/alexkol-v/xru1/blob/main/Content/XRU1Game/Data/AI/DA_AI_Marauder_Default.uasset"
click node_ui_fog "https://github.com/alexkol-v/xru1/blob/main/Source/XRU1/UI/GameUIManagerSubsystem.cpp"
click node_av_feedback "https://github.com/alexkol-v/xru1/blob/main/Source/XRU1/Audio/TacticsAudioSubsystem.cpp"
click node_hub_campaign "https://github.com/alexkol-v/xru1/blob/main/Source/XRU1/Hub/HubGameMode.cpp"
click node_quests_messages "https://github.com/alexkol-v/xru1/blob/main/Plugins/STQuestSystem/Source/STQuestSystem/Public/QuestSubsystem.h"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_project,node_module,node_flow_maps,node_mission_map toneBlue
class node_input,node_player_control,node_turn_manager,node_combatants,node_action_points,node_combat_rules,node_abilities toneAmber
class node_scenario_director,node_scenario_data,node_ai_director,node_ai_evaluation,node_ai_profile toneMint
class node_ui_fog,node_av_feedback toneRose
class node_hub_campaign,node_quests_messages toneIndigo
```

## Components

### Runtime & content

- [UE5 Windows project](https://github.com/alexkol-v/xru1/blob/main/XRU1.uproject): project entry · Standalone Windows vertical slice. · `XRU1.uproject`
- [XRU1 C++ module](https://github.com/alexkol-v/xru1/blob/main/Source/XRU1/XRU1.Build.cs): UE module · `Source/XRU1/XRU1.Build.cs`
- [Menu, hub & mission maps](https://github.com/alexkol-v/xru1/blob/main/Content/XRU1Game/Maps/L_MainMenu.umap): UE maps · Flow runs menu → intro → hub → tutorial → mission → result. · `Content/XRU1Game/Maps/L_MainMenu.umap`
- [Combat map & sublevels](https://github.com/alexkol-v/xru1/blob/main/Content/XRU1Game/Maps/Main_Map_Showreel.umap): streamed map content · `Content/XRU1Game/Maps/Main_Map_Showreel.umap`

### Tactical combat

- [Tactical input mapping](https://github.com/alexkol-v/xru1/blob/main/Content/XRU1Game/Input/IMC_Tactical.uasset): Enhanced Input · `Content/XRU1Game/Input/IMC_Tactical.uasset`
- [Player controller](https://github.com/alexkol-v/xru1/blob/main/Source/XRU1/Tactics/TacticalPlayerController.cpp): command gateway · `Source/XRU1/Tactics/TacticalPlayerController.cpp`
- [Turn manager](https://github.com/alexkol-v/xru1/blob/main/Source/XRU1/Tactics/TurnManagerSubsystem.h): world subsystem · Owns player/enemy phases, turn changes, and AP budget. · `Source/XRU1/Tactics/TurnManagerSubsystem.h`
- [GAS combatants](https://github.com/alexkol-v/xru1/blob/main/Source/XRU1/Characters/TDCombatant.h): unit model · Shared unit attributes, AP, and tactical state. · `Source/XRU1/Characters/TDCombatant.h`
- [Action points](https://github.com/alexkol-v/xru1/blob/main/Source/XRU1/Tactics/ActionPointsComponent.cpp): `Source/XRU1/Tactics/ActionPointsComponent.cpp`
- [Combat rules](https://github.com/alexkol-v/xru1/blob/main/Source/XRU1/Tactics/TacticsCombatStatics.cpp): shared calculations · Firing solution, LOS, cover, and hit chance for AI, HUD, and abilities. · `Source/XRU1/Tactics/TacticsCombatStatics.cpp`
- [Attack & overwatch abilities](https://github.com/alexkol-v/xru1/blob/main/Source/XRU1/Tactics/GA_Attack.cpp): GAS abilities · Fire commits irreversibly at the animation notify. · `Source/XRU1/Tactics/GA_Attack.cpp`

### Scenarios & AI

- [Scenario director](https://github.com/alexkol-v/xru1/blob/main/Source/XRU1/Tactics/TacticalScenarioDirector.cpp): mission orchestrator · Drives actors, objectives, events, voice, and mission outcomes. · `Source/XRU1/Tactics/TacticalScenarioDirector.cpp`
- [Mission scenario data](https://github.com/alexkol-v/xru1/blob/main/Content/XRU1Game/Data/Missions/DA_Scenario_Mission01.uasset): Data Asset · Content-authored mission definition. · `Content/XRU1Game/Data/Missions/DA_Scenario_Mission01.uasset`
- [AI director](https://github.com/alexkol-v/xru1/blob/main/Source/XRU1/Tactics/UnitAIController.cpp): world subsystem · Runs enemy phase and encounters. · `Source/XRU1/Tactics/UnitAIController.cpp`
- [AI utility evaluation](https://github.com/alexkol-v/xru1/blob/main/Source/XRU1/Tactics/AIActionEvaluators.cpp): decision model · Uses shared AP and firing solutions. · `Source/XRU1/Tactics/AIActionEvaluators.cpp`
- [AI difficulty profile](https://github.com/alexkol-v/xru1/blob/main/Content/XRU1Game/Data/AI/DA_AI_Marauder_Default.uasset): Data Asset · `Content/XRU1Game/Data/AI/DA_AI_Marauder_Default.uasset`

### Presentation

- [HUD & tactical visibility](https://github.com/alexkol-v/xru1/blob/main/Source/XRU1/UI/GameUIManagerSubsystem.cpp): presentation subsystem · Displays combat state, fog of war, and movement ranges. · `Source/XRU1/UI/GameUIManagerSubsystem.cpp`
- [Audio, VFX & subtitles](https://github.com/alexkol-v/xru1/blob/main/Source/XRU1/Audio/TacticsAudioSubsystem.cpp): event presentation · Consumes confirmed combat and cinematic events. · `Source/XRU1/Audio/TacticsAudioSubsystem.cpp`

### Progression & plugins

- [Hub & campaign](https://github.com/alexkol-v/xru1/blob/main/Source/XRU1/Hub/HubGameMode.cpp): progression flow · POIs launch available missions and campaign state persists. · `Source/XRU1/Hub/HubGameMode.cpp`
- [Quest plugin & message router](https://github.com/alexkol-v/xru1/blob/main/Plugins/STQuestSystem/Source/STQuestSystem/Public/QuestSubsystem.h): plugin integration · Quest, tutorial, and StateTree tasks communicate through messages. · `Plugins/STQuestSystem/Source/STQuestSystem/Public/QuestSubsystem.h`

## Connections

- UE5 Windows project → XRU1 C++ module: loads
- UE5 Windows project → Menu, hub & mission maps: starts at
- Menu, hub & mission maps → Hub & campaign: hub flow
- Hub & campaign → Combat map & sublevels: launches mission
- Combat map & sublevels → Scenario director: hosts
- Tactical input mapping → Player controller: commands
- Player controller → Turn manager: submits actions
- Turn manager → Action points: allocates
- Action points → GAS combatants: tracks AP for
- Player controller → Attack & overwatch abilities: activates
- Attack & overwatch abilities → Combat rules: resolves with
- Combat rules → GAS combatants: applies outcomes
- Turn manager → AI director: starts enemy phase
- AI director → AI utility evaluation: selects actions via
- AI difficulty profile → AI utility evaluation: configures
- AI utility evaluation → Combat rules: uses
- Mission scenario data → Scenario director: defines
- Scenario director → Turn manager: sets mission state
- GAS combatants → HUD & tactical visibility: exposes tactical state
- Combat rules → HUD & tactical visibility: provides previews
- Attack & overwatch abilities → Audio, VFX & subtitles: confirmed events
- Scenario director → Audio, VFX & subtitles: voice and results
- Quest plugin & message router → Hub & campaign: supports quests/tutorial
