55 lines
1.3 KiB
GDScript
55 lines
1.3 KiB
GDScript
class_name PankuModuleManager
|
|
|
|
var _modules:Array[PankuModule]
|
|
var _modules_table:Dictionary
|
|
var _core:PankuConsole
|
|
|
|
func init_manager(_core:PankuConsole, _modules:Array[PankuModule]):
|
|
self._modules = _modules
|
|
self._core = _core
|
|
load_modules()
|
|
|
|
func load_modules():
|
|
|
|
# The extra tree structure is purely used for avoiding using RefCounted which may cause uncessary leaked instance warnings.
|
|
var manager_node:Node = Node.new()
|
|
manager_node.name = "_Modules_"
|
|
_core.add_child(manager_node)
|
|
|
|
for _m in _modules:
|
|
var module:PankuModule = _m
|
|
_modules_table[module.get_module_name()] = module
|
|
|
|
module.name = module.get_module_name()
|
|
manager_node.add_child(module)
|
|
|
|
for _m in _modules:
|
|
var module:PankuModule = _m
|
|
module.core = _core
|
|
module._init_module()
|
|
#print("[info] %s module loaded!" % module.get_module_name())
|
|
|
|
func update_modules(delta:float):
|
|
for _m in _modules:
|
|
var module:PankuModule = _m
|
|
module.update_module(delta)
|
|
|
|
func get_module(module_name:String):
|
|
return _modules_table[module_name]
|
|
|
|
func has_module(module_name:String):
|
|
return _modules_table.has(module_name)
|
|
|
|
func get_module_option_objects():
|
|
var objects = []
|
|
for _m in _modules:
|
|
var module:PankuModule = _m
|
|
if module._opt != null:
|
|
objects.append(module._opt)
|
|
return objects
|
|
|
|
func quit_modules():
|
|
for _m in _modules:
|
|
var module:PankuModule = _m
|
|
module.quit_module()
|