38 lines
879 B
GDScript
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)
|