Files
Dawn-Godot/scripts/Event/Condition/EventIfQuestObjective.gd
2025-06-08 21:38:38 -05:00

71 lines
1.6 KiB
GDScript

class_name EventIfQuestObjective extends "res://scripts/Event/Condition/EventIf.gd"
enum Type {
ANY_OF_OBJECTIVES_COMPLETED,
ALL_OF_OBJECTIVES_COMPLETED,
ANY_OF_OBJECTIVES_NOT_COMPLETED,
ALL_OF_OBJECTIVES_NOT_COMPLETED,
SPECIFIC_OBJECTIVE_COMPLETED,
SPECIFIC_OBJECTIVE_NOT_COMPLETED,
}
@export var questKey:QuestSystem.QuestKey = QuestSystem.QuestKey.TEST_QUEST
@export var type:Type = Type.ALL_OF_OBJECTIVES_COMPLETED
@export var objective:int = 0
@export var triggerMultipleTimes: bool = false
func _enter_tree() -> void:
QUEST.questUpdated.connect(onQuestUpdated)
func _exit_tree() -> void:
QUEST.questUpdated.disconnect(onQuestUpdated)
func onQuestUpdated(quest:Quest) -> void:
if self.ended:
if !self.triggerMultipleTimes:
return
self.reset()
if quest.questKey != self.questKey:
return
if !quest.isStarted():
return
match type:
Type.ANY_OF_OBJECTIVES_COMPLETED:
for objective in quest.objecitves:
if !objective.isCompleted():
continue
self.start()
return
Type.ALL_OF_OBJECTIVES_COMPLETED:
for objective in quest.objectives:
if !objective.isCompleted():
return
self.start()
Type.ANY_OF_OBJECTIVES_NOT_COMPLETED:
for objective in quest.objectives:
if objective.isCompleted():
continue
self.start()
return
Type.ALL_OF_OBJECTIVES_NOT_COMPLETED:
for objective in quest.objectives:
if objective.isCompleted():
return
self.start()
Type.SPECIFIC_OBJECTIVE_COMPLETED:
if quest.objectives[objective].isCompleted():
self.start()
return
Type.SPECIFIC_OBJECTIVE_NOT_COMPLETED:
if quest.objectives[objective].isCompleted():
return
self.start()