Skillbuch Pagination: 9 Skills pro Seite mit Vor/Zurueck-Navigation

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Andre 2026-03-19 23:18:22 +01:00
parent f007e559b9
commit ac271ce891

View file

@ -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