165 lines
5.8 KiB
GDScript
165 lines
5.8 KiB
GDScript
extends Node
|
|
|
|
signal achievement_complete(achievement:Achievement)
|
|
|
|
const categoryScripts = [preload("res://Achievements/Categories/LevelsCategory.gd"),
|
|
preload("res://Achievements/Categories/LevelsIICategory.gd"),
|
|
preload("res://Achievements/Categories/CollectionCategory.gd"),
|
|
preload("res://Achievements/Categories/FeatsCategory.gd")]
|
|
|
|
var categories = []
|
|
|
|
func _ready():
|
|
load_achievements()
|
|
|
|
func load_achievements():
|
|
for script in categoryScripts:
|
|
categories.append(script.new())
|
|
|
|
func get_categories():
|
|
return categories
|
|
|
|
func complete_achievement(achievementName):
|
|
var achievement = get_achievement_by_name(achievementName)
|
|
achievement.complete()
|
|
achievement_complete.emit(achievement)
|
|
|
|
Steam.setAchievement(achievementName)
|
|
Steam.storeStats()
|
|
|
|
print("Achievement Complete!")
|
|
print(achievementName)
|
|
|
|
func get_achievement_by_name(achievementName):
|
|
for category in categories:
|
|
var achievements = category.get_achievements()
|
|
for achievement in achievements:
|
|
if achievement.get_name() == achievementName:
|
|
return achievement
|
|
|
|
func update_achievement_states():
|
|
for category in categories:
|
|
var achievements = category.get_achievements()
|
|
for achievement in achievements:
|
|
achievement.update_completion()
|
|
|
|
start_up_level_achievement_checks()
|
|
|
|
func start_up_level_achievement_checks():
|
|
var skills = LevelManager.get_all_skills()
|
|
for skill in skills:
|
|
skill_level_achievement_checks(skill)
|
|
|
|
func skill_level_achievement_checks(skill):
|
|
var skillAchievementInfo = [
|
|
["Arson", [["Time to Burn", 20], ["A Burning Fire", 40], ["Burning Brighter", 60]]],
|
|
["Basket Weaving", [["Basket Bachelor", 20], ["Basket Master", 40], ["Weaver of All", 60]]],
|
|
["Building", [["Piler", 20], ["Stacker", 40], ["Arranger", 60]]],
|
|
["Experiencing", [["Experienced", 20], ["Experienceder", 40], ["Experiencedest", 60]]],
|
|
["Fast Walking", [["I am Speed", 20], ["KACHOW!", 40], ["Faster than Fast", 60]]],
|
|
["Gaming", [["Gamer", 20], ["Pro Gamer", 40], ["Gramer", 60]]],
|
|
["Gardening", [["Green Hoof", 20], ["Verdant Hoof", 40], ["Blooming Hoof", 60]]],
|
|
["Juice Drinking", [["Juice Fan", 20], ["Juice Connoisseur", 40], ["Juice Enjoyer", 60]]],
|
|
["Scavenging", [["Searching for Goodies", 20], ["Finding Treasures", 40], ["Super Scrounger", 60]]],
|
|
["Swimming", [["Fish Mode", 20], ["Wahoo Mode", 40], ["Indo-Pacific Sailfish", 60]]],
|
|
["Trampolining", [["Bouncin'", 20], ["Soarin'", 40], ["Launchin'", 60]]],
|
|
["Walking", [["It's Walking Time", 20], ["Walking On", 40], ["Slow Enjoyer", 60]]]
|
|
]
|
|
|
|
for info in skillAchievementInfo:
|
|
if info[0] == skill.skillName:
|
|
var achievementsInfo = info[1]
|
|
for nameLevelPair in achievementsInfo:
|
|
if skill.currentLevel >= nameLevelPair[1]:
|
|
complete_achievement(nameLevelPair[0])
|
|
break
|
|
|
|
func total_level_achievement_checks():
|
|
var minLevel = 100
|
|
var skills = LevelManager.get_all_skills()
|
|
for skill in skills:
|
|
if skill.currentLevel < minLevel:
|
|
minLevel = skill.currentLevel
|
|
|
|
if minLevel >= 40:
|
|
var achievement:Achievement = get_achievement_by_name("Cow Power")
|
|
if !achievement.completed:
|
|
complete_achievement("Cow Power")
|
|
if minLevel >= 60:
|
|
var achievement:Achievement = get_achievement_by_name("You are Cow")
|
|
if !achievement.completed:
|
|
complete_achievement("You are Cow")
|
|
MessageManager.maxlevel_popup()
|
|
MessageManager.addMessage("You've reached the max level in every skill! Wow!",
|
|
null, "System", Color.PURPLE, true, false)
|
|
|
|
func behold_achievement_checks(item):
|
|
var itemNames = ["Ash Ash", "Caramelized Caramel",
|
|
"Caramelized Wolfs Milk Slime Mould Basket", "Raisin"]
|
|
var achievementNames = ["Again", "Essence of Chew", "Wolfs...", "Where did I get this?"]
|
|
var modified = [false, true, true, false]
|
|
|
|
for i in range(itemNames.size()):
|
|
var itemName = itemNames[i]
|
|
if itemName == item.get_name(modified[i]):
|
|
complete_achievement(achievementNames[i])
|
|
|
|
func burn_achievement_checks(item):
|
|
var itemNames = ["Faire Ticket", "Gasoline"]
|
|
var achievementNames = ["Joker Moment", "Girlbossing"]
|
|
var modified = [false, false]
|
|
|
|
for i in range(itemNames.size()):
|
|
var itemName = itemNames[i]
|
|
if itemName == item.get_name(modified[i]):
|
|
complete_achievement(achievementNames[i])
|
|
|
|
func play_achievement_checks(item):
|
|
var itemNames = ["Trumpet", "Sugary Worm on a String",
|
|
"Knotted Sticky Hand"]
|
|
var achievementNames = ["!doot", "Sparkly :)", "I broke it..."]
|
|
var modified = [false, true, true]
|
|
|
|
for i in range(itemNames.size()):
|
|
var itemName = itemNames[i]
|
|
if itemName == item.get_name(modified[i]):
|
|
complete_achievement(achievementNames[i])
|
|
|
|
func eat_achievement_checks(item):
|
|
var itemNames = ["BBQ Sauce", "Knotted Cloud",
|
|
"Sugary Sugar Stick", "Candy Candy"]
|
|
var achievementNames = ["Condiment of Flame", "Heavenly Spaghetti", "OwO",
|
|
"Sugared Concentrate"]
|
|
var modified = [false, true, true, false]
|
|
|
|
for i in range(itemNames.size()):
|
|
var itemName = itemNames[i]
|
|
if itemName == item.get_name(modified[i]):
|
|
complete_achievement(achievementNames[i])
|
|
|
|
func drink_achievement_checks(item):
|
|
var itemNames = ["Maple Tea", "Green Soda Juice",
|
|
"Juice Juice", "Iron Ingot Juice", "Birch Beer", "Diluted Water",
|
|
"Ultimate Juice"]
|
|
var achievementNames = ["Mmmm leafs", "Mmmm green", "Tastes like Juice",
|
|
"Wolferine", "Barked Beer", "Hydrated", "Ultimate Quencher"]
|
|
var modified = [false, false, false, true, false, true, false]
|
|
|
|
for i in range(itemNames.size()):
|
|
var itemName = itemNames[i]
|
|
if itemName == item.get_name(modified[i]):
|
|
complete_achievement(achievementNames[i])
|
|
|
|
func hang_up_achievement_checks(item):
|
|
var itemNames = ["Basket on a String", "Ketchup Basket",
|
|
"Basket Basket"]
|
|
var achievementNames = ["Containment Friend", "Ketchupton Decor", "Basket 2"]
|
|
var modified = [false, false, false]
|
|
|
|
if item != null:
|
|
for i in range(itemNames.size()):
|
|
var itemName = itemNames[i]
|
|
if itemName == item.get_name(modified[i]):
|
|
complete_achievement(achievementNames[i])
|
|
|