From 22e55153e5e5c96bf15945719e7723a8775c3fee Mon Sep 17 00:00:00 2001 From: Joseph Walton-Rivers <joseph@walton-rivers.uk> Date: Mon, 17 Oct 2022 14:12:36 +0100 Subject: [PATCH] allow the entity factory to provided at calltime --- demo/demo/rollball.cpp | 2 +- fggl/entity/loader/loader.cpp | 2 +- fggl/entity/module.cpp | 6 +++++- include/fggl/entity/loader/loader.hpp | 2 +- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/demo/demo/rollball.cpp b/demo/demo/rollball.cpp index 0838fff..55f8631 100644 --- a/demo/demo/rollball.cpp +++ b/demo/demo/rollball.cpp @@ -85,7 +85,7 @@ namespace demo { // asset loader auto* assetLoader = m_owner.service<fggl::assets::Loader>(); - assetLoader->load("rollball.yml", fggl::entity::PROTOTYPE_ASSET); + assetLoader->load("rollball.yml", fggl::entity::PROTOTYPE_ASSET, entFactory); assetLoader->load("rollball.yml", fggl::entity::SCENE, this); // collectable callbacks diff --git a/fggl/entity/loader/loader.cpp b/fggl/entity/loader/loader.cpp index 4baa790..ba19af3 100644 --- a/fggl/entity/loader/loader.cpp +++ b/fggl/entity/loader/loader.cpp @@ -77,7 +77,7 @@ namespace fggl::entity { return nullptr; } - assets::AssetRefRaw load_prototype(assets::Loader* loader, EntityFactory *factory, const assets::AssetGUID &guid, assets::AssetData data) { + assets::AssetRefRaw load_prototype(assets::Loader* loader, const assets::AssetGUID &guid, assets::AssetData data, EntityFactory* factory) { auto *filePath = std::get<assets::AssetPath *>(data); // We need to process the prototypes, and load them into the asset system. diff --git a/fggl/entity/module.cpp b/fggl/entity/module.cpp index d6447e4..22cf0a0 100644 --- a/fggl/entity/module.cpp +++ b/fggl/entity/module.cpp @@ -45,7 +45,11 @@ namespace fggl::entity { // we are responsible for prefabs... auto *assetLoader = services.get<assets::Loader>(); assetLoader->setFactory(PROTOTYPE_ASSET, [factory](assets::Loader* loader, const assets::AssetGUID &a, assets::AssetData b, void* ptr) { - return load_prototype(loader, factory, a, b); + EntityFactory* facPtr = factory; + if ( ptr != nullptr ) { + facPtr = (EntityFactory*)ptr; + } + return load_prototype(loader, a, b, facPtr); }, assets::LoadType::PATH); assetLoader->setFactory(SCENE, load_scene, assets::LoadType::PATH); diff --git a/include/fggl/entity/loader/loader.hpp b/include/fggl/entity/loader/loader.hpp index 9a816dd..322b76c 100644 --- a/include/fggl/entity/loader/loader.hpp +++ b/include/fggl/entity/loader/loader.hpp @@ -173,7 +173,7 @@ namespace fggl::entity { } }; - assets::AssetRefRaw load_prototype(assets::Loader* loader, EntityFactory *factory, const assets::AssetGUID &guid, assets::AssetData data); + assets::AssetRefRaw load_prototype(assets::Loader* loader, const assets::AssetGUID &guid, assets::AssetData data, EntityFactory* factory); assets::AssetRefRaw load_scene(assets::Loader* loader, const assets::AssetGUID& asset, assets::AssetData data, void* ptr); } // namespace fggl::entity -- GitLab