48 lines
1.2 KiB
GDScript
48 lines
1.2 KiB
GDScript
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
|