promiscuity/game/scenes/Quests/quest_trigger_area.gd
2026-02-25 19:46:10 -06:00

38 lines
879 B
GDScript

extends Area3D
@export var event_name: StringName = &""
@export var target_group: StringName = &"player"
@export var quest_id_filter: String = ""
@export var one_shot: bool = true
var _triggered := false
func _ready() -> void:
body_entered.connect(_on_body_entered)
func reset_trigger() -> void:
_triggered = false
set_deferred("monitoring", true)
func _on_body_entered(body: Node) -> void:
if one_shot and _triggered:
return
if target_group != StringName() and not body.is_in_group(target_group):
return
if event_name == StringName():
return
if quest_id_filter.strip_edges() != "":
if QuestManager == null or QuestManager.get_active_quest_id() != StringName(quest_id_filter):
return
if QuestManager:
QuestManager.emit_event(event_name, {
"body": body,
"source": self,
})
if one_shot:
_triggered = true
set_deferred("monitoring", false)