extends Control var categorySelectors = [] var achievementDisplays = [] var currentCategory var currentAchievements var currentPage var pageSize func _ready(): initialize() spawn_category_buttons() set_category(AchievementManager.get_categories()[0]) func opened(): get_tree().paused = true update_category_buttons() show_page(currentPage) func close(): get_tree().paused = false visible = false func update_category_buttons(): for categorySelector in categorySelectors: categorySelector.update_display() func spawn_category_buttons(): var categorySelectorScene = load("res://UI/AchievementsMenu/CategorySelector.tscn") var categories = AchievementManager.get_categories() for category in categories: var newSelector = categorySelectorScene.instantiate() newSelector.set_category(category) categorySelectors.append(newSelector) %CategorySelectors.add_child(newSelector) newSelector.pressed.connect(category_selector_clicked.bind(newSelector)) func category_selector_clicked(selector): set_category(selector.get_category()) func set_category(category): currentCategory = category currentAchievements = category.get_achievements() show_page(0) func show_page(pageNum): currentPage = pageNum var pageAchievements = get_page_achievements() for i in range(pageSize): var currentDisplay = achievementDisplays[i] if i < pageAchievements.size(): currentDisplay.visible = true currentDisplay.show_achievement(pageAchievements[i]) else: currentDisplay.visible = false var maxPage = get_max_page() %PageNumber.text = "Page " + str(pageNum + 1) + "/" + str(maxPage + 1) update_page_buttons() func get_page_achievements(): var firstIndex = currentPage * pageSize var pageAchievements = [] for i in range(pageSize): var currentIndex = firstIndex + i if currentIndex < currentAchievements.size(): pageAchievements.append(currentAchievements[currentIndex]) else: break return pageAchievements func get_max_page(): var maxPage = ceili(float(currentAchievements.size())/float(pageSize)) - 1 return maxPage func update_page_buttons(): if currentPage <= 0: %PageLeftButton.disabled = true else: %PageLeftButton.disabled = false if currentPage >= get_max_page(): %PageRightButton.disabled = true else: %PageRightButton.disabled = false func initialize(): achievementDisplays = %AchievementDisplays.get_children() pageSize = achievementDisplays.size() func _on_page_left_button_pressed(): show_page(currentPage - 1) func _on_page_right_button_pressed(): show_page(currentPage + 1) func _on_close_button_pressed(): close()