#include "Engine.hpp" namespace ougge { Engine::Engine() : gameObjectPool(GAMEOBJECTPOOL_SIZE) { } void Engine::init(){ 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"); } void Engine::invokeUpdate(f64 deltaTime){ for(auto pair : gameObjectPool){ gameObjectInvokeUpdate(pair.second.getObjectHandle().getObject(), deltaTime); } } GameObject& Engine::createGameObject(){ auto pair = gameObjectPool.emplace(GameObject(mono.createObject(gameObjectClass))); GameObject& obj = pair.second; gameObjectCtor(obj.getObjectHandle().getObject(), obj_id++, pair.first); return obj; } bool Engine::tryCreateComponent(GameObject& obj, const std::string& componentClassName){ Mono::String componentClassNameManaged = mono.createString(componentClassName); Mono::Bool created = gameObjectTryCreateComponent(obj.getObjectHandle().getObject(), componentClassNameManaged); return created.wide_bool; } }