Ga naar hoofdinhoud

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

ComponentTechnologieVersie
Game EngineGodot4.5+
ScriptingGDScript4.0
MultiplayerSpacetimeDB SDK1.0+
AssetsPNG/SVG sprites-
AudioOGG/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

  1. Open project in Godot
  2. Zorg dat SpacetimeDB draait
  3. Run de game (F5)

In Deze Sectie