class_name QuestObjective extends Node enum Type { Item, } @export var objectiveName:String = "Some objective" @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