Main Menu
Het hoofdmenu en startscherm van de game.
Scene Structuur
MainMenu (Control)
├── Background
│ └── TextureRect (menu achtergrond)
├── Logo
│ └── TextureRect (game logo)
├── ButtonContainer (VBoxContainer)
│ ├── PlayButton (TextureButton)
│ ├── CharacterButton (TextureButton)
│ ├── MapDesignerButton (TextureButton)
│ ├── SettingsButton (TextureButton)
│ └── QuitButton (TextureButton)
└── VersionLabel
Bestanden
- Scene:
scenes/main_menu.tscn - Script:
scripts/main_menu.gd
Functionaliteit
Menu Buttons
| Button | Actie | Doel Scene |
|---|---|---|
| Play | Start/hervat game | game.tscn of character_builder.tscn |
| Character | Karakter aanpassen | character_builder.tscn |
| Map Designer | Map editor openen | map_browser.tscn |
| Settings | Instellingen | (TODO) |
| Quit | Spel afsluiten | - |
Play Logic
func _on_play_pressed() -> void:
# Check if there's a saved game
var saved_scene = GameState.get_saved_scene()
if saved_scene != "" and GameState.get_character().size() > 0:
# Resume from saved scene
get_tree().change_scene_to_file(saved_scene)
else:
# Start new game with character builder
get_tree().change_scene_to_file("res://scenes/character_builder.tscn")
Button Effecten
Hover Effect
func _on_button_hover(button: TextureButton) -> void:
var tween = create_tween()
tween.tween_property(button, "modulate", Color(1.15, 1.15, 1.15, 1.0), 0.1)
tween.parallel().tween_property(button, "scale", Vector2(1.05, 1.05), 0.1)
func _on_button_unhover(button: TextureButton) -> void:
var tween = create_tween()
tween.tween_property(button, "modulate", Color(1.0, 1.0, 1.0, 1.0), 0.1)
tween.parallel().tween_property(button, "scale", Vector2(1.0, 1.0), 0.1)
Press Effect
func _on_button_down(button: TextureButton) -> void:
var tween = create_tween()
tween.tween_property(button, "modulate", Color(0.8, 0.8, 0.8, 1.0), 0.05)
tween.parallel().tween_property(button, "scale", Vector2(0.95, 0.95), 0.05)
func _on_button_up(button: TextureButton) -> void:
var tween = create_tween()
tween.tween_property(button, "modulate", Color(1.15, 1.15, 1.15, 1.0), 0.1)
tween.parallel().tween_property(button, "scale", Vector2(1.05, 1.05), 0.1)
Setup voor Alle Buttons
func _ready() -> void:
for button in [play_button, character_button, map_designer_button, settings_button, quit_button]:
_setup_button_effects(button)
func _setup_button_effects(button: TextureButton) -> void:
button.mouse_entered.connect(_on_button_hover.bind(button))
button.mouse_exited.connect(_on_button_unhover.bind(button))
button.button_down.connect(_on_button_down.bind(button))
button.button_up.connect(_on_button_up.bind(button))
UI Layout
Button Container
ButtonContainer (VBoxContainer)
- Custom Minimum Size: 300 x 0
- Theme Override → Separations → separation: 20
- Anchors: Center
Texture Buttons
TextureButton
- Stretch Mode: Keep Aspect Centered
- Ignore Texture Size: true
- Custom Minimum Size: 280 x 70
Assets Nodig
| Asset | Pad | Beschrijving |
|---|---|---|
| Background | assets/ui/menu_background.png | 1152x648 achtergrond |
| Logo | assets/ui/logo.png | Game logo |
| Play Button | assets/ui/buttons/play.png | Spelen knop |
| Character Button | assets/ui/buttons/character.png | Karakter knop |
| Settings Button | assets/ui/buttons/settings.png | Instellingen knop |
| Quit Button | assets/ui/buttons/quit.png | Afsluiten knop |
Toekomstige Features
- Animated background
- Sound effects bij hover/click
- Online status indicator
- News/update banner
- Account info display