Cow_Life_Sim_RPG/UI/AchievementsMenu/AchievementsMenu.gd

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()