#include "MonoGameObjectSystem.hpp" namespace ougge::modules { const std::string& MonoGameObjectSystem::getName() { return ougge_type_name(); } MonoGameObjectSystem::MonoGameObjectSystem(Engine& engine, u32 max_game_objects) : IEngineModule(engine), gameObjectPool(max_game_objects) { engineManagedAssembly = mono.loadAssembly("Ougge.dll"); gameObjectClass = engineManagedAssembly->getClass("Ougge", "GameObject"); gameObjectCtor = Mono::Method(gameObjectClass, ".ctor"); gameObjectInvokeUpdate = Mono::Method(gameObjectClass, "InvokeUpdate"); gameObjectTryCreateComponent = Mono::Method(gameObjectClass, "TryCreateComponent_internal"); registerNativeCallbacks(); } // sets implementations for extern functions from src-csharp/NativeFunctions.cs void MonoGameObjectSystem::registerNativeCallbacks(){ static MonoGameObjectSystem* this_static = this; if(this_static != this) throw new UsefulException("creation of more than one instance of MonoGameObjectSystem is not allowed"); auto createGameObject_callback = static_cast ( [](u64* id_out, u32* index_out) -> void { std::cout<<"createGameObject_callback"<createGameObjectInPool(id_out, index_out); } ); mono_add_internal_call("Ougge.NativeFunctions::createGameObject", (void*)createGameObject_callback); auto freeGameObject_callback = static_cast( [](u32 index) -> bool { std::cout<<"freeGameObject_callback"<gameObjectPool.erase(index); } ); mono_add_internal_call("Ougge.NativeFunctions::freeGameObject", (void*)freeGameObject_callback); } void MonoGameObjectSystem::beginFrame(){ for(auto pair : gameObjectPool){ auto obj = pair.second.getObjectHandle().getObject(); std::cout<<"updating obj: "<