From ac271ce8918b05fea13ccde862f9048c7c7d34c3 Mon Sep 17 00:00:00 2001 From: Andre Date: Thu, 19 Mar 2026 23:18:22 +0100 Subject: [PATCH] Skillbuch Pagination: 9 Skills pro Seite mit Vor/Zurueck-Navigation Co-Authored-By: Claude Sonnet 4.6 --- skill_panel.gd | 62 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 61 insertions(+), 1 deletion(-) diff --git a/skill_panel.gd b/skill_panel.gd index 9f1cae1..690bfa6 100644 --- a/skill_panel.gd +++ b/skill_panel.gd @@ -5,6 +5,13 @@ extends CanvasLayer var panel_visible = false var player = null +# Pagination +const SKILLS_PER_PAGE: int = 9 +var current_page: int = 0 +var _page_label: Label = null +var _prev_btn: Button = null +var _next_btn: Button = null + # Drag State var dragging = false var drag_skill_id: String = "" @@ -15,6 +22,47 @@ var drag_icon: TextureRect = null func _ready(): panel.visible = false + _create_pagination_bar() + +func _create_pagination_bar(): + var vbox = $Panel/VBoxContainer + var nav = HBoxContainer.new() + nav.alignment = BoxContainer.ALIGNMENT_CENTER + nav.add_theme_constant_override("separation", 12) + + _prev_btn = Button.new() + _prev_btn.text = "< Zurück" + _prev_btn.add_theme_font_size_override("font_size", 13) + _prev_btn.pressed.connect(_on_prev_page) + nav.add_child(_prev_btn) + + _page_label = Label.new() + _page_label.add_theme_font_size_override("font_size", 13) + _page_label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER + _page_label.custom_minimum_size = Vector2(80, 0) + nav.add_child(_page_label) + + _next_btn = Button.new() + _next_btn.text = "Weiter >" + _next_btn.add_theme_font_size_override("font_size", 13) + _next_btn.pressed.connect(_on_next_page) + nav.add_child(_next_btn) + + vbox.add_child(nav) + +func _on_prev_page(): + current_page = max(0, current_page - 1) + _refresh_skills() + +func _on_next_page(): + var total_pages = _get_total_pages() + current_page = min(total_pages - 1, current_page + 1) + _refresh_skills() + +func _get_total_pages() -> int: + if player == null: + return 1 + return max(1, ceili(float(player.available_skills.size()) / SKILLS_PER_PAGE)) func setup(p): player = p @@ -23,6 +71,7 @@ func toggle(): panel_visible = !panel_visible panel.visible = panel_visible if panel_visible: + current_page = 0 _refresh_skills() func _refresh_skills(): @@ -32,7 +81,18 @@ func _refresh_skills(): for child in skill_list.get_children(): child.queue_free() - for skill in player.available_skills: + # Pagination-Grenzen berechnen + var total_pages = _get_total_pages() + var start = current_page * SKILLS_PER_PAGE + var end = min(start + SKILLS_PER_PAGE, player.available_skills.size()) + var page_skills = player.available_skills.slice(start, end) + + # Navigations-Buttons und Label aktualisieren + _page_label.text = "Seite %d / %d" % [current_page + 1, total_pages] + _prev_btn.disabled = current_page == 0 + _next_btn.disabled = current_page >= total_pages - 1 + + for skill in page_skills: var is_locked: bool = skill.get("locked", false) # Hintergrund-Panel für Lesbarkeit