# chobotov/yohoho-test architecture

> Architecture diagram of the GitHub repository chobotov/yohoho-test, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-06-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/chobotov/yohoho-test
- Repository: https://github.com/chobotov/yohoho-test

## Overview

1. **Project type and shape**
   - This is a Unity 2022.3 mobile game project built around a small gameplay loop: move a player with a touch joystick, pick up items into a stack, and drop them into a release zone.
   - The codebase is split cleanly between **game-specific source** under `Assets/_src` and **imported dependencies/assets** under `Assets/Plugins` and `Assets/Imported Assets`.

2. **Main runtime entry and scene flow**
   - The project uses two main scenes: `Entry Point.unity` and `Game.unity`.
   - `AppController` plus the lifetime-scope classes (`AppLifetimeScope`, `GameLifetimeScope`) appear to handle bootstrap and scene-level composition.
   - `EcsStartup` is the likely bridge that initializes the ECS world/systems for the game scene.

3. **Core gameplay architecture: ECS-first**
   - The game logic is organized into an ECS layer under `Assets/_src/5 - Scripts/Runtime/Ecs`.
   - Data is split into **components** such as input, movement, rotation, unit, item, inventory, level, pickup, and drop.
   - Behavior is split into **systems** that operate on those components rather than directly coupling objects together.

4. **Input subsystem**
   - Touch control is handled by a joystick asset imported under `Assets/Imported Assets/Joystick Pack`.
   - `InputSystem` converts player input into ECS-side input state/events, likely represented by `InputEvent`.
   - This isolates platform-specific UI input from the gameplay logic.

5. **Movement and orientation pipeline**
   - Movement is decomposed into separate ECS concerns:
     - `MoveVelocitySystem` derives velocity,
     - `MoveSystem` applies positional movement,
     - `RotationSystem` handles facing direction,
     - `AnimatorSystem` syncs animation with motion state.
   - This separation makes the player controller easy to extend without putting all behavior into one script.

6. **Stack / inventory gameplay**
   - The stack mechanic is represented by inventory-related components and runtime model classes:
     - `InventoryComponent` in ECS,
     - `UnitInventory` and `Item` in game domain classes.
   - Pickup and drop flows are handled by dedicated systems:
     - `PickupItemDistanceSystem` and `DropZoneDistanceSystem` decide eligibility,
     - `PickupItemSystem` and `DropItemSystem` perform the actual transfer of items.
   - This is the main gameplay loop boundary: proximity detection first, state mutation second.

7. **Item generation and level content**
   - `CreateItemSystem` is the generator feature described in the README: items are produced on a timer.
   - Level content is driven by `LevelsConfig`, `ItemsConfig`, and `PlayerConfig` assets under `Assets/_src/2 - Data/Configs`.
   - `CreateLevelSystem` and `CreateUnitSystem` likely instantiate the level and player entities from those configs.

8. **Game-domain factories and views**
   - `LevelFactory`, `PlayerFactory`, and `ItemsFactory` sit between the ECS/domain layer and Unity prefabs.
   - View-facing classes like `LevelView` and `UnitView` represent the scene objects that ECS/entities are bound to.
   - Prefabs in `Assets/_src/3 - Prefabs` provide the concrete Unity objects for the app controller, game level, player, and item stack.

9. **Services and cross-cutting state**
   - `LevelService` and `ScoreService` are domain services, each with an interface and implementation.
   - These services likely hold shared progression/state that is not purely entity-local, such as current level or score.
   - `GameState` suggests a small runtime state container for overarching game status.

10. **UI boundary**
   - `MainCanvas` is the primary UI root under `Assets/_src/5 - Scripts/Runtime/UI`.
   - The README mentions a “minimal UI” for stack display, so UI is intentionally lightweight and probably reflects inventory/stack state rather than driving gameplay.
   - Text rendering uses **TextMesh Pro**, imported as a standard Unity package asset set.

11. **Imported libraries and why they matter**
   - **UniTask** is included and likely used for async flows such as timing, initialization, or scene/bootstrap sequencing.
   - **UniRx** is also present, indicating reactive patterns may be used for UI binding, events, or state observation.
   - These packages shape the architecture by reducing callback-heavy Unity code and making state propagation more declarative.

12. **Visual/content assets are decoupled from gameplay code**
   - The repository contains large imported art packs: stickman character animations, a town environment pack, joystick UI assets, and TextMesh Pro resources.
   - These are treated as external content, while the gameplay code in `_src` stays focused on logic and orchestration.
   - For an architecture diagram, this is a useful boundary: **game systems consume prefab/model/config assets, but do not own them**.

13. **Editor and assembly boundaries**
   - The codebase uses `.asmdef` files, separating runtime and editor code into distinct compilation units.
   - There is an editor assembly for the joystick pack and a game editor assembly (`YohohoEditor.asmdef`), which helps isolate tooling from runtime gameplay.
   - This supports faster iteration and clearer dependency direction.

14. **Overall data flow**
   - Input comes from the joystick UI → becomes ECS input state → drives movement/rotation systems → player collides or reaches item zones → pickup/drop systems mutate inventory/stack state → UI and animation reflect the updated state.
   - Separately, the level/item creation systems spawn content on timers or startup, feeding the same inventory loop.
   - The architecture is therefore a **scene/bootstrap layer + ECS gameplay core + prefab/config/view boundary**, with imported assets feeding presentation and control.

Main entry points: [`Assets/_src/5 - Scripts/Runtime/App/Ecs/EcsStartup.cs`](https://github.com/chobotov/yohoho-test/blob/HEAD/Assets/_src/5%20-%20Scripts/Runtime/App/Ecs/EcsStartup.cs) (ECS Startup), [`Assets/_src/5 - Scripts/Runtime/Ecs/Systems/Create/CreateLevelSystem.cs`](https://github.com/chobotov/yohoho-test/blob/HEAD/Assets/_src/5%20-%20Scripts/Runtime/Ecs/Systems/Create/CreateLevelSystem.cs) (Create Systems), [`Assets/_src/5 - Scripts/Runtime/Ecs/Components/Move/MoveComponent.cs`](https://github.com/chobotov/yohoho-test/blob/HEAD/Assets/_src/5%20-%20Scripts/Runtime/Ecs/Components/Move/MoveComponent.cs) (Move Data), [`Assets/_src/5 - Scripts/Runtime/Ecs/Components/Stack/InventoryComponent.cs`](https://github.com/chobotov/yohoho-test/blob/HEAD/Assets/_src/5%20-%20Scripts/Runtime/Ecs/Components/Stack/InventoryComponent.cs) (Inventory)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_group_app["Bootstrap"]
  node_node_entry_scene["Entry Point<br/>scene<br/>[Entry Point.unity]"]
  node_node_game_scene["Game Scene<br/>[Game.unity]"]
  node_node_app_controller["AppController<br/>bootstrap<br/>[AppController.cs]"]
  node_node_app_scope["App Scope<br/>lifetime scope"]
  node_node_game_scope["Game Scope<br/>lifetime scope"]
  node_node_ecs_startup["ECS Startup<br/>ecs bootstrap<br/>[EcsStartup.cs]"]
end

subgraph group_group_ecs["ECS Gameplay"]
  node_node_input_system["Input System<br/>ecs system<br/>[InputSystem.cs]"]
  node_node_velocity_system["Velocity<br/>ecs system"]
  node_node_move_system["Move<br/>ecs system<br/>[MoveSystem.cs]"]
  node_node_rotation_system["Rotation<br/>ecs system<br/>[RotationSystem.cs]"]
  node_node_animator_system["Animator<br/>ecs system<br/>[AnimatorSystem.cs]"]
  node_node_pickup_distance["Pickup Range<br/>ecs system"]
  node_node_pickup_system["Pickup<br/>ecs system"]
  node_node_drop_distance["Drop Range<br/>ecs system"]
  node_node_drop_system["Drop<br/>ecs system<br/>[DropItemSystem.cs]"]
  node_node_create_systems["Create Systems<br/>ecs systems"]
  node_node_input_component(("Input Event<br/>ecs component<br/>[InputEvent.cs]"))
  node_node_move_component(("Move Data<br/>ecs component<br/>[MoveComponent.cs]"))
  node_node_inventory_component(("Inventory<br/>ecs component"))
  node_node_item_components(("Item Marks<br/>ecs components<br/>[ItemComponent.cs]"))
  node_node_level_component(("Level Data<br/>ecs component<br/>[LevelComponent.cs]"))
end

subgraph group_group_domain["Domain"]
  node_node_player_factory["Player Factory<br/>[PlayerFactory.cs]"]
  node_node_level_factory["Level Factory<br/>[LevelFactory.cs]"]
  node_node_items_factory["Items Factory<br/>[ItemsFactory.cs]"]
  node_node_level_service["Level Service<br/>domain service<br/>[LevelService.cs]"]
  node_node_score_service["Score Service<br/>domain service<br/>[ScoreService.cs]"]
  node_node_game_state(("Game State<br/>runtime state<br/>[GameState.cs]"))
  node_node_unit_view["Unit View<br/>unity view<br/>[UnitView.cs]"]
  node_node_level_view["Level View<br/>unity view<br/>[LevelView.cs]"]
end

subgraph group_group_assets["Assets"]
  node_node_player_config["Player Config<br/>config asset"]
  node_node_items_config["Items Config<br/>config asset<br/>[Items Config.asset]"]
  node_node_levels_config["Levels Config<br/>config asset"]
  node_node_joystick["Joystick Pack<br/>input asset"]
end

subgraph group_group_ui["UI"]
  node_node_main_canvas["Main Canvas<br/>ui root<br/>[MainCanvas.cs]"]
end

subgraph group_group_libs["Libraries"]
end

node_node_entry_scene -->|"loads"| node_node_app_controller
node_node_app_controller -->|"composes"| node_node_app_scope
node_node_app_scope -->|"spawns"| node_node_game_scope
node_node_game_scene -->|"hosts"| node_node_game_scope
node_node_game_scope -->|"boots"| node_node_ecs_startup
node_node_ecs_startup -->|"registers"| node_node_input_system
node_node_ecs_startup -->|"registers"| node_node_velocity_system
node_node_ecs_startup -->|"registers"| node_node_move_system
node_node_ecs_startup -->|"registers"| node_node_rotation_system
node_node_ecs_startup -->|"registers"| node_node_animator_system
node_node_ecs_startup -->|"registers"| node_node_pickup_system
node_node_ecs_startup -->|"registers"| node_node_drop_system
node_node_ecs_startup -->|"registers"| node_node_create_systems
node_node_input_system -->|"reads"| node_node_joystick
node_node_input_system -->|"writes"| node_node_input_component
node_node_input_component -->|"drives"| node_node_velocity_system
node_node_velocity_system -->|"updates"| node_node_move_component
node_node_move_system -->|"consumes"| node_node_move_component
node_node_rotation_system -->|"uses"| node_node_move_component
node_node_animator_system -->|"reads"| node_node_move_component
node_node_pickup_distance -->|"checks"| node_node_item_components
node_node_pickup_system -->|"mutates"| node_node_inventory_component
node_node_drop_distance -->|"checks"| node_node_inventory_component
node_node_drop_system -->|"mutates"| node_node_inventory_component
node_node_create_systems -->|"uses"| node_node_player_config
node_node_create_systems -->|"uses"| node_node_items_config
node_node_create_systems -->|"uses"| node_node_levels_config
node_node_create_systems -->|"creates"| node_node_level_component
node_node_player_factory -->|"binds"| node_node_unit_view
node_node_level_factory -->|"binds"| node_node_level_view
node_node_items_factory -->|"creates"| node_node_item_components
node_node_level_service -->|"updates"| node_node_game_state
node_node_score_service -->|"updates"| node_node_game_state
node_node_main_canvas -->|"reflects"| node_node_inventory_component
node_node_main_canvas -->|"observes"| node_node_score_service
node_node_player_factory -->|"uses"| node_node_player_config
node_node_level_factory -->|"uses"| node_node_levels_config
node_node_items_factory -->|"uses"| node_node_items_config

click node_node_entry_scene "https://github.com/chobotov/yohoho-test/blob/master/Assets/_src/4 - Scenes/Entry Point.unity"
click node_node_game_scene "https://github.com/chobotov/yohoho-test/blob/master/Assets/_src/4 - Scenes/Game.unity"
click node_node_app_controller "https://github.com/chobotov/yohoho-test/blob/master/Assets/_src/5 - Scripts/Runtime/App/App/AppController.cs"
click node_node_app_scope "https://github.com/chobotov/yohoho-test/blob/master/Assets/_src/5 - Scripts/Runtime/App/LifetimeScope/AppLifetimeScope.cs"
click node_node_game_scope "https://github.com/chobotov/yohoho-test/blob/master/Assets/_src/5 - Scripts/Runtime/App/LifetimeScope/GameLifetimeScope.cs"
click node_node_ecs_startup "https://github.com/chobotov/yohoho-test/blob/master/Assets/_src/5 - Scripts/Runtime/App/Ecs/EcsStartup.cs"
click node_node_input_system "https://github.com/chobotov/yohoho-test/blob/master/Assets/_src/5 - Scripts/Runtime/Ecs/Systems/Input/InputSystem.cs"
click node_node_velocity_system "https://github.com/chobotov/yohoho-test/blob/master/Assets/_src/5 - Scripts/Runtime/Ecs/Systems/Velocity/MoveVelocitySystem.cs"
click node_node_move_system "https://github.com/chobotov/yohoho-test/blob/master/Assets/_src/5 - Scripts/Runtime/Ecs/Systems/Move/MoveSystem.cs"
click node_node_rotation_system "https://github.com/chobotov/yohoho-test/blob/master/Assets/_src/5 - Scripts/Runtime/Ecs/Systems/Rotation/RotationSystem.cs"
click node_node_animator_system "https://github.com/chobotov/yohoho-test/blob/master/Assets/_src/5 - Scripts/Runtime/Ecs/Systems/Animator/AnimatorSystem.cs"
click node_node_pickup_distance "https://github.com/chobotov/yohoho-test/blob/master/Assets/_src/5 - Scripts/Runtime/Ecs/Systems/Item/PickupItemDistanceSystem.cs"
click node_node_pickup_system "https://github.com/chobotov/yohoho-test/blob/master/Assets/_src/5 - Scripts/Runtime/Ecs/Systems/Item/PickupItemSystem.cs"
click node_node_drop_distance "https://github.com/chobotov/yohoho-test/blob/master/Assets/_src/5 - Scripts/Runtime/Ecs/Systems/Item/DropZoneDistanceSystem.cs"
click node_node_drop_system "https://github.com/chobotov/yohoho-test/blob/master/Assets/_src/5 - Scripts/Runtime/Ecs/Systems/Item/DropItemSystem.cs"
click node_node_create_systems "https://github.com/chobotov/yohoho-test/blob/master/Assets/_src/5 - Scripts/Runtime/Ecs/Systems/Create/CreateLevelSystem.cs"
click node_node_input_component "https://github.com/chobotov/yohoho-test/blob/master/Assets/_src/5 - Scripts/Runtime/Ecs/Components/Input/InputEvent.cs"
click node_node_move_component "https://github.com/chobotov/yohoho-test/blob/master/Assets/_src/5 - Scripts/Runtime/Ecs/Components/Move/MoveComponent.cs"
click node_node_inventory_component "https://github.com/chobotov/yohoho-test/blob/master/Assets/_src/5 - Scripts/Runtime/Ecs/Components/Stack/InventoryComponent.cs"
click node_node_item_components "https://github.com/chobotov/yohoho-test/blob/master/Assets/_src/5 - Scripts/Runtime/Ecs/Components/Item/ItemComponent.cs"
click node_node_level_component "https://github.com/chobotov/yohoho-test/blob/master/Assets/_src/5 - Scripts/Runtime/Ecs/Components/Level/LevelComponent.cs"
click node_node_player_config "https://github.com/chobotov/yohoho-test/blob/master/Assets/_src/2 - Data/Configs/Player/Player Config.asset"
click node_node_items_config "https://github.com/chobotov/yohoho-test/blob/master/Assets/_src/2 - Data/Configs/Items/Items Config.asset"
click node_node_levels_config "https://github.com/chobotov/yohoho-test/blob/master/Assets/_src/2 - Data/Configs/Levels/Levels Config.asset"
click node_node_player_factory "https://github.com/chobotov/yohoho-test/blob/master/Assets/_src/5 - Scripts/Runtime/Game/Player/PlayerFactory.cs"
click node_node_level_factory "https://github.com/chobotov/yohoho-test/blob/master/Assets/_src/5 - Scripts/Runtime/Game/Level/LevelFactory.cs"
click node_node_items_factory "https://github.com/chobotov/yohoho-test/blob/master/Assets/_src/5 - Scripts/Runtime/Game/Items/ItemsFactory.cs"
click node_node_level_service "https://github.com/chobotov/yohoho-test/blob/master/Assets/_src/5 - Scripts/Runtime/Services/LevelService/LevelService.cs"
click node_node_score_service "https://github.com/chobotov/yohoho-test/blob/master/Assets/_src/5 - Scripts/Runtime/Services/ScoreService/ScoreService.cs"
click node_node_game_state "https://github.com/chobotov/yohoho-test/blob/master/Assets/_src/5 - Scripts/Runtime/Game/GameState.cs"
click node_node_unit_view "https://github.com/chobotov/yohoho-test/blob/master/Assets/_src/5 - Scripts/Runtime/Game/Player/UnitView.cs"
click node_node_level_view "https://github.com/chobotov/yohoho-test/blob/master/Assets/_src/5 - Scripts/Runtime/Game/Level/LevelView.cs"
click node_node_main_canvas "https://github.com/chobotov/yohoho-test/blob/master/Assets/_src/5 - Scripts/Runtime/UI/MainCanvas.cs"
click node_node_joystick "https://github.com/chobotov/yohoho-test/tree/master/Assets/Imported Assets/Joystick Pack"

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_node_entry_scene,node_node_game_scene,node_node_app_controller,node_node_app_scope,node_node_game_scope,node_node_ecs_startup toneBlue
class node_node_input_system,node_node_velocity_system,node_node_move_system,node_node_rotation_system,node_node_animator_system,node_node_pickup_distance,node_node_pickup_system,node_node_drop_distance,node_node_drop_system,node_node_create_systems,node_node_input_component,node_node_move_component,node_node_inventory_component,node_node_item_components,node_node_level_component toneAmber
class node_node_player_factory,node_node_level_factory,node_node_items_factory,node_node_level_service,node_node_score_service,node_node_game_state,node_node_unit_view,node_node_level_view toneMint
class node_node_player_config,node_node_items_config,node_node_levels_config,node_node_joystick toneRose
class node_node_main_canvas toneIndigo
```

## Components

### Bootstrap

Scene startup, lifetime scopes, and game initialization.

- [Entry Point](https://github.com/chobotov/yohoho-test/blob/HEAD/Assets/_src/4%20-%20Scenes/Entry%20Point.unity): scene · Bootstrap scene that starts the app. · `Assets/_src/4 - Scenes/Entry Point.unity`
- [Game Scene](https://github.com/chobotov/yohoho-test/blob/HEAD/Assets/_src/4%20-%20Scenes/Game.unity): scene · Main gameplay scene. · `Assets/_src/4 - Scenes/Game.unity`
- [AppController](https://github.com/chobotov/yohoho-test/blob/HEAD/Assets/_src/5%20-%20Scripts/Runtime/App/App/AppController.cs): bootstrap · Scene-root controller for app startup. · `Assets/_src/5 - Scripts/Runtime/App/App/AppController.cs`
- [App Scope](https://github.com/chobotov/yohoho-test/blob/HEAD/Assets/_src/5%20-%20Scripts/Runtime/App/LifetimeScope/AppLifetimeScope.cs): lifetime scope · Application-level composition root. · `Assets/_src/5 - Scripts/Runtime/App/LifetimeScope/AppLifetimeScope.cs`
- [Game Scope](https://github.com/chobotov/yohoho-test/blob/HEAD/Assets/_src/5%20-%20Scripts/Runtime/App/LifetimeScope/GameLifetimeScope.cs): lifetime scope · Scene-level composition root for gameplay. · `Assets/_src/5 - Scripts/Runtime/App/LifetimeScope/GameLifetimeScope.cs`
- [ECS Startup](https://github.com/chobotov/yohoho-test/blob/HEAD/Assets/_src/5%20-%20Scripts/Runtime/App/Ecs/EcsStartup.cs): ecs bootstrap · Initializes ECS world and systems. · `Assets/_src/5 - Scripts/Runtime/App/Ecs/EcsStartup.cs`

### ECS Gameplay

Core entity/component/system gameplay loop.

- [Input System](https://github.com/chobotov/yohoho-test/blob/HEAD/Assets/_src/5%20-%20Scripts/Runtime/Ecs/Systems/Input/InputSystem.cs): ecs system · Converts joystick input into ECS input state. · `Assets/_src/5 - Scripts/Runtime/Ecs/Systems/Input/InputSystem.cs`
- [Velocity](https://github.com/chobotov/yohoho-test/blob/HEAD/Assets/_src/5%20-%20Scripts/Runtime/Ecs/Systems/Velocity/MoveVelocitySystem.cs): ecs system · Derives movement velocity from input/state. · `Assets/_src/5 - Scripts/Runtime/Ecs/Systems/Velocity/MoveVelocitySystem.cs`
- [Move](https://github.com/chobotov/yohoho-test/blob/HEAD/Assets/_src/5%20-%20Scripts/Runtime/Ecs/Systems/Move/MoveSystem.cs): ecs system · Applies positional movement. · `Assets/_src/5 - Scripts/Runtime/Ecs/Systems/Move/MoveSystem.cs`
- [Rotation](https://github.com/chobotov/yohoho-test/blob/HEAD/Assets/_src/5%20-%20Scripts/Runtime/Ecs/Systems/Rotation/RotationSystem.cs): ecs system · Updates facing direction. · `Assets/_src/5 - Scripts/Runtime/Ecs/Systems/Rotation/RotationSystem.cs`
- [Animator](https://github.com/chobotov/yohoho-test/blob/HEAD/Assets/_src/5%20-%20Scripts/Runtime/Ecs/Systems/Animator/AnimatorSystem.cs): ecs system · Syncs animation with movement state. · `Assets/_src/5 - Scripts/Runtime/Ecs/Systems/Animator/AnimatorSystem.cs`
- [Pickup Range](https://github.com/chobotov/yohoho-test/blob/HEAD/Assets/_src/5%20-%20Scripts/Runtime/Ecs/Systems/Item/PickupItemDistanceSystem.cs): ecs system · Detects when items are close enough to pick up. · `Assets/_src/5 - Scripts/Runtime/Ecs/Systems/Item/PickupItemDistanceSystem.cs`
- [Pickup](https://github.com/chobotov/yohoho-test/blob/HEAD/Assets/_src/5%20-%20Scripts/Runtime/Ecs/Systems/Item/PickupItemSystem.cs): ecs system · Transfers eligible items into inventory. · `Assets/_src/5 - Scripts/Runtime/Ecs/Systems/Item/PickupItemSystem.cs`
- [Drop Range](https://github.com/chobotov/yohoho-test/blob/HEAD/Assets/_src/5%20-%20Scripts/Runtime/Ecs/Systems/Item/DropZoneDistanceSystem.cs): ecs system · Detects when the release zone can accept items. · `Assets/_src/5 - Scripts/Runtime/Ecs/Systems/Item/DropZoneDistanceSystem.cs`
- [Drop](https://github.com/chobotov/yohoho-test/blob/HEAD/Assets/_src/5%20-%20Scripts/Runtime/Ecs/Systems/Item/DropItemSystem.cs): ecs system · Removes items from inventory into the release zone. · `Assets/_src/5 - Scripts/Runtime/Ecs/Systems/Item/DropItemSystem.cs`
- [Create Systems](https://github.com/chobotov/yohoho-test/blob/HEAD/Assets/_src/5%20-%20Scripts/Runtime/Ecs/Systems/Create/CreateLevelSystem.cs): ecs systems · Spawns level, unit, and timed items. · `Assets/_src/5 - Scripts/Runtime/Ecs/Systems/Create/CreateLevelSystem.cs`
- [Input Event](https://github.com/chobotov/yohoho-test/blob/HEAD/Assets/_src/5%20-%20Scripts/Runtime/Ecs/Components/Input/InputEvent.cs): ecs component · ECS-side input event/state. · `Assets/_src/5 - Scripts/Runtime/Ecs/Components/Input/InputEvent.cs`
- [Move Data](https://github.com/chobotov/yohoho-test/blob/HEAD/Assets/_src/5%20-%20Scripts/Runtime/Ecs/Components/Move/MoveComponent.cs): ecs component · Movement data for ECS entities. · `Assets/_src/5 - Scripts/Runtime/Ecs/Components/Move/MoveComponent.cs`
- [Inventory](https://github.com/chobotov/yohoho-test/blob/HEAD/Assets/_src/5%20-%20Scripts/Runtime/Ecs/Components/Stack/InventoryComponent.cs): ecs component · Stack/inventory state for units. · `Assets/_src/5 - Scripts/Runtime/Ecs/Components/Stack/InventoryComponent.cs`
- [Item Marks](https://github.com/chobotov/yohoho-test/blob/HEAD/Assets/_src/5%20-%20Scripts/Runtime/Ecs/Components/Item/ItemComponent.cs): ecs components · Pickup, drop, and item entity markers. · `Assets/_src/5 - Scripts/Runtime/Ecs/Components/Item/ItemComponent.cs`
- [Level Data](https://github.com/chobotov/yohoho-test/blob/HEAD/Assets/_src/5%20-%20Scripts/Runtime/Ecs/Components/Level/LevelComponent.cs): ecs component · Level entity data. · `Assets/_src/5 - Scripts/Runtime/Ecs/Components/Level/LevelComponent.cs`

### Domain

Factories, services, and runtime game models.

- [Player Factory](https://github.com/chobotov/yohoho-test/blob/HEAD/Assets/_src/5%20-%20Scripts/Runtime/Game/Player/PlayerFactory.cs): factory · Builds player-domain objects and prefabs. · `Assets/_src/5 - Scripts/Runtime/Game/Player/PlayerFactory.cs`
- [Level Factory](https://github.com/chobotov/yohoho-test/blob/HEAD/Assets/_src/5%20-%20Scripts/Runtime/Game/Level/LevelFactory.cs): factory · Builds level objects and scene binding. · `Assets/_src/5 - Scripts/Runtime/Game/Level/LevelFactory.cs`
- [Items Factory](https://github.com/chobotov/yohoho-test/blob/HEAD/Assets/_src/5%20-%20Scripts/Runtime/Game/Items/ItemsFactory.cs): factory · Creates item-domain objects and views. · `Assets/_src/5 - Scripts/Runtime/Game/Items/ItemsFactory.cs`
- [Level Service](https://github.com/chobotov/yohoho-test/blob/HEAD/Assets/_src/5%20-%20Scripts/Runtime/Services/LevelService/LevelService.cs): domain service · Tracks level progression/state. · `Assets/_src/5 - Scripts/Runtime/Services/LevelService/LevelService.cs`
- [Score Service](https://github.com/chobotov/yohoho-test/blob/HEAD/Assets/_src/5%20-%20Scripts/Runtime/Services/ScoreService/ScoreService.cs): domain service · Tracks score/progression state. · `Assets/_src/5 - Scripts/Runtime/Services/ScoreService/ScoreService.cs`
- [Game State](https://github.com/chobotov/yohoho-test/blob/HEAD/Assets/_src/5%20-%20Scripts/Runtime/Game/GameState.cs): runtime state · Shared runtime game status container. · `Assets/_src/5 - Scripts/Runtime/Game/GameState.cs`
- [Unit View](https://github.com/chobotov/yohoho-test/blob/HEAD/Assets/_src/5%20-%20Scripts/Runtime/Game/Player/UnitView.cs): unity view · Scene object bound to player/unit entities. · `Assets/_src/5 - Scripts/Runtime/Game/Player/UnitView.cs`
- [Level View](https://github.com/chobotov/yohoho-test/blob/HEAD/Assets/_src/5%20-%20Scripts/Runtime/Game/Level/LevelView.cs): unity view · Scene object bound to level entities. · `Assets/_src/5 - Scripts/Runtime/Game/Level/LevelView.cs`

### Assets

Imported content and Unity prefab/config boundaries.

- [Player Config](https://github.com/chobotov/yohoho-test/blob/HEAD/Assets/_src/2%20-%20Data/Configs/Player/Player%20Config.asset): config asset · Player tuning data. · `Assets/_src/2 - Data/Configs/Player/Player Config.asset`
- [Items Config](https://github.com/chobotov/yohoho-test/blob/HEAD/Assets/_src/2%20-%20Data/Configs/Items/Items%20Config.asset): config asset · Item generation/content data. · `Assets/_src/2 - Data/Configs/Items/Items Config.asset`
- [Levels Config](https://github.com/chobotov/yohoho-test/blob/HEAD/Assets/_src/2%20-%20Data/Configs/Levels/Levels%20Config.asset): config asset · Level progression/content data. · `Assets/_src/2 - Data/Configs/Levels/Levels Config.asset`
- [Joystick Pack](https://github.com/chobotov/yohoho-test/tree/HEAD/Assets/Imported%20Assets/Joystick%20Pack): input asset · Imported touch joystick controls. · `Assets/Imported Assets/Joystick Pack`

### UI

Minimal player-facing interface and display layer.

- [Main Canvas](https://github.com/chobotov/yohoho-test/blob/HEAD/Assets/_src/5%20-%20Scripts/Runtime/UI/MainCanvas.cs): ui root · Primary UI root for minimal stack display. · `Assets/_src/5 - Scripts/Runtime/UI/MainCanvas.cs`

## Connections

- Entry Point → AppController: loads · Entry scene hosts the app controller.
- AppController → App Scope: composes · App controller wires application lifetime scope.
- App Scope → Game Scope: spawns · Application scope prepares scene-level composition.
- Game Scene → Game Scope: hosts · Game scene contains the gameplay lifetime scope.
- Game Scope → ECS Startup: boots · Game scope starts ECS initialization.
- ECS Startup → Input System: registers · Startup installs input processing.
- ECS Startup → Velocity: registers · Startup installs movement derivation.
- ECS Startup → Move: registers · Startup installs movement application.
- ECS Startup → Rotation: registers · Startup installs facing updates.
- ECS Startup → Animator: registers · Startup installs animation syncing.
- ECS Startup → Pickup: registers · Startup installs pickup mutation.
- ECS Startup → Drop: registers · Startup installs drop mutation.
- ECS Startup → Create Systems: registers · Startup installs spawning systems.
- Input System → Joystick Pack: reads · Joystick UI is the player input source.
- Input System → Input Event: writes · Input becomes ECS-side input state.
- Input Event → Velocity: drives · Input state feeds movement calculation.
- Velocity → Move Data: updates · Velocity is stored on movement data.
- Move → Move Data: consumes · Movement system applies the movement data.
- Rotation → Move Data: uses · Facing is derived from motion state.
- Animator → Move Data: reads · Animation reflects locomotion state.
- Pickup Range → Item Marks: checks · Distance gate uses item markers.
- Pickup → Inventory: mutates · Pickup transfers items into inventory.
- Drop Range → Inventory: checks · Drop eligibility depends on inventory state.
- Drop → Inventory: mutates · Drop removes items from inventory.
- Create Systems → Player Config: uses · Player creation is driven by config.
- Create Systems → Items Config: uses · Item spawning uses item config.
- Create Systems → Levels Config: uses · Level creation uses level config.
- Create Systems → Level Data: creates · Level entity data is initialized.
- Player Factory → Unit View: binds · Player factory binds gameplay object to view.
- Level Factory → Level View: binds · Level factory binds level object to view.
- Items Factory → Item Marks: creates · Items factory produces item entities/data.
- Level Service → Game State: updates · Level service contributes shared state.
- Score Service → Game State: updates · Score service contributes shared state.
- Main Canvas → Inventory: reflects · UI shows stack/inventory status.
- Main Canvas → Score Service: observes · UI can react to score changes.
- Player Factory → Player Config: uses · Player factory reads player tuning.
- Level Factory → Levels Config: uses · Level factory reads level tuning.
- Items Factory → Items Config: uses · Item factory reads item tuning.
