From 48000b7a04f5c4aecbe89ac77fe433bd17b5eda1 Mon Sep 17 00:00:00 2001
From: Joseph Walton-Rivers <joseph@walton-rivers.uk>
Date: Mon, 1 Aug 2022 10:52:27 +0100
Subject: [PATCH] more conventional factory defintions

---
 demo/data/rollball.yml                        | 50 +++++++++----------
 demo/demo/main.cpp                            |  1 +
 fggl/entity/module.cpp                        |  3 +-
 fggl/gfx/ogl4/module.cpp                      |  3 +-
 include/fggl/assets/module.hpp                |  6 +--
 include/fggl/audio/openal/module.hpp          |  5 +-
 include/fggl/data/module.hpp                  |  6 +--
 include/fggl/display/glfw/module.hpp          |  6 +--
 include/fggl/entity/module.hpp                |  2 +-
 include/fggl/gfx/ogl4/module.hpp              |  3 +-
 include/fggl/gui/module.hpp                   |  5 +-
 include/fggl/input/module.hpp                 |  5 +-
 .../include/fggl/phys/bullet/module.hpp       |  3 +-
 integrations/bullet/src/module.cpp            |  3 +-
 14 files changed, 49 insertions(+), 52 deletions(-)

diff --git a/demo/data/rollball.yml b/demo/data/rollball.yml
index 61598f8..df682f1 100644
--- a/demo/data/rollball.yml
+++ b/demo/data/rollball.yml
@@ -13,11 +13,11 @@ prefabs:
         diffuse: [1, 1, 1]
         specular: [0.0633, 0.727811, 0.633]
         shininess: 16
-#      phys::Body:
-#        type: static
-#        shape:
-#          type: box
-#          extents: [0.5, 2.5, 20.5]
+      phys::Body:
+        type: static
+        shape:
+          type: box
+          extents: [0.5, 2.5, 20.5]
   # Wall Z shorter to avoid z-fighting
   - name: "wallZ"
     components:
@@ -32,11 +32,11 @@ prefabs:
         diffuse: [1, 1, 1]
         specular: [0.0633, 0.727811, 0.633]
         shininess: 16
-#      phys::Body:
-#        type: static
-#        shape:
-#          type: box
-#          extents: [ 19.5, 2.5, 0.5 ]
+      phys::Body:
+        type: static
+        shape:
+          type: box
+          extents: [ 19.5, 2.5, 0.5 ]
   - name: "floor"
     components:
       Transform:
@@ -50,11 +50,11 @@ prefabs:
         diffuse: [1, 1, 1]
         specular: [0.0633, 0.727811, 0.633]
         shininess: 16
-#      phys::Body:
-#        type: static
-#        shape:
-#          type: box # we don't (currently) support planes...
-#          extents: [19.5, 0.25, 19.5]
+      phys::Body:
+        type: static
+        shape:
+          type: box # we don't (currently) support planes...
+          extents: [19.5, 0.25, 19.5]
   - name: player
     components:
       Transform:
@@ -67,10 +67,10 @@ prefabs:
         diffuse: [0.4, 0.4, 0.4]
         specular: [0.774597,0.774597,0.774597]
         shininess: 16
-#      phys::Body:
-#        shape:
-#          type: sphere
-#          radius: 1
+      phys::Body:
+        shape:
+          type: sphere
+          radius: 1
   - name: collectable
     components:
       Transform:
@@ -83,9 +83,9 @@ prefabs:
         diffuse: [1, 1, 1]
         specular: [0.0633, 0.727811, 0.633]
         shininess: 16
-#      phys::Body:
-#        type: kinematic
-#        shape:
-#          type: box
-#      phys::Callbacks:
-#      phys::Cache:
\ No newline at end of file
+      phys::Body:
+        type: kinematic
+        shape:
+          type: box
+      phys::Callbacks:
+      phys::Cache:
\ No newline at end of file
diff --git a/demo/demo/main.cpp b/demo/demo/main.cpp
index 24106bb..6e20bfc 100644
--- a/demo/demo/main.cpp
+++ b/demo/demo/main.cpp
@@ -85,6 +85,7 @@ int main(int argc, const char* argv[]) {
 	moduleManager.use<fggl::display::GLFW>();
 	moduleManager.use<fggl::assets::AssetFolders>();
 	moduleManager.use<fggl::entity::ECS>();
+	moduleManager.use<fggl::phys::Bullet3>();
 	moduleManager.resolve();
 
 	// create the application
diff --git a/fggl/entity/module.cpp b/fggl/entity/module.cpp
index 4037902..ee6b1c0 100644
--- a/fggl/entity/module.cpp
+++ b/fggl/entity/module.cpp
@@ -32,7 +32,7 @@ namespace fggl::entity {
 		factory->bind(math::Transform::guid, make_transform);
 	}
 
-	bool entity_svc_factory(modules::ModuleService service, modules::Services& services) {
+	bool ECS::factory(modules::ModuleService service, modules::Services& services) {
 		if ( service == EntityFactory::service) {
 			auto* factory = services.create<EntityFactory>();
 			install_component_factories(factory);
@@ -46,5 +46,4 @@ namespace fggl::entity {
 		}
 		return false;
 	}
-	const modules::ServiceFactory ECS::factory = entity_svc_factory;
 }
\ No newline at end of file
diff --git a/fggl/gfx/ogl4/module.cpp b/fggl/gfx/ogl4/module.cpp
index d0c2b33..9bfe38c 100644
--- a/fggl/gfx/ogl4/module.cpp
+++ b/fggl/gfx/ogl4/module.cpp
@@ -83,7 +83,7 @@ namespace fggl::gfx {
 		auto& light = manager.add<gfx::Light>(id);
 	}
 
-	bool ogl4_factory(modules::ModuleService service, modules::Services& services) {
+	bool OpenGL4::factory(modules::ModuleService service, modules::Services& services) {
 		if (service == WindowGraphics::service) {
 			// setup the thing responsible for graphics
 			auto* storage = services.get<data::Storage>();
@@ -100,6 +100,5 @@ namespace fggl::gfx {
 		}
 		return false;
 	}
-	const modules::ServiceFactory OpenGL4::factory = ogl4_factory;
 
 } // namespace fggl::gfX::ogl4
\ No newline at end of file
diff --git a/include/fggl/assets/module.hpp b/include/fggl/assets/module.hpp
index a925f64..e3942f3 100644
--- a/include/fggl/assets/module.hpp
+++ b/include/fggl/assets/module.hpp
@@ -35,10 +35,11 @@ namespace fggl::assets {
 		constexpr static const std::array<modules::ModuleService, 1> depends = {
 			data::Storage::service
 		};
-		static const modules::ServiceFactory factory;
+
+		static bool factory(modules::ModuleService name, modules::Services& serviceManager);
 	};
 
-	bool asset_factory(modules::ModuleService service, modules::Services& services) {
+	bool AssetFolders::factory(modules::ModuleService service, modules::Services& services) {
 		if ( service == Loader::service) {
 			auto storage = services.get<data::Storage>();
 			services.create<Loader>(storage);
@@ -50,7 +51,6 @@ namespace fggl::assets {
 		}
 		return false;
 	}
-	const modules::ServiceFactory AssetFolders::factory = asset_factory;
 
 } // namespace fggl::assets
 
diff --git a/include/fggl/audio/openal/module.hpp b/include/fggl/audio/openal/module.hpp
index dd37f67..0468fa6 100644
--- a/include/fggl/audio/openal/module.hpp
+++ b/include/fggl/audio/openal/module.hpp
@@ -34,10 +34,10 @@ namespace fggl::audio {
 		constexpr static const std::array<modules::ModuleService, 1> depends = {
 			modules::make_service("fggl::data::Storage")
 		};
-		static const modules::ServiceFactory factory;
+		static bool factory(modules::ModuleService name, modules::Services& serviceManager);
 	};
 
-	bool openal_factory(modules::ModuleService service, modules::Services& services) {
+	bool OpenAL::factory(modules::ModuleService service, modules::Services& services) {
 		if (service == SERVICE_AUDIO_PLAYBACK) {
 			auto storage = services.get<data::Storage>();
 			services.bind<audio::AudioService, openal::AudioServiceOAL>(storage);
@@ -45,7 +45,6 @@ namespace fggl::audio {
 		}
 		return false;
 	}
-	const modules::ServiceFactory OpenAL::factory = openal_factory;
 
 } // namespace fggl::audio
 
diff --git a/include/fggl/data/module.hpp b/include/fggl/data/module.hpp
index 6628f7f..97986b4 100644
--- a/include/fggl/data/module.hpp
+++ b/include/fggl/data/module.hpp
@@ -32,10 +32,11 @@ namespace fggl::data {
 			SERVICE_STORAGE
 		};
 		constexpr static const std::array<modules::ModuleService, 0> depends = {};
-		static const modules::ServiceFactory factory;
+
+		static bool factory(modules::ModuleService service, modules::Services& serviceManager);
 	};
 
-	bool storage_factory(modules::ModuleService service, modules::Services& data) {
+	bool LocalStorage::factory(modules::ModuleService service, modules::Services& data) {
 		if (service == SERVICE_STORAGE) {
 			// FIXME: no easy way to set the application name
 			auto pathConfig = fggl::platform::calc_engine_paths("fggl-demo");
@@ -44,7 +45,6 @@ namespace fggl::data {
 		}
 		return false;
 	}
-	const modules::ServiceFactory LocalStorage::factory = storage_factory;
 
 } // namespace fggl::data
 
diff --git a/include/fggl/display/glfw/module.hpp b/include/fggl/display/glfw/module.hpp
index e3df059..e4499df 100644
--- a/include/fggl/display/glfw/module.hpp
+++ b/include/fggl/display/glfw/module.hpp
@@ -36,10 +36,11 @@ namespace fggl::display {
 			fggl::input::Input::service,
 			fggl::gfx::WindowGraphics::service
 		};
-		static const modules::ServiceFactory factory;
+
+		static bool factory(modules::ModuleService name, modules::Services& serviceManager);
 	};
 
-	bool glfw_factory(modules::ModuleService service, modules::Services& services) {
+	bool GLFW::factory(modules::ModuleService service, modules::Services& services) {
 		if (service == WindowService::service) {
 			auto input = services.get<input::Input>();
 			auto graphics = services.get<gfx::WindowGraphics>();
@@ -50,7 +51,6 @@ namespace fggl::display {
 		}
 		return false;
 	}
-	const modules::ServiceFactory GLFW::factory = glfw_factory;
 
 } // namespace fggl::display
 
diff --git a/include/fggl/entity/module.hpp b/include/fggl/entity/module.hpp
index 0b70faa..b5d66d2 100644
--- a/include/fggl/entity/module.hpp
+++ b/include/fggl/entity/module.hpp
@@ -34,7 +34,7 @@ namespace fggl::entity {
 		constexpr static const std::array<modules::ModuleService, 1> depends = {
 			assets::Loader::service
 		};
-		static const modules::ServiceFactory factory;
+		static bool factory(modules::ModuleService name, modules::Services& serviceManager);
 	};
 
 	void install_component_factories(EntityFactory* factory);
diff --git a/include/fggl/gfx/ogl4/module.hpp b/include/fggl/gfx/ogl4/module.hpp
index c9501b5..7bd50ca 100644
--- a/include/fggl/gfx/ogl4/module.hpp
+++ b/include/fggl/gfx/ogl4/module.hpp
@@ -41,7 +41,8 @@ namespace fggl::gfx {
 			gui::FontLibrary::service,
 			entity::EntityFactory::service
 		};
-		static const modules::ServiceFactory factory;
+
+		static bool factory(modules::ModuleService name, modules::Services& serviceManager);
 	};
 
 } //namespace fggl::gfx
diff --git a/include/fggl/gui/module.hpp b/include/fggl/gui/module.hpp
index 6c926f2..4fb8127 100644
--- a/include/fggl/gui/module.hpp
+++ b/include/fggl/gui/module.hpp
@@ -32,10 +32,10 @@ namespace fggl::gui {
 		constexpr static const std::array<modules::ModuleService, 1> depends = {
 			data::Storage::service
 		};
-		static const modules::ServiceFactory factory;
+		static bool factory(modules::ModuleService name, modules::Services& serviceManager);
 	};
 
-	bool freetype_factory(modules::ModuleService service, modules::Services& services) {
+	bool FreeType::factory(modules::ModuleService service, modules::Services& services) {
 		if ( service == FontLibrary::service ) {
 			auto storage = services.get<data::Storage>();
 			services.create< FontLibrary >(storage);
@@ -43,7 +43,6 @@ namespace fggl::gui {
 		}
 		return false;
 	}
-	const modules::ServiceFactory FreeType::factory = freetype_factory;
 }
 
 #endif //FGGL_GUI_MODULE_HPP
diff --git a/include/fggl/input/module.hpp b/include/fggl/input/module.hpp
index 125259f..a10b216 100644
--- a/include/fggl/input/module.hpp
+++ b/include/fggl/input/module.hpp
@@ -31,17 +31,16 @@ namespace fggl::input {
 			SERVICE_INPUT
 		};
 		constexpr static const std::array<modules::ModuleService, 0> depends = {};
-		static const modules::ServiceFactory factory;
+		static bool factory(modules::ModuleService service, modules::Services& serviceManager);
 	};
 
-	bool input_factory(modules::ModuleService service, modules::Services& services) {
+	bool Generic::factory(modules::ModuleService service, modules::Services& services) {
 		if (service == SERVICE_INPUT) {
 			services.create<input::Input>();
 			return true;
 		}
 		return false;
 	}
-	const modules::ServiceFactory Generic::factory = input_factory;
 }
 
 #endif //FGGL_INPUT_MODULE_HPP
diff --git a/integrations/bullet/include/fggl/phys/bullet/module.hpp b/integrations/bullet/include/fggl/phys/bullet/module.hpp
index 7ef91f6..6950919 100644
--- a/integrations/bullet/include/fggl/phys/bullet/module.hpp
+++ b/integrations/bullet/include/fggl/phys/bullet/module.hpp
@@ -38,7 +38,8 @@ namespace fggl::phys::bullet {
 		constexpr static const std::array<modules::ModuleService, 1> depends = {
 			entity::EntityFactory::service
 		};
-		static const modules::ServiceFactory factory;
+
+		static bool factory(modules::ModuleService name, modules::Services& serviceManager);
 	};
 
 } // namespace fggl::phys::bullet
diff --git a/integrations/bullet/src/module.cpp b/integrations/bullet/src/module.cpp
index da7d6d4..7703f1d 100644
--- a/integrations/bullet/src/module.cpp
+++ b/integrations/bullet/src/module.cpp
@@ -83,13 +83,12 @@ namespace fggl::phys::bullet {
 		// add the body to the simulation
 	}
 
-	bool bullet_factory(modules::ModuleService service, modules::Services& services) {
+	bool Bullet::factory(modules::ModuleService service, modules::Services& services) {
 		if ( service == BIND_BULLET ) {
 			auto* entityFactory = services.get<entity::EntityFactory>();
 			entityFactory->bind(CONFIG_PHYS_BODY, add_bt_body);
 		}
 		return false;
 	}
-	const modules::ServiceFactory Bullet::factory = bullet_factory;
 
 } // namespace fggl::phys::bullet
\ No newline at end of file
-- 
GitLab