Files
Dawn-Godot/scripts/Event/Event.gd
2025-06-04 21:51:13 -05:00

63 lines
1.2 KiB
GDScript

class_name Event extends Node
const Entity = preload("res://scripts/Entity/Entity.gd");
var inEventSystemTree:bool = false;
var started:bool = false;
var ended:bool = false;
var interactor:EntityInteractor = null
var interactee:EntityInteractable = null
signal eventEnded()
# Godot Methods
func _process(delta: float) -> void:
if !started || ended:
return
self.update(delta)
if self.isDone():
self.end()
# Event methods (cleaned up)
func start() -> void:
assert(
self.is_inside_tree(),
"Event is trying to start but the node is not part of the scene tree. "+
"Refer to EventSystem.addEvent"
)
assert(started == false)
started = true
func update(_delta:float) -> void:
assert(started == true)
assert(ended == false)
func isDone() -> bool:
return true
func end() -> void:
assert(ended == false)
ended = true
self.eventEnded.emit()
if self.inEventSystemTree:
EVENT.removeEvent(self)
func isEndingEvent() -> bool:
return false
func reset() -> void:
started = false
ended = false
interactor = null
interactee = null
func onEntityInteract(
interactor:EntityInteractor,
interactee:EntityInteractable
) -> void:
self.reset()
self.interactor = interactor
self.interactee = interactee
self.start()