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()