# terki0n/simple-match3 architecture

> Architecture diagram of the GitHub repository terki0n/simple-match3, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/terki0n/simple-match3
- Repository: https://github.com/terki0n/simple-match3

## Overview

Simple Match-3 is a configurable Unity game: players swap adjacent gems, matches are detected and cleared, gems collapse and refill, and cascades resolve automatically. The graph preserves those documented gameplay stages and includes the configuration and model/view layer. Source excerpts were unavailable, so links reflect README-described gameplay rather than verified method calls; implementation paths are taken from the repository tree.

Main entry points: [`Assets/Scripts/GamePlay/GameFlowController.cs`](https://github.com/terki0n/simple-match3/blob/main/Assets/Scripts/GamePlay/GameFlowController.cs) (Game Flow), [`Assets/Scripts/Match Logic/MatchDetector.cs`](https://github.com/terki0n/simple-match3/blob/main/Assets/Scripts/Match%20Logic/MatchDetector.cs) (Match Detector), [`Assets/Scripts/GamePlay/GemInputController.cs`](https://github.com/terki0n/simple-match3/blob/main/Assets/Scripts/GamePlay/GemInputController.cs) (Gem Input), [`Assets/Scripts/GamePlay/GemSwapper.cs`](https://github.com/terki0n/simple-match3/blob/main/Assets/Scripts/GamePlay/GemSwapper.cs) (Gem Swapper)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_gameplay["Gameplay"]
  node_input["Gem Input"]
  node_swap["Gem Swapper<br/>[GemSwapper.cs]"]
  node_flow["Game Flow"]
  node_match["Match Detector<br/>[MatchDetector.cs]"]
  node_result["Match Result<br/>[MatchResult.cs]"]
  node_collapse["Board Collapse"]
  node_refill["Board Refill"]
  node_generator["Board Generator<br/>[BoardGenerator.cs]"]
end

subgraph group_domain["Board And Gems"]
  node_board["Board Model<br/>[BoardModel.cs]"]
  node_cell["Board Cell<br/>[BoardCell.cs]"]
  node_position["Board Position<br/>[BoardPosition.cs]"]
  node_gem["Gem Model<br/>[GemModel.cs]"]
  node_gemtype["Gem Type<br/>[GemType.cs]"]
end

subgraph group_presentation["Configuration And View"]
  node_boardconfig["Board Config<br/>[BoardConfig.cs]"]
  node_gemconfig["Gem Config<br/>[GemConfig.cs]"]
  node_boardasset["Board Settings<br/>[Board1.asset]"]
  node_gemassets["Gem Definitions"]
  node_boardview["Board View<br/>[BoardView.cs]"]
  node_gemview["Gem View<br/>[GemView.cs]"]
end

node_player(("Player"))

node_player -->|"swipes"| node_input
node_input -->|"requests swap"| node_swap
node_swap -->|"tests matches"| node_match
node_match -->|"produces matches"| node_result
node_flow -->|"resolves matches"| node_match
node_flow -->|"clears and collapses"| node_collapse
node_flow -->|"refills board"| node_refill
node_flow -->|"checks cascades"| node_match
node_boardasset -->|"configures board"| node_boardconfig
node_gemassets -->|"defines gems"| node_gemconfig
node_boardview -->|"presents board"| node_board
node_gemview -->|"presents gems"| node_gem

click node_input "https://github.com/terki0n/simple-match3/blob/main/Assets/Scripts/GamePlay/GemInputController.cs"
click node_swap "https://github.com/terki0n/simple-match3/blob/main/Assets/Scripts/GamePlay/GemSwapper.cs"
click node_flow "https://github.com/terki0n/simple-match3/blob/main/Assets/Scripts/GamePlay/GameFlowController.cs"
click node_match "https://github.com/terki0n/simple-match3/blob/main/Assets/Scripts/Match%20Logic/MatchDetector.cs"
click node_result "https://github.com/terki0n/simple-match3/blob/main/Assets/Scripts/Match%20Logic/MatchResult.cs"
click node_collapse "https://github.com/terki0n/simple-match3/blob/main/Assets/Scripts/GamePlay/BoardCollapseSystem.cs"
click node_refill "https://github.com/terki0n/simple-match3/blob/main/Assets/Scripts/GamePlay/BoardRefillSystem.cs"
click node_generator "https://github.com/terki0n/simple-match3/blob/main/Assets/Scripts/GamePlay/BoardGenerator.cs"
click node_board "https://github.com/terki0n/simple-match3/blob/main/Assets/Scripts/Core/Board/BoardModel.cs"
click node_cell "https://github.com/terki0n/simple-match3/blob/main/Assets/Scripts/Core/Board/BoardCell.cs"
click node_position "https://github.com/terki0n/simple-match3/blob/main/Assets/Scripts/Core/Board/BoardPosition.cs"
click node_gem "https://github.com/terki0n/simple-match3/blob/main/Assets/Scripts/Core/Gem/GemModel.cs"
click node_gemtype "https://github.com/terki0n/simple-match3/blob/main/Assets/Scripts/Core/Gem/GemType.cs"
click node_boardconfig "https://github.com/terki0n/simple-match3/blob/main/Assets/Scripts/Config/BoardConfig.cs"
click node_gemconfig "https://github.com/terki0n/simple-match3/blob/main/Assets/Scripts/Config/GemConfig.cs"
click node_boardasset "https://github.com/terki0n/simple-match3/blob/main/Assets/ScriptableObjects/Board1.asset"
click node_gemassets "https://github.com/terki0n/simple-match3/tree/main/Assets/ScriptableObjects"
click node_boardview "https://github.com/terki0n/simple-match3/blob/main/Assets/Scripts/View/BoardView.cs"
click node_gemview "https://github.com/terki0n/simple-match3/blob/main/Assets/Scripts/View/GemView.cs"

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_input,node_swap,node_flow,node_match,node_result,node_collapse,node_refill,node_generator toneBlue
class node_board,node_cell,node_position,node_gem,node_gemtype toneAmber
class node_boardconfig,node_gemconfig,node_boardasset,node_gemassets,node_boardview,node_gemview toneMint
class node_player toneIndigo
```

## Components

### Gameplay

- [Gem Input](https://github.com/terki0n/simple-match3/blob/main/Assets/Scripts/GamePlay/GemInputController.cs): `Assets/Scripts/GamePlay/GemInputController.cs`
- [Gem Swapper](https://github.com/terki0n/simple-match3/blob/main/Assets/Scripts/GamePlay/GemSwapper.cs): `Assets/Scripts/GamePlay/GemSwapper.cs`
- [Game Flow](https://github.com/terki0n/simple-match3/blob/main/Assets/Scripts/GamePlay/GameFlowController.cs): `Assets/Scripts/GamePlay/GameFlowController.cs`
- [Match Detector](https://github.com/terki0n/simple-match3/blob/main/Assets/Scripts/Match%20Logic/MatchDetector.cs): `Assets/Scripts/Match Logic/MatchDetector.cs`
- [Match Result](https://github.com/terki0n/simple-match3/blob/main/Assets/Scripts/Match%20Logic/MatchResult.cs): `Assets/Scripts/Match Logic/MatchResult.cs`
- [Board Collapse](https://github.com/terki0n/simple-match3/blob/main/Assets/Scripts/GamePlay/BoardCollapseSystem.cs): `Assets/Scripts/GamePlay/BoardCollapseSystem.cs`
- [Board Refill](https://github.com/terki0n/simple-match3/blob/main/Assets/Scripts/GamePlay/BoardRefillSystem.cs): `Assets/Scripts/GamePlay/BoardRefillSystem.cs`
- [Board Generator](https://github.com/terki0n/simple-match3/blob/main/Assets/Scripts/GamePlay/BoardGenerator.cs): `Assets/Scripts/GamePlay/BoardGenerator.cs`

### Board And Gems

- [Board Model](https://github.com/terki0n/simple-match3/blob/main/Assets/Scripts/Core/Board/BoardModel.cs): `Assets/Scripts/Core/Board/BoardModel.cs`
- [Board Cell](https://github.com/terki0n/simple-match3/blob/main/Assets/Scripts/Core/Board/BoardCell.cs): `Assets/Scripts/Core/Board/BoardCell.cs`
- [Board Position](https://github.com/terki0n/simple-match3/blob/main/Assets/Scripts/Core/Board/BoardPosition.cs): `Assets/Scripts/Core/Board/BoardPosition.cs`
- [Gem Model](https://github.com/terki0n/simple-match3/blob/main/Assets/Scripts/Core/Gem/GemModel.cs): `Assets/Scripts/Core/Gem/GemModel.cs`
- [Gem Type](https://github.com/terki0n/simple-match3/blob/main/Assets/Scripts/Core/Gem/GemType.cs): `Assets/Scripts/Core/Gem/GemType.cs`

### Configuration And View

- [Board Config](https://github.com/terki0n/simple-match3/blob/main/Assets/Scripts/Config/BoardConfig.cs): `Assets/Scripts/Config/BoardConfig.cs`
- [Gem Config](https://github.com/terki0n/simple-match3/blob/main/Assets/Scripts/Config/GemConfig.cs): `Assets/Scripts/Config/GemConfig.cs`
- [Board Settings](https://github.com/terki0n/simple-match3/blob/main/Assets/ScriptableObjects/Board1.asset): `Assets/ScriptableObjects/Board1.asset`
- [Gem Definitions](https://github.com/terki0n/simple-match3/tree/main/Assets/ScriptableObjects): `Assets/ScriptableObjects`
- [Board View](https://github.com/terki0n/simple-match3/blob/main/Assets/Scripts/View/BoardView.cs): `Assets/Scripts/View/BoardView.cs`
- [Gem View](https://github.com/terki0n/simple-match3/blob/main/Assets/Scripts/View/GemView.cs): `Assets/Scripts/View/GemView.cs`

### Other components

- **Player**

## Connections

- Player → Gem Input: swipes
- Gem Input → Gem Swapper: requests swap
- Gem Swapper → Match Detector: tests matches
- Match Detector → Match Result: produces matches
- Game Flow → Match Detector: resolves matches
- Game Flow → Board Collapse: clears and collapses
- Game Flow → Board Refill: refills board
- Game Flow → Match Detector: checks cascades
- Board Settings → Board Config: configures board
- Gem Definitions → Gem Config: defines gems
- Board View → Board Model: presents board
- Gem View → Gem Model: presents gems
