class_name Base extends Node ## A base addon ## ## A base addon for shared functionality between all other addons var _logger var _data var _persister var _triggerer var _information = { "log_category": "???", "accent": "#000000", "icon": "res://components/Cursor/mouse-pointer-2.svg" } var CORE_NODES = { "Logger": { "property": "_logger" }, "Data": { "property": "_data" }, "Triggerer": { "property": "_triggerer", }, "Persister": { "property": "_persister", "connections": {"data_persisted": "_on_data_persisted"} } } func _ready(): for node in CORE_NODES: # Prevent circular references if name == node: break # Connect up core nodes var node_value = CORE_NODES[node] if get_tree().root.has_node(node): set(node_value.property, get_tree().root.get_node(node)) var property = get(node_value.property) if node_value.has("connections"): var connections = node_value.connections for connection in connections: var connection_callback = connections[connection] property.get(connection).connect(get(connection_callback)) if _data and _data.components.has(name): _information = _data.components[name].information if _information.has("triggers"): for trigger in _information.triggers: _triggerer.listen(trigger, Callable(self, _information.triggers[trigger])) if has_method("_prespawned"): call("_prespawned") _info("%s is active" % [name]) if has_method("_spawned"): call("_spawned") _info("%s is ready" % [name]) func _on_data_persisted(key: String, value, category: PersisterEnums.Scope): pass func _debug(message: String): if _logger: _logger.debug(message, { "category": _information.log_category, "image": _information.icon, "color": _information.accent }) func _info(message: String): if _logger: _logger.info(message, { "category": _information.log_category, "image": _information.icon, "color": _information.accent }) func _warn(message: String): if _logger: _logger.warn(message, { "category": _information.log_category, "image": _information.icon, "color": _information.accent }) func _error(message: String): if _logger: _logger.error(message, { "category": _information.log_category, "image": _information.icon, "color": _information.accent })