Event Trigger Update

This commit is contained in:
2025-06-09 09:24:32 -05:00
parent 8f52da0f5d
commit 3c11b232fa
17 changed files with 131 additions and 133 deletions

View File

@@ -1,8 +1,18 @@
class_name EventIf extends "res://scripts/Event/Flow/EventGroup.gd"
signal eventConditionMet
func ifCondition() -> bool:
return false
func subscribeEvents() -> void:
# Override this method to subscribe to any events needed for the condition check
pass
func unsubscribeEvents() -> void:
# Override this method to unsubscribe from any events when the condition is no longer needed
pass
func shouldAutoStart() -> bool:
return false
@@ -10,4 +20,15 @@ func start() -> void:
super.start()
if ifCondition():
startEventGroup()
startEventGroup()
func onEventTrigger() -> void:
if !ifCondition():
return
eventConditionMet.emit()
func onTriggerListening(_trigger:EventTrigger) -> void:
subscribeEvents()
func onTriggerNotListening(_trigger:EventTrigger) -> void:
unsubscribeEvents()

View File

@@ -0,0 +1 @@
uid://dwcd277pv3p1t

View File

@@ -0,0 +1,32 @@
class_name EventTrigger extends Node
@export var triggerMultipleTimes: bool = false
var eventIf:EventIf = null
func _enter_tree() -> void:
for child in get_children():
if !(child is EventIf):
continue
eventIf = child
break
if eventIf == null:
push_error(self, "requires an EventIf child to function properly")
return
eventIf.eventConditionMet.connect(onConditionTriggered)
eventIf.onTriggerListening(self)
func _exit_tree() -> void:
if eventIf != null:
eventIf.eventConditionMet.disconnect(onConditionTriggered)
eventIf.onTriggerNotListening(self)
eventIf = null
func onConditionTriggered() -> void:
if !triggerMultipleTimes:
eventIf.eventConditionMet.disconnect(onConditionTriggered)
eventIf.onTriggerNotListening(self)
eventIf.start()

View File

@@ -0,0 +1 @@
uid://cs7voh47aoca8

View File

@@ -1,4 +1,9 @@
class_name EventIfQuestObjective extends "res://scripts/Event/Condition/EventIf.gd"
class_name EventIfQuest extends "res://scripts/Event/Condition/EventIf.gd"
## Event that checks if a quest is in a specific state, if the condition is met
## then all children events will be run through.
##
## Can also be used as part of a trigger condition to fire if the quest state
## is updated.
enum Type {
ANY_OF_OBJECTIVES_COMPLETED,
@@ -7,64 +12,66 @@ enum Type {
ALL_OF_OBJECTIVES_NOT_COMPLETED,
SPECIFIC_OBJECTIVE_COMPLETED,
SPECIFIC_OBJECTIVE_NOT_COMPLETED,
QUEST_STARTED,
QUEST_NOT_STARTED,
}
@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 ifCondition() -> bool:
var quest:Quest = QUEST.quests.get(questKey)
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
return true
Type.ALL_OF_OBJECTIVES_COMPLETED:
for objective in quest.objectives:
if !objective.isCompleted():
return
self.start()
return false
return true
Type.ANY_OF_OBJECTIVES_NOT_COMPLETED:
for objective in quest.objectives:
if objective.isCompleted():
continue
self.start()
return
if !objective.isCompleted():
return true
Type.ALL_OF_OBJECTIVES_NOT_COMPLETED:
for objective in quest.objectives:
if objective.isCompleted():
return
self.start()
return false
return true
Type.SPECIFIC_OBJECTIVE_COMPLETED:
if quest.objectives[objective].isCompleted():
self.start()
return
return true
Type.SPECIFIC_OBJECTIVE_NOT_COMPLETED:
if quest.objectives[objective].isCompleted():
return
self.start()
return false
return true
Type.QUEST_STARTED:
if quest.isStarted():
return true
Type.QUEST_NOT_STARTED:
if !quest.isStarted():
return true
return false
func subscribeEvents() -> void:
QUEST.questUpdated.connect(onQuestUpdated)
func unsubscribeEvents() -> void:
QUEST.questUpdated.disconnect(onQuestUpdated)
func onQuestUpdated(quest:Quest) -> void:
if quest.questKey != questKey:
return
self.onEventTrigger()

View File

@@ -0,0 +1 @@
uid://0ev1l0bf85gj

View File

@@ -0,0 +1 @@
uid://0aipsu5ele44

View File

@@ -0,0 +1 @@
uid://cnbl4x8p2xsx5

View File

@@ -0,0 +1 @@
uid://c2aj13e48jjd4

View File

@@ -1,17 +0,0 @@
class_name EventAutoStart extends "res://scripts/Event/Flow/EventGroup.gd"
@export var restartWhenEnded: bool = false
func _process(delta: float) -> void:
super._process(delta)
if self.ended:
if !self.restartWhenEnded:
return
self.reset()
if self.started && !self.ended:
return
self.start()

View File

@@ -1 +0,0 @@
uid://ckeqruxf6boav

View File

@@ -1,28 +0,0 @@
class_name EventQuestAllObjectivesComplete extends "res://scripts/Event/Flow/EventGroup.gd"
@export var questKey:QuestSystem.QuestKey = QuestSystem.QuestKey.TEST_QUEST
@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
for objective in quest.objectives:
if !objective.isCompleted():
return
self.start()

View File

@@ -1 +0,0 @@
uid://ck0vs0awnc4n2

View File

@@ -1,24 +0,0 @@
class_name EventQuestObjectiveComplete extends "res://scripts/Event/Flow/EventGroup.gd"
@export var triggerIfObjectiveUncompletedThenComplatedAgain: bool = false
@export var quest:QuestSystem.QuestKey = QuestSystem.QuestKey.TEST_QUEST
@export var objectiveIndex:int = 0
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.triggerIfObjectiveUncompletedThenComplatedAgain:
return
self.reset()
if !quest.isStarted():
return
if !quest.objectives[objectiveIndex].isCompleted():
return
self.start()

View File

@@ -1 +0,0 @@
uid://baywtxo4wy5i4