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:
parent
f007e559b9
commit
ac271ce891
1 changed files with 61 additions and 1 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue