# supakorn-p/vunique-game architecture

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

- Interactive diagram: https://gitdiagram.com/supakorn-p/vunique-game
- Repository: https://github.com/supakorn-p/vunique-game

## Overview

Raveyard is a chart-driven rhythm game: it plays chart audio, dispatches beat-timed events, collects player inputs, and judges those inputs against charted orders. The sampled runtime supports this workflow and sprite rendering; the README is only a placeholder, so broader capabilities described by the GDD filenames cannot be verified here. The chart, sound, and texture directories are included as assets, but their formats and use beyond sampled code are not inferred.

Main entry points: [`project/_scenes/Gameplay.cs`](https://github.com/supakorn-p/vunique-game/blob/main/project/_scenes/Gameplay.cs) (Gameplay screen), [`project/_scripts/Gameplay/OrderJudgement.cs`](https://github.com/supakorn-p/vunique-game/blob/main/project/_scripts/Gameplay/OrderJudgement.cs) (Order judgement), [`project/_scripts/Chartloader/Fileloader.cs`](https://github.com/supakorn-p/vunique-game/blob/main/project/_scripts/Chartloader/Fileloader.cs) (Chart loader), [`project/_scripts/Gameplay/Timeline.cs`](https://github.com/supakorn-p/vunique-game/blob/main/project/_scripts/Gameplay/Timeline.cs) (Event timeline)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_game["Game runtime"]
  node_game1["Game window<br/>[Game1.cs]"]
  node_gameplay["Gameplay screen<br/>[Gameplay.cs]"]
end

subgraph group_chart["Chart and timing"]
  node_charts["Chart files"]
  node_fileloader["Chart loader<br/>[Fileloader.cs]"]
  node_eventparams["Event parameters<br/>[EventParams.cs]"]
  node_timeline["Event timeline<br/>[Timeline.cs]"]
  node_recordplayer["Record player<br/>[Recordplayer.cs]"]
  node_wavstream["WAV stream<br/>[WAVStream.cs]"]
end

subgraph group_judgement["Input and judgement"]
  node_judgement["Order judgement<br/>[OrderJudgement.cs]"]
  node_sounds["Gameplay sounds"]
end

subgraph group_visuals["Sprite rendering"]
  node_spriteobject["Sprite object<br/>[SpriteObject.cs]"]
  node_spritekeeper["Sprite registry<br/>[Spritekeeper.cs]"]
  node_textures["Textures"]
end

node_player(("Player"))
node_keyboard(("Keyboard"))

node_player -->|"launches"| node_game1
node_game1 -->|"shows screen"| node_gameplay
node_gameplay -->|"selects chart"| node_charts
node_gameplay -->|"loads chart"| node_fileloader
node_fileloader -->|"parses parameters"| node_eventparams
node_fileloader -->|"loads audio"| node_wavstream
node_gameplay -->|"adds events"| node_timeline
node_gameplay -->|"starts playback"| node_recordplayer
node_recordplayer -->|"controls stream"| node_wavstream
node_gameplay -->|"reads beat time"| node_recordplayer
node_gameplay -->|"advances timeline"| node_timeline
node_timeline -->|"dispatches events"| node_gameplay
node_gameplay -->|"routes order events"| node_judgement
node_keyboard -->|"provides key presses"| node_judgement
node_gameplay -->|"updates judgement"| node_judgement
node_judgement -->|"reports results"| node_gameplay
node_gameplay -->|"plays feedback"| node_sounds
node_gameplay -->|"loads texture"| node_textures
node_gameplay -->|"creates sprite"| node_spriteobject
node_spriteobject -->|"registers sprite"| node_spritekeeper
node_gameplay -->|"reads active sprites"| node_spritekeeper
node_gameplay -->|"draws animation"| node_spriteobject

click node_game1 "https://github.com/supakorn-p/vunique-game/blob/main/project/Game1.cs"
click node_gameplay "https://github.com/supakorn-p/vunique-game/blob/main/project/_scenes/Gameplay.cs"
click node_charts "https://github.com/supakorn-p/vunique-game/tree/main/project/_charts"
click node_fileloader "https://github.com/supakorn-p/vunique-game/blob/main/project/_scripts/Chartloader/Fileloader.cs"
click node_eventparams "https://github.com/supakorn-p/vunique-game/blob/main/project/_scripts/Gameplay/EventParams.cs"
click node_timeline "https://github.com/supakorn-p/vunique-game/blob/main/project/_scripts/Gameplay/Timeline.cs"
click node_recordplayer "https://github.com/supakorn-p/vunique-game/blob/main/project/_scripts/Audio/Recordplayer.cs"
click node_wavstream "https://github.com/supakorn-p/vunique-game/blob/main/project/_scripts/Audio/WAVStream.cs"
click node_judgement "https://github.com/supakorn-p/vunique-game/blob/main/project/_scripts/Gameplay/OrderJudgement.cs"
click node_sounds "https://github.com/supakorn-p/vunique-game/tree/main/project/_sounds"
click node_spriteobject "https://github.com/supakorn-p/vunique-game/blob/main/project/_scripts/Gameplay/SpriteObject.cs"
click node_spritekeeper "https://github.com/supakorn-p/vunique-game/blob/main/project/_scripts/Gameplay/Spritekeeper.cs"
click node_textures "https://github.com/supakorn-p/vunique-game/tree/main/project/_textures"

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_game1,node_gameplay toneBlue
class node_charts,node_fileloader,node_eventparams,node_timeline,node_recordplayer,node_wavstream toneAmber
class node_judgement,node_sounds toneMint
class node_spriteobject,node_spritekeeper,node_textures toneRose
class node_player,node_keyboard toneIndigo
```

## Components

### Game runtime

- [Game window](https://github.com/supakorn-p/vunique-game/blob/main/project/Game1.cs): `project/Game1.cs`
- [Gameplay screen](https://github.com/supakorn-p/vunique-game/blob/main/project/_scenes/Gameplay.cs): `project/_scenes/Gameplay.cs`

### Chart and timing

- [Chart files](https://github.com/supakorn-p/vunique-game/tree/main/project/_charts): `project/_charts`
- [Chart loader](https://github.com/supakorn-p/vunique-game/blob/main/project/_scripts/Chartloader/Fileloader.cs): `project/_scripts/Chartloader/Fileloader.cs`
- [Event parameters](https://github.com/supakorn-p/vunique-game/blob/main/project/_scripts/Gameplay/EventParams.cs): `project/_scripts/Gameplay/EventParams.cs`
- [Event timeline](https://github.com/supakorn-p/vunique-game/blob/main/project/_scripts/Gameplay/Timeline.cs): `project/_scripts/Gameplay/Timeline.cs`
- [Record player](https://github.com/supakorn-p/vunique-game/blob/main/project/_scripts/Audio/Recordplayer.cs): `project/_scripts/Audio/Recordplayer.cs`
- [WAV stream](https://github.com/supakorn-p/vunique-game/blob/main/project/_scripts/Audio/WAVStream.cs): `project/_scripts/Audio/WAVStream.cs`

### Input and judgement

- [Order judgement](https://github.com/supakorn-p/vunique-game/blob/main/project/_scripts/Gameplay/OrderJudgement.cs): `project/_scripts/Gameplay/OrderJudgement.cs`
- [Gameplay sounds](https://github.com/supakorn-p/vunique-game/tree/main/project/_sounds): `project/_sounds`

### Sprite rendering

- [Sprite object](https://github.com/supakorn-p/vunique-game/blob/main/project/_scripts/Gameplay/SpriteObject.cs): `project/_scripts/Gameplay/SpriteObject.cs`
- [Sprite registry](https://github.com/supakorn-p/vunique-game/blob/main/project/_scripts/Gameplay/Spritekeeper.cs): `project/_scripts/Gameplay/Spritekeeper.cs`
- [Textures](https://github.com/supakorn-p/vunique-game/tree/main/project/_textures): `project/_textures`

### Other components

- **Player**
- **Keyboard**

## Connections

- Player → Game window: launches
- Game window → Gameplay screen: shows screen
- Gameplay screen → Chart files: selects chart
- Gameplay screen → Chart loader: loads chart
- Chart loader → Event parameters: parses parameters
- Chart loader → WAV stream: loads audio
- Gameplay screen → Event timeline: adds events
- Gameplay screen → Record player: starts playback
- Record player → WAV stream: controls stream
- Gameplay screen → Record player: reads beat time
- Gameplay screen → Event timeline: advances timeline
- Event timeline → Gameplay screen: dispatches events
- Gameplay screen → Order judgement: routes order events
- Keyboard → Order judgement: provides key presses
- Gameplay screen → Order judgement: updates judgement
- Order judgement → Gameplay screen: reports results
- Gameplay screen → Gameplay sounds: plays feedback
- Gameplay screen → Textures: loads texture
- Gameplay screen → Sprite object: creates sprite
- Sprite object → Sprite registry: registers sprite
- Gameplay screen → Sprite registry: reads active sprites
- Gameplay screen → Sprite object: draws animation
