60 lines
1.2 KiB
GDScript
60 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
|
|
|
|
# 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
|
|
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()
|