Ga naar hoofdinhoud

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

ButtonActieDoel Scene
PlayStart/hervat gamegame.tscn of character_builder.tscn
CharacterKarakter aanpassencharacter_builder.tscn
Map DesignerMap editor openenmap_browser.tscn
SettingsInstellingen(TODO)
QuitSpel 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

AssetPadBeschrijving
Backgroundassets/ui/menu_background.png1152x648 achtergrond
Logoassets/ui/logo.pngGame logo
Play Buttonassets/ui/buttons/play.pngSpelen knop
Character Buttonassets/ui/buttons/character.pngKarakter knop
Settings Buttonassets/ui/buttons/settings.pngInstellingen knop
Quit Buttonassets/ui/buttons/quit.pngAfsluiten knop

Toekomstige Features

  • Animated background
  • Sound effects bij hover/click
  • Online status indicator
  • News/update banner
  • Account info display

Volgende