- CharacterClass mit Klassen (Krieger, Schurke, Magier) und unbewaffnetem Schaden - Equipment-System mit 7 Slots, Seltenheiten und Stats - Inventar-System mit 20 Slots und Gold - LootTable/LootEntry für Gegner-Drops - Character Panel (C) mit Stats und Equipment-Anzeige - Inventory Panel (I) mit Item-Grid und Tooltips - Klassenauswahl-Menü bei Spielstart - Waffenschaden in Equipment-Spalte, unbewaffnet klassenabhängig Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
81 lines
2.6 KiB
GDScript
81 lines
2.6 KiB
GDScript
# ClassSelectionMenu.gd
|
|
# Menü zur Auswahl der Charakterklasse beim Spielstart
|
|
extends CanvasLayer
|
|
|
|
signal class_selected(character_class: CharacterClass)
|
|
|
|
const WARRIOR_CLASS = preload("res://classes/warrior.tres")
|
|
const ROGUE_CLASS = preload("res://classes/rogue.tres")
|
|
const MAGE_CLASS = preload("res://classes/mage.tres")
|
|
|
|
var selected_class: CharacterClass = null
|
|
|
|
@onready var panel = $Panel
|
|
@onready var warrior_btn = $Panel/VBoxContainer/ClassButtons/WarriorBtn
|
|
@onready var rogue_btn = $Panel/VBoxContainer/ClassButtons/RogueBtn
|
|
@onready var mage_btn = $Panel/VBoxContainer/ClassButtons/MageBtn
|
|
@onready var start_btn = $Panel/VBoxContainer/StartBtn
|
|
@onready var class_info = $Panel/VBoxContainer/ClassInfo
|
|
@onready var stats_label = $Panel/VBoxContainer/StatsLabel
|
|
|
|
func _ready():
|
|
# Spiel pausieren während Menü offen
|
|
get_tree().paused = true
|
|
process_mode = Node.PROCESS_MODE_ALWAYS
|
|
|
|
# Buttons verbinden
|
|
warrior_btn.pressed.connect(_on_warrior_selected)
|
|
rogue_btn.pressed.connect(_on_rogue_selected)
|
|
mage_btn.pressed.connect(_on_mage_selected)
|
|
start_btn.pressed.connect(_on_start_pressed)
|
|
|
|
# Start-Button deaktiviert bis Klasse gewählt
|
|
start_btn.disabled = true
|
|
class_info.text = "Wähle eine Klasse!"
|
|
stats_label.text = ""
|
|
|
|
func _on_warrior_selected():
|
|
selected_class = WARRIOR_CLASS
|
|
_update_selection("Krieger", WARRIOR_CLASS)
|
|
_highlight_button(warrior_btn)
|
|
|
|
func _on_rogue_selected():
|
|
selected_class = ROGUE_CLASS
|
|
_update_selection("Schurke", ROGUE_CLASS)
|
|
_highlight_button(rogue_btn)
|
|
|
|
func _on_mage_selected():
|
|
selected_class = MAGE_CLASS
|
|
_update_selection("Magier", MAGE_CLASS)
|
|
_highlight_button(mage_btn)
|
|
|
|
func _update_selection(cls_name: String, char_class: CharacterClass):
|
|
var main_stat_name = ""
|
|
match char_class.main_stat:
|
|
CharacterClass.MainStat.STRENGTH:
|
|
main_stat_name = "Stärke"
|
|
CharacterClass.MainStat.AGILITY:
|
|
main_stat_name = "Beweglichkeit"
|
|
CharacterClass.MainStat.INTELLIGENCE:
|
|
main_stat_name = "Intelligenz"
|
|
|
|
class_info.text = cls_name + " - Haupt-Stat: " + main_stat_name
|
|
stats_label.text = "STR: " + str(char_class.base_strength) + " AGI: " + str(char_class.base_agility) + " INT: " + str(char_class.base_intelligence) + " STA: " + str(char_class.base_stamina)
|
|
start_btn.disabled = false
|
|
|
|
func _highlight_button(active_btn: Button):
|
|
# Alle Buttons zurücksetzen
|
|
warrior_btn.modulate = Color(1, 1, 1)
|
|
rogue_btn.modulate = Color(1, 1, 1)
|
|
mage_btn.modulate = Color(1, 1, 1)
|
|
# Aktiven Button hervorheben
|
|
active_btn.modulate = Color(1, 0.8, 0.2)
|
|
|
|
func _on_start_pressed():
|
|
if selected_class == null:
|
|
return
|
|
|
|
# Signal senden und Menü schließen
|
|
class_selected.emit(selected_class)
|
|
get_tree().paused = false
|
|
queue_free()
|