class_name QuestObjective extends Node enum Type { Item, } @export_multiline var title:String = "" @export_multiline var description:String = "" @export var objectiveType:Type = Type.Item @export var itemType:Item.Type = Item.Type.POTION @export var quantity:int = 1 var completed:bool = false var quest:Quest = null func onQuestReady(_quest:Quest) -> void: self.quest = _quest if objectiveType == Type.Item: QUEST.playerInventoryUpdated.connect(_onPlayerInventoryUpdated) _onPlayerInventoryUpdated() func _exit_tree() -> void: QUEST.playerInventoryUpdated.disconnect(_onPlayerInventoryUpdated) func _onPlayerInventoryUpdated() -> void: if !quest.isStarted(): return # Ensure player has the item var hasItem = ITEM.PLAYER_INVENTORY.hasItem(itemType, quantity) if hasItem && !completed: self.completed = true quest.objectiveUpdated(self) else: self.completed = false quest.objectiveUpdated(self) func isCompleted() -> bool: return completed func getLocaleData() -> Dictionary[String, String]: var dict:Dictionary[String, String] = {} dict.item = ITEM.getItemName(itemType, quantity) dict.quantity = LOCALE.formatInteger(quantity) return dict