104 lines
2.6 KiB
GDScript
104 lines
2.6 KiB
GDScript
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()
|