feat: XP-Leiste unter Aktionsleiste, gleiche Breite, Label zentriert
- XP-Bar: Anker-basiert (0.5/1.0), gleiche Breite wie Actionbar (468px) - XP-Label zentriert: "Level X — current / max XP" - Actionbar 12px nach oben verschoben für XP-Bar Platz - Level-Label und Gold-Label oben links, kompakter Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
616f3d303b
commit
8ddc20683b
2 changed files with 53 additions and 35 deletions
84
hud.gd
84
hud.gd
|
|
@ -214,64 +214,79 @@ func set_slot_cooldown(slot_index: int, remaining_time: float):
|
||||||
func _create_level_ui():
|
func _create_level_ui():
|
||||||
var control = $Control
|
var control = $Control
|
||||||
|
|
||||||
# Level Label
|
# Ressourcen-Bar (Mana/Energie/Wut) - unter HP-Bar, oben links
|
||||||
level_label = Label.new()
|
|
||||||
level_label.name = "LevelLabel"
|
|
||||||
level_label.position = Vector2(20, 55)
|
|
||||||
level_label.add_theme_font_size_override("font_size", 14)
|
|
||||||
level_label.text = "Level 1"
|
|
||||||
control.add_child(level_label)
|
|
||||||
|
|
||||||
# XP Bar
|
|
||||||
xp_bar = ProgressBar.new()
|
|
||||||
xp_bar.name = "XPBar"
|
|
||||||
xp_bar.position = Vector2(80, 55)
|
|
||||||
xp_bar.size = Vector2(140, 18)
|
|
||||||
xp_bar.show_percentage = false
|
|
||||||
xp_bar.value = 0
|
|
||||||
|
|
||||||
# XP Bar Farbe (blau)
|
|
||||||
var xp_style = StyleBoxFlat.new()
|
|
||||||
xp_style.bg_color = Color(0.2, 0.4, 0.9, 1.0)
|
|
||||||
xp_bar.add_theme_stylebox_override("fill", xp_style)
|
|
||||||
|
|
||||||
control.add_child(xp_bar)
|
|
||||||
|
|
||||||
# Ressourcen-Bar (Mana/Energie/Wut) - unter HP-Bar
|
|
||||||
resource_bar = ProgressBar.new()
|
resource_bar = ProgressBar.new()
|
||||||
resource_bar.name = "ResourceBar"
|
resource_bar.name = "ResourceBar"
|
||||||
resource_bar.position = Vector2(20, 50)
|
resource_bar.position = Vector2(20, 50)
|
||||||
resource_bar.size = Vector2(200, 18)
|
resource_bar.size = Vector2(200, 18)
|
||||||
resource_bar.show_percentage = false
|
resource_bar.show_percentage = false
|
||||||
resource_bar.value = 0
|
resource_bar.value = 0
|
||||||
resource_bar.visible = false # Nur sichtbar wenn Klasse Ressource hat
|
resource_bar.visible = false
|
||||||
|
|
||||||
var resource_style = StyleBoxFlat.new()
|
var resource_style = StyleBoxFlat.new()
|
||||||
resource_style.bg_color = Color(0.2, 0.3, 0.9, 1.0) # Blau für Mana (Standard)
|
resource_style.bg_color = Color(0.2, 0.3, 0.9, 1.0)
|
||||||
resource_bar.add_theme_stylebox_override("fill", resource_style)
|
resource_bar.add_theme_stylebox_override("fill", resource_style)
|
||||||
|
|
||||||
resource_label = Label.new()
|
resource_label = Label.new()
|
||||||
resource_label.name = "ResourceLabel"
|
resource_label.name = "ResourceLabel"
|
||||||
resource_label.size = Vector2(200, 20)
|
resource_label.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT)
|
||||||
resource_label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
|
resource_label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
|
||||||
resource_label.vertical_alignment = VERTICAL_ALIGNMENT_CENTER
|
resource_label.vertical_alignment = VERTICAL_ALIGNMENT_CENTER
|
||||||
|
|
||||||
resource_bar.add_child(resource_label)
|
resource_bar.add_child(resource_label)
|
||||||
control.add_child(resource_bar)
|
control.add_child(resource_bar)
|
||||||
|
|
||||||
# Level/XP etwas runter verschieben wegen Ressourcen-Bar
|
# Level Label oben links
|
||||||
level_label.position = Vector2(20, 78)
|
level_label = Label.new()
|
||||||
xp_bar.position = Vector2(80, 78)
|
level_label.name = "LevelLabel"
|
||||||
|
level_label.position = Vector2(20, 74)
|
||||||
|
level_label.add_theme_font_size_override("font_size", 14)
|
||||||
|
level_label.text = "Level 1"
|
||||||
|
control.add_child(level_label)
|
||||||
|
|
||||||
# Gold Label
|
# Gold Label oben links
|
||||||
gold_label = Label.new()
|
gold_label = Label.new()
|
||||||
gold_label.name = "GoldLabel"
|
gold_label.name = "GoldLabel"
|
||||||
gold_label.position = Vector2(20, 102)
|
gold_label.position = Vector2(20, 94)
|
||||||
gold_label.add_theme_font_size_override("font_size", 14)
|
gold_label.add_theme_font_size_override("font_size", 14)
|
||||||
gold_label.add_theme_color_override("font_color", Color(1, 0.85, 0, 1))
|
gold_label.add_theme_color_override("font_color", Color(1, 0.85, 0, 1))
|
||||||
gold_label.text = "0 Gold"
|
gold_label.text = "0 Gold"
|
||||||
control.add_child(gold_label)
|
control.add_child(gold_label)
|
||||||
|
|
||||||
|
# XP Bar — gleiche Breite wie Actionbar (468px), unten mittig, unter der Actionbar
|
||||||
|
xp_bar = ProgressBar.new()
|
||||||
|
xp_bar.name = "XPBar"
|
||||||
|
xp_bar.anchor_left = 0.5
|
||||||
|
xp_bar.anchor_top = 1.0
|
||||||
|
xp_bar.anchor_right = 0.5
|
||||||
|
xp_bar.anchor_bottom = 1.0
|
||||||
|
xp_bar.offset_left = -234.0
|
||||||
|
xp_bar.offset_right = 234.0
|
||||||
|
xp_bar.offset_top = -12.0
|
||||||
|
xp_bar.offset_bottom = 0.0
|
||||||
|
xp_bar.show_percentage = false
|
||||||
|
xp_bar.value = 0
|
||||||
|
xp_bar.mouse_filter = Control.MOUSE_FILTER_IGNORE
|
||||||
|
|
||||||
|
var xp_style = StyleBoxFlat.new()
|
||||||
|
xp_style.bg_color = Color(0.15, 0.5, 0.9, 1.0)
|
||||||
|
xp_bar.add_theme_stylebox_override("fill", xp_style)
|
||||||
|
|
||||||
|
var xp_bg = StyleBoxFlat.new()
|
||||||
|
xp_bg.bg_color = Color(0.1, 0.1, 0.15, 0.85)
|
||||||
|
xp_bar.add_theme_stylebox_override("background", xp_bg)
|
||||||
|
|
||||||
|
# XP Label zentriert in der Bar
|
||||||
|
var xp_label = Label.new()
|
||||||
|
xp_label.name = "XPLabel"
|
||||||
|
xp_label.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT)
|
||||||
|
xp_label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
|
||||||
|
xp_label.vertical_alignment = VERTICAL_ALIGNMENT_CENTER
|
||||||
|
xp_label.add_theme_font_size_override("font_size", 10)
|
||||||
|
xp_label.add_theme_color_override("font_color", Color(1, 1, 1, 0.9))
|
||||||
|
xp_label.mouse_filter = Control.MOUSE_FILTER_IGNORE
|
||||||
|
xp_bar.add_child(xp_label)
|
||||||
|
control.add_child(xp_bar)
|
||||||
|
|
||||||
# Castbar — direkt über der Aktionsleiste positioniert
|
# Castbar — direkt über der Aktionsleiste positioniert
|
||||||
_create_castbar()
|
_create_castbar()
|
||||||
|
|
||||||
|
|
@ -336,6 +351,9 @@ func update_level(level: int, current_xp: int, xp_to_next: int):
|
||||||
if xp_bar:
|
if xp_bar:
|
||||||
xp_bar.max_value = xp_to_next
|
xp_bar.max_value = xp_to_next
|
||||||
xp_bar.value = current_xp
|
xp_bar.value = current_xp
|
||||||
|
var xp_label = xp_bar.get_node_or_null("XPLabel")
|
||||||
|
if xp_label:
|
||||||
|
xp_label.text = "Level %d — %d / %d XP" % [level, current_xp, xp_to_next]
|
||||||
|
|
||||||
# Aktions-Slot kurz golden hervorheben (0.1s)
|
# Aktions-Slot kurz golden hervorheben (0.1s)
|
||||||
func set_active_slot(index):
|
func set_active_slot(index):
|
||||||
|
|
|
||||||
4
hud.tscn
4
hud.tscn
|
|
@ -43,9 +43,9 @@ anchor_top = 1.0
|
||||||
anchor_right = 0.5
|
anchor_right = 0.5
|
||||||
anchor_bottom = 1.0
|
anchor_bottom = 1.0
|
||||||
offset_left = -234.0
|
offset_left = -234.0
|
||||||
offset_top = -65.0
|
offset_top = -77.0
|
||||||
offset_right = 234.0
|
offset_right = 234.0
|
||||||
offset_bottom = -10.0
|
offset_bottom = -22.0
|
||||||
grow_horizontal = 2
|
grow_horizontal = 2
|
||||||
grow_vertical = 0
|
grow_vertical = 0
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue