38 lines
1.3 KiB
C++
38 lines
1.3 KiB
C++
#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<void(u64, u32)>(gameObjectClass, ".ctor");
|
|
gameObjectInvokeUpdate = Mono::Method<void(f64)>(gameObjectClass, "InvokeUpdate");
|
|
gameObjectTryCreateComponent = Mono::Method<Mono::Bool(Mono::String)>(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;
|
|
}
|
|
|
|
}
|