#include "register_types.h"
#include "kyara.h"
#include "controller.h"
#include "game.h"
//#include "nodespawner.h"
#include <gdextension_interface.h>
#include <godot_cpp/core/defs.hpp>
#include <godot_cpp/godot.hpp>

using namespace godot;

void initialize_character_module(ModuleInitializationLevel p_level)
{
	if (p_level != MODULE_INITIALIZATION_LEVEL_SCENE) { return; }
	GDREGISTER_RUNTIME_CLASS(Character);
	GDREGISTER_RUNTIME_CLASS(Controller);
	GDREGISTER_RUNTIME_CLASS(Game);
//	GDREGISTER_RUNTIME_CLASS(NodeSpawner);
}

void uninitialize_character_module(ModuleInitializationLevel p_level) {
	if (p_level != MODULE_INITIALIZATION_LEVEL_SCENE) { return; }
}

extern "C"
{
GDExtensionBool GDE_EXPORT character_library_init(GDExtensionInterfaceGetProcAddress p_get_proc_address, const GDExtensionClassLibraryPtr p_library, GDExtensionInitialization *r_initialization)
{
	godot::GDExtensionBinding::InitObject init_obj(p_get_proc_address, p_library, r_initialization);
	
	init_obj.register_initializer(initialize_character_module);
	init_obj.register_terminator(uninitialize_character_module);
	init_obj.set_minimum_library_initialization_level(MODULE_INITIALIZATION_LEVEL_SCENE);
	
	return init_obj.init();
}
}