Ga naar hoofdinhoud

Project Structuur

Overzicht van de codebase organisatie.

Directory Structuur

milenas-cozy-treehouse-club/

├── project.godot # Godot project configuratie

├── scenes/ # Scene bestanden (.tscn)
│ ├── main_menu.tscn # Hoofdmenu
│ ├── character_builder.tscn # Karakter creator
│ ├── game.tscn # Hoofdgame (home scene)
│ ├── boomhut.tscn # Treehouse interior
│ ├── zevensprong.tscn # World hub/kruispunt
│ ├── loading_screen.tscn # Laadscherm
│ ├── map_browser.tscn # Community maps browser
│ ├── map_designer.tscn # Map editor
│ ├── walkable_editor.tscn # Walkable area editor
│ └── ui/ # UI scene componenten
│ ├── inventory_panel.tscn
│ ├── item_slot.tscn
│ ├── resource_hud.tscn
│ └── storage_ui.tscn

├── scripts/ # GDScript bestanden (.gd)
│ ├── game_state.gd # Autoload - global state
│ ├── main_menu.gd # Menu logica
│ ├── character_builder.gd # Karakter customization
│ ├── game.gd # Hoofd gameplay controller
│ ├── boomhut.gd # Treehouse scene logica
│ ├── zevensprong.gd # Hub scene logica
│ │
│ ├── inventory/ # Inventory systeem
│ │ ├── inventory_manager.gd
│ │ ├── item_database.gd
│ │ ├── item_slot.gd
│ │ ├── container_ui.gd
│ │ ├── inventory_panel.gd
│ │ ├── resource_bar.gd
│ │ └── storage_ui.gd
│ │
│ └── map_designer/ # Map editor
│ ├── map_designer.gd
│ ├── map_data.gd
│ └── map_io.gd

├── assets/ # Game assets
│ ├── character/ # Karakter sprites
│ │ ├── body/ # Lichaam varianten
│ │ ├── clothes/ # Kleding opties
│ │ ├── eyes/ # Ogen varianten
│ │ ├── faces/ # Gezichtsuitdrukkingen
│ │ └── hair/ # Kapsels
│ │
│ ├── ui/ # UI elementen
│ │ ├── buttons/
│ │ ├── icons/
│ │ ├── sliders/
│ │ └── panels/
│ │
│ ├── scenes/ # Scene achtergronden
│ │ ├── boomhut_home.png
│ │ └── zevensprong.png
│ │
│ └── fonts/ # Custom fonts

├── addons/ # Godot plugins
│ ├── SpacetimeDB/ # Multiplayer SDK
│ │ ├── core/ # Core classes
│ │ ├── codegen/ # Binding generator
│ │ └── nodes/ # Custom nodes
│ │
│ ├── TileMapDual/ # Dual grid tilemaps
│ └── TileCropper/ # Asset cropping tool

├── spacetime_bindings/ # Auto-generated
│ └── schema/
│ └── types/ # Database type bindings

└── server/ # Backend (Rust)
├── Cargo.toml
└── src/
└── lib.rs

Belangrijke Bestanden

Autoloads

ScriptSingleton NaamBeschrijving
scripts/game_state.gdGameStateGlobal state management

Scenes per Functie

FunctieSceneScript
Hoofdmenumain_menu.tscnmain_menu.gd
Karakter makencharacter_builder.tscncharacter_builder.gd
Gameplaygame.tscngame.gd
Treehouseboomhut.tscnboomhut.gd
World Hubzevensprong.tscnzevensprong.gd
Map Editormap_designer.tscnmap_designer/map_designer.gd

Code Conventies

Naamgeving

# Variabelen: snake_case
var player_health: int = 100
var is_moving: bool = false

# Constanten: UPPER_SNAKE_CASE
const MAX_SPEED: float = 200.0
const BODY_PATH = "res://assets/character/body/body-girl3.png"

# Functies: snake_case
func _ready() -> void:
func _on_button_pressed() -> void:
func calculate_damage(base: int) -> int:

# Signalen: snake_case
signal health_changed(new_value: int)
signal inventory_updated

Bestandsnamen

  • Scripts: snake_case.gd
  • Scenes: snake_case.tscn
  • Assets: kebab-case.png

Scene Structuur

SceneRoot (Control/Node2D)
├── UI/
│ ├── HUD
│ └── Menus
├── World/
│ ├── Background
│ ├── Characters
│ └── Objects
└── Systems/
└── Managers

Patronen

Scene Transitie

# Naar andere scene
get_tree().change_scene_to_file("res://scenes/game.tscn")

# Met fade effect
var tween = create_tween()
tween.tween_property(fade_rect, "color:a", 1.0, 0.5)
tween.tween_callback(func():
get_tree().change_scene_to_file("res://scenes/next.tscn")
)

Button Effects

func _setup_button_effects(button: TextureButton) -> void:
button.mouse_entered.connect(_on_hover.bind(button))
button.mouse_exited.connect(_on_unhover.bind(button))

func _on_hover(button: TextureButton) -> void:
var tween = create_tween()
tween.tween_property(button, "scale", Vector2(1.05, 1.05), 0.1)

SpacetimeDB Pattern

# In script
var _client = null

func setup(client, identity: String) -> void:
_client = client
_connect_to_db_updates()

func _connect_to_db_updates() -> void:
var db = _client.db
db.player.subscribe_to_inserts(&"Player", _on_player_joined)

Volgende Stappen