Game Documentatie
Technische documentatie voor de Godot client van Milena's Cozy Treehouse Club.
Architectuur Overzicht
┌────────────────────────────────────────────────────────────┐
│ Godot 4.5 Client │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ Scenes │ │
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │
│ │ │ Main │ │Character│ │ Game │ │ Map │ │ │
│ │ │ Menu │ │ Builder │ │ (World) │ │Designer │ │ │
│ │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ │
│ └──────────────────────────────────────────────────────┘ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ Systems │ │
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │
│ │ │GameState│ │Inventory│ │ UI │ │Movement │ │ │
│ │ │(Autoload)│ │ Manager │ │ System │ │& Path │ │ │
│ │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ │
│ └──────────────────────────────────────────────────────┘ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ SpacetimeDB SDK (Addon) │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌────────────┐ │ │
│ │ │ Connection │ │ Bindings │ │ Reducers │ │ │
│ │ │ (WebSocket)│ │(Auto-gen) │ │ (API) │ │ │
│ │ └─────────────┘ └─────────────┘ └────────────┘ │ │
│ └──────────────────────────────────────────────────────┘ │
└────────────────────────────────────────────────────────────┘
│
▼
┌────────────────────────┐
│ SpacetimeDB │
│ (Rust Backend) │
└────────────────────────┘
Tech Stack
| Component | Technologie | Versie |
|---|---|---|
| Game Engine | Godot | 4.5+ |
| Scripting | GDScript | 4.0 |
| Multiplayer | SpacetimeDB SDK | 1.0+ |
| Assets | PNG/SVG sprites | - |
| Audio | OGG/WAV | - |
Project Structuur
milenas-cozy-treehouse-club/
├── scenes/ # Godot scene bestanden (.tscn)
│ ├── main_menu.tscn
│ ├── character_builder.tscn
│ ├── game.tscn # Hoofd gameplay scene
│ ├── boomhut.tscn # Treehouse interior
│ ├── zevensprong.tscn # World hub
│ └── ui/ # UI componenten
├── scripts/ # GDScript bestanden (.gd)
│ ├── game_state.gd # Global autoload
│ ├── game.gd # Main game logic
│ ├── inventory/ # Inventory systeem
│ └── map_designer/ # Map editor tools
├── assets/ # Game assets
│ ├── character/ # Character sprites
│ ├── ui/ # UI elementen
│ ├── scenes/ # Scene backgrounds
│ └── fonts/ # Custom fonts
├── addons/ # Godot plugins
│ ├── SpacetimeDB/ # Multiplayer SDK
│ ├── TileMapDual/ # Tilemap tools
│ └── TileCropper/ # Asset pipeline
└── spacetime_bindings/ # Auto-generated DB bindings
Kern Concepten
1. GameState (Autoload)
Globale singleton voor:
- Character data persisteren
- Scene state beheren
- Navigatie tussen scenes
2. Scene Flow
Main Menu
│
├── Character Builder ──► Game (Home)
│ │
├── Map Designer ├── Boomhut (Interior)
│ │
└── Settings └── Zevensprong (Hub)
│
├── Andere locaties...
└── Community maps
3. SpacetimeDB Integratie
De game verbindt via WebSocket met SpacetimeDB:
# Verbinding maken
var client = SpacetimeDBClient.new()
client.connect_to_server("ws://localhost:3000", "milenas-treehouse")
# Reducer aanroepen
client.reducers.update_position("game", position.x, position.y, direction, is_moving)
# Database updates ontvangen
client.db.player_online.subscribe_to_inserts(func(player): ...)
Quick Start
Vereisten
- Godot 4.5+ geïnstalleerd
- SpacetimeDB server draaiend (lokaal of remote)
Starten
- Open project in Godot
- Zorg dat SpacetimeDB draait
- Run de game (F5)
In Deze Sectie
- Godot Setup - Ontwikkelomgeving opzetten
- Project Structuur - Codebase navigeren
- SpacetimeDB SDK - Multiplayer integratie
- Scenes - Alle game scenes
- UI Systemen - Interface componenten
- Gameplay - Game mechanics