# quest class, impleeenting all quest functionality # TODO: implement zone quests class_name Quest extends PanelContainer @export var goalType := WorldArea.GoalType.KILL @export var faction := Globals.World.Faction.CREATURE @export var goalTotal := 1 var goalCurrent := 0 var questComplete := false func _ready() -> void: SignalBus.enemy_died.connect(_on_enemy_died) #_generate_random_quest() _set_goal_text() _set_goal_val() func _process(_delta: float) -> void: if questComplete: _quest_progress_hide() _quest_complete_show() func _set_goal_text() -> void: var goalStr = WorldArea.GoalType.keys()[self.goalType].capitalize() var factionStr = Globals.World.Faction.keys()[self.faction].capitalize() # TODO: use better string formatting methods $QuestProgress/GoalTypeVal.text = goalStr + " " + factionStr + "s" func _set_goal_val() -> void: $QuestProgress/GoalVal.text = str(self.goalTotal) func _quest_goal_check(enemyKillType: Globals.World.Faction) -> void: if enemyKillType == self.faction: self.goalCurrent += 1 $QuestProgress/CompletedVal.text = str(self.goalCurrent) if self.goalCurrent == self.goalTotal: SignalBus.quest_completed.emit() questComplete = true func _quest_progress_hide() -> void: $QuestProgress.modulate.a -= 0.05 func _quest_complete_show() -> void: $QuestComplete.modulate.a += 0.05 func _generate_random_quest() -> void: # TODO: generate acutally random quest self.goalType = WorldArea.GoalType.KILL self.faction = Globals.World.Faction.CREATURE self.goalTotal = randi_range(20, 50) # match self.goalType: # GoalTypes.KILLMANY: # self.faction = KillTypes.NATURAL func _on_enemy_died( _enemyDifficulty: NPC.NPCDifficulty, _enemyTier: NPC.NPCTier, enemyFaction: Globals.World.Faction, ): _quest_goal_check(enemyFaction)