76 lines
2.6 KiB
GDScript3
76 lines
2.6 KiB
GDScript3
|
tool
|
||
|
extends Node
|
||
|
class_name DialogicCustomEvents
|
||
|
|
||
|
# references to the nodes with the handler script
|
||
|
# to be used later by the "event_handler"
|
||
|
# keys: event_id
|
||
|
# values: reference to handler node.
|
||
|
var handlers : = {}
|
||
|
|
||
|
|
||
|
## -----------------------------------------------------------------------------
|
||
|
## Loops through the custom events folder and creates a handler node
|
||
|
## for every custom event.
|
||
|
##
|
||
|
## To handle a custom event simply check if the event_id is in the handlers dicionary keys,
|
||
|
## then get the value (which is the handler node) to call its hadler function
|
||
|
func update() -> void:
|
||
|
var path : String = DialogicResources.get_working_directories()["CUSTOM_EVENTS_DIR"]
|
||
|
var dir = Directory.new()
|
||
|
if dir.open(path) == OK:
|
||
|
dir.list_dir_begin()
|
||
|
var file_name = dir.get_next()
|
||
|
# goes through all the folders in the custom events folder
|
||
|
while file_name != "":
|
||
|
# if it found a folder
|
||
|
if dir.current_is_dir() and not file_name in ['.', '..']:
|
||
|
|
||
|
# look through that folder
|
||
|
#print("Found custom event folder: " + file_name)
|
||
|
var event = load(path.plus_file(file_name).plus_file('EventBlock.tscn')).instance()
|
||
|
|
||
|
if event:
|
||
|
var handler_script_path = path.plus_file(file_name).plus_file('event_'+event.event_data['event_id']+'.gd')
|
||
|
var event_id = event.event_data['event_id']
|
||
|
var event_name = event.event_name
|
||
|
|
||
|
# not necesary, we now have the data in the handlers dict
|
||
|
#custom_events[event.event_data['event_id']] = {
|
||
|
# 'event_script' : handler_script_path,
|
||
|
# 'event_name' : event.event_name,
|
||
|
#}
|
||
|
|
||
|
# Check if we already have a handler node for this event.
|
||
|
if handlers.has(event_id):
|
||
|
#print("Custom event ",event_id," already loaded")
|
||
|
#print("Continuing...")
|
||
|
file_name = dir.get_next()
|
||
|
continue
|
||
|
else:
|
||
|
#print("No handler node for event ",event_id," found.")
|
||
|
#print("Creating...")
|
||
|
# create a node for the custom event an attach the script
|
||
|
var handler = Node.new()
|
||
|
handler.set_script(load(handler_script_path))
|
||
|
handler.set_name(event_name)
|
||
|
|
||
|
# not really necessary, but just in case
|
||
|
handler.set_meta("event_id",event_id)
|
||
|
|
||
|
#add data to dictionary
|
||
|
handlers[event_id] = handler
|
||
|
#add node as a child of this
|
||
|
self.add_child(handler)
|
||
|
|
||
|
event.queue_free()
|
||
|
else:
|
||
|
print("[D] An error occurred when trying to access a custom event.")
|
||
|
|
||
|
|
||
|
else:
|
||
|
pass # files in the directory are ignored
|
||
|
file_name = dir.get_next()
|
||
|
else:
|
||
|
print("[D] An error occurred when trying to access the custom event folder.")
|