diff --git a/framework/CMakeLists.txt b/framework/CMakeLists.txt index f3957f7..3ca3540 100644 --- a/framework/CMakeLists.txt +++ b/framework/CMakeLists.txt @@ -9,17 +9,16 @@ add_subdirectory(std_utils) add_subdirectory(random) add_subdirectory(screen_director) add_subdirectory(filesystem) -add_subdirectory(simple_scene) add_subdirectory(organizer_scene) if(NOT MM_HEADLESS) add_subdirectory(sdl_service) add_subdirectory(simple_sdl_renderer) add_subdirectory(opengl_primitives) - add_subdirectory(opengl_renderer) - add_subdirectory(imgui) - add_subdirectory(input) + #add_subdirectory(opengl_renderer) + #add_subdirectory(imgui) + #add_subdirectory(input) add_subdirectory(sound) - add_subdirectory(tilemap) + #add_subdirectory(tilemap) endif() diff --git a/framework/engine/CMakeLists.txt b/framework/engine/CMakeLists.txt index a731b01..641acdc 100644 --- a/framework/engine/CMakeLists.txt +++ b/framework/engine/CMakeLists.txt @@ -15,7 +15,6 @@ add_library(engine src/mm/update_strategies/sequential_strategy.cpp src/mm/services/scene_service_interface.hpp - src/mm/services/scene_service_interface.cpp src/mm/services/net_channeled_interface.hpp ) diff --git a/framework/engine/src/mm/services/scene_service_interface.cpp b/framework/engine/src/mm/services/scene_service_interface.cpp deleted file mode 100644 index 7cc9f0a..0000000 --- a/framework/engine/src/mm/services/scene_service_interface.cpp +++ /dev/null @@ -1,27 +0,0 @@ -#include "./scene_service_interface.hpp" - -#include - -namespace MM { - -struct DefaultSystemsContainer { - // list of callables, expecting a Scene (ecs) and a step size (delta) - std::vector> systems; -}; - -void AddSystemToScene(::MM::Scene& scene, ::MM::System fn) { - auto& sc = scene.ctx_or_set(); - sc.systems.emplace_back(std::move(fn)); -} - -void EachSystemInScene(::MM::Scene& scene, std::function fn) { - auto* sc = scene.try_ctx(); - if (sc != nullptr) { - for (auto& system : sc->systems) { - fn(scene, system); - } - } -} - -} // MM - diff --git a/framework/engine/src/mm/services/scene_service_interface.hpp b/framework/engine/src/mm/services/scene_service_interface.hpp index 8a40fb6..012a249 100644 --- a/framework/engine/src/mm/services/scene_service_interface.hpp +++ b/framework/engine/src/mm/services/scene_service_interface.hpp @@ -10,14 +10,6 @@ namespace MM { using Scene = entt::basic_registry<::MM::Entity>; using System = std::function; - // opaque way to add a System to a Scene - [[deprecated("use organizer")]] - void AddSystemToScene(::MM::Scene& scene, ::MM::System fn); - - // opaque way to iterate over the Systems - [[deprecated("use organizer")]] - void EachSystemInScene(::MM::Scene& scene, std::function fn); - } // MM namespace MM::Services { @@ -34,12 +26,6 @@ namespace MM::Services { // dont use, except for when you know what you are doing! // be carefull of that one (lol) virtual void changeSceneNow(std::unique_ptr<::MM::Scene>&& new_scene) = 0; - - // adds a System to current Scene. - // default impl. will use getScene() ! - virtual void addSystemToScene(::MM::System fn) { - ::MM::AddSystemToScene(getScene(), std::move(fn)); - } }; } // MM::Services diff --git a/framework/opengl_renderer/test/CMakeLists.txt b/framework/opengl_renderer/test/CMakeLists.txt index c1d8d11..e3461be 100644 --- a/framework/opengl_renderer/test/CMakeLists.txt +++ b/framework/opengl_renderer/test/CMakeLists.txt @@ -1,7 +1,5 @@ add_executable(opengl_renderer_s_test ./opengl_renderer_s_test.cpp) -target_include_directories(opengl_renderer_s_test PRIVATE ".") - target_link_libraries(opengl_renderer_s_test opengl_renderer_s gtest_main @@ -13,8 +11,6 @@ add_test(NAME opengl_renderer_s_test COMMAND opengl_renderer_s_test) add_executable(imgui_render_task_test imgui_render_task_test.cpp) -target_include_directories(imgui_render_task_test PRIVATE ".") - target_link_libraries(imgui_render_task_test opengl_renderer_s imgui_service @@ -28,11 +24,9 @@ add_test(NAME imgui_render_task_test COMMAND imgui_render_task_test) add_executable(simple_rect_render_task_test simple_rect_render_task_test.cpp) -target_include_directories(simple_rect_render_task_test PRIVATE ".") - target_link_libraries(simple_rect_render_task_test opengl_renderer_s - simple_scene + organizer_scene simple_rect_render_task simple_velocity_system @@ -46,11 +40,9 @@ add_test(NAME simple_rect_render_task_test COMMAND simple_rect_render_task_test) add_executable(simple_sprite_render_task_test simple_sprite_render_task_test.cpp) -target_include_directories(simple_sprite_render_task_test PRIVATE ".") - target_link_libraries(simple_sprite_render_task_test opengl_renderer_s - simple_scene + organizer_scene simple_sprite_render_task simple_velocity_system @@ -64,11 +56,9 @@ add_test(NAME simple_sprite_render_task_test COMMAND simple_sprite_render_task_t add_executable(simple_spritesheet_render_task_test simple_spritesheet_render_task_test.cpp) -target_include_directories(simple_spritesheet_render_task_test PRIVATE ".") - target_link_libraries(simple_spritesheet_render_task_test opengl_renderer_s - simple_scene + organizer_scene simple_spritesheet_render_task #simple_velocity_system @@ -82,11 +72,9 @@ add_test(NAME simple_spritesheet_render_task_test COMMAND simple_spritesheet_ren add_executable(batched_spritesheet_render_task_test batched_spritesheet_render_task_test.cpp) -target_include_directories(batched_spritesheet_render_task_test PRIVATE ".") - target_link_libraries(batched_spritesheet_render_task_test opengl_renderer_s - simple_scene + organizer_scene batched_spritesheet_render_task #simple_velocity_system @@ -100,11 +88,9 @@ add_test(NAME batched_spritesheet_render_task_test COMMAND batched_spritesheet_r add_executable(blur_render_task_test blur_render_task_test.cpp) -target_include_directories(blur_render_task_test PRIVATE ".") - target_link_libraries(blur_render_task_test opengl_renderer_s - simple_scene + organizer_scene simple_rect_render_task blur_render_task copy_to_fb_render_task @@ -123,11 +109,9 @@ add_test(NAME blur_render_task_test COMMAND blur_render_task_test) add_executable(tilemap_render_task_test tilemap_render_task_test.cpp) -target_include_directories(tilemap_render_task_test PRIVATE ".") - target_link_libraries(tilemap_render_task_test opengl_renderer_s - simple_scene + organizer_scene imgui_service tilemap_render_task @@ -140,11 +124,9 @@ add_test(NAME tilemap_render_task_test COMMAND tilemap_render_task_test) add_executable(fast_sky_render_task_test fast_sky_render_task_test.cpp) -target_include_directories(fast_sky_render_task_test PRIVATE ".") - target_link_libraries(fast_sky_render_task_test opengl_renderer_s - simple_scene + organizer_scene #imgui_service fast_sky_render_task fast_sky_sun_system diff --git a/framework/opengl_renderer/test/simple_rect_render_task_test.cpp b/framework/opengl_renderer/test/simple_rect_render_task_test.cpp index 91e365c..868f403 100644 --- a/framework/opengl_renderer/test/simple_rect_render_task_test.cpp +++ b/framework/opengl_renderer/test/simple_rect_render_task_test.cpp @@ -1,10 +1,11 @@ +#include "entt/entity/fwd.hpp" #include #include #include #include -#include +#include #include #include @@ -28,10 +29,10 @@ TEST(simple_rect_render_task, it) { sdl_ss.createGLWindow("simple_rect_render_task_test", 1280, 720); - engine.addService(); - ASSERT_TRUE(engine.enableService()); + engine.addService(); + ASSERT_TRUE(engine.enableService()); - bool provide_ret = engine.provide(); + bool provide_ret = engine.provide(); ASSERT_TRUE(provide_ret); auto& scene = engine.tryService()->getScene(); @@ -44,7 +45,9 @@ TEST(simple_rect_render_task, it) { rs.addRenderTask(engine); // setup v system - MM::AddSystemToScene(scene, MM::Systems::SimpleVelocity); + auto& org = scene.set(); + + //MM::AddSystemToScene(scene, MM::Systems::SimpleVelocity); std::mt19937 mt(42); diff --git a/framework/simple_scene/CMakeLists.txt b/framework/simple_scene/CMakeLists.txt deleted file mode 100644 index af2963c..0000000 --- a/framework/simple_scene/CMakeLists.txt +++ /dev/null @@ -1,19 +0,0 @@ -cmake_minimum_required(VERSION 3.2) -project(simple_scene CXX) - -add_library(simple_scene - src/mm/services/simple_scene.hpp - src/mm/services/simple_scene.cpp -) - -target_include_directories(simple_scene PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/src") - -target_link_libraries(simple_scene - engine - common_components -) - -if (BUILD_TESTING) - add_subdirectory(test) -endif() - diff --git a/framework/simple_scene/src/mm/services/simple_scene.cpp b/framework/simple_scene/src/mm/services/simple_scene.cpp deleted file mode 100644 index 01c0d6f..0000000 --- a/framework/simple_scene/src/mm/services/simple_scene.cpp +++ /dev/null @@ -1,109 +0,0 @@ -#include "./simple_scene.hpp" - -#include - -#include - -#include - -#include -#define LOG_SSS(x) LOG("SimpleSceneService", x) - -namespace MM::Services { - -bool SimpleSceneService::enable(Engine& engine, std::vector& task_array) { - // add tasks - task_array.push_back( - UpdateStrategies::TaskInfo{"SimpleSceneService::scene_tick"} - .fn([this](Engine& e) { sceneFixedUpdate(e); }) - ); - task_array.push_back( - UpdateStrategies::TaskInfo{"SimpleSceneService::scene_change"} - .succeed("SimpleSceneService::scene_tick") - .fn([this](Engine& e) { changeSceneFixedUpdate(e); }) - ); - - // default scene - if (!_scene) { - _scene = std::make_unique(); - _scene->set(&engine); - } - - resetTime(); - - return true; -} - -void SimpleSceneService::disable(Engine&) { -} - -void SimpleSceneService::sceneFixedUpdate(Engine&) { - ZoneScoped; - - auto newNow = clock::now(); - auto deltaTime = std::chrono::duration_cast(newNow - _last_time); - _last_time = newNow; - _accumulator += deltaTime.count(); - const double dt = f_delta * 1'000'000'000.0; - - size_t continuous_counter = 0; - - auto& time_ctx = _scene->ctx_or_set(f_delta, initial_delta_factor); - time_ctx.tickDelta = f_delta * time_ctx.deltaFactor; - - // TODO: this is just cancer - while (_accumulator >= static_cast(dt)){ - _accumulator -= static_cast(dt); - continuous_counter++; - - ::MM::EachSystemInScene(*_scene, [&](::MM::Scene& s, ::MM::System& fn) { - fn(s, time_ctx.tickDelta); - }); - - TracyPlot("MM::Services::SimpleSceneService::_scene.alive", (int64_t)_scene->alive()); - } - - if (continuous_counter > 2) { - LOG_SSS(fmt::format("had {} contiguous scene ticks!", continuous_counter)); - } -} - -void SimpleSceneService::changeSceneFixedUpdate(Engine& engine) { - if (_next_scene) { - LOG_SSS("changing scene..."); - _scene = std::move(_next_scene); - _scene->set(&engine); // make engine accessible from scene - } -} - -void SimpleSceneService::changeScene(std::unique_ptr&& new_scene) { - if (_next_scene) { - LOG_SSS("warn: already next scene enqueued! overwriting..."); - } - - _next_scene = std::move(new_scene); - - //// ensure there are systems - //if (!_next_scene->try_ctx()) { - //_next_scene->set(); - //} -} - -void SimpleSceneService::changeSceneNow(std::unique_ptr&& new_scene) { - _scene = std::move(new_scene); - //_scene->set(&engine); // make engine accessible from scene - - //// ensure there are systems - //if (!_scene->try_ctx()) { - //_scene->set(); - //} -} - - -void SimpleSceneService::resetTime(void) { - _last_time = clock::now(); - _accumulator = 0; -} - -} // MM::Services - diff --git a/framework/simple_scene/src/mm/services/simple_scene.hpp b/framework/simple_scene/src/mm/services/simple_scene.hpp deleted file mode 100644 index 3a5cbe0..0000000 --- a/framework/simple_scene/src/mm/services/simple_scene.hpp +++ /dev/null @@ -1,48 +0,0 @@ -#pragma once - -#include - -#include - -namespace MM::Services { - - // provides an implementation for SceneServiceInterface - class SimpleSceneService : public SceneServiceInterface { - private: - std::unique_ptr _scene; - std::unique_ptr _next_scene; // enqueued next scene - - using clock = std::chrono::high_resolution_clock; - long long int _accumulator = 0; - std::chrono::time_point _last_time; - - public: - const float f_delta; - - float initial_delta_factor = 1.f; - - public: - explicit SimpleSceneService(const float update_delta = 1.f/60.f) : f_delta(update_delta) {} - - const char* name(void) override { return "SimpleSceneService"; } - - bool enable(Engine& engine, std::vector& task_array) override; - void disable(Engine& engine) override; - - private: - void sceneFixedUpdate(Engine& engine); - void changeSceneFixedUpdate(Engine& engine); - - public: - Scene& getScene(void) override { return *_scene; } - - void changeScene(std::unique_ptr&& new_scene) override; - - // be carefull of that one - void changeSceneNow(std::unique_ptr&& new_scene) override; - - void resetTime(void); - }; - -} // MM::Services - diff --git a/framework/simple_scene/test/CMakeLists.txt b/framework/simple_scene/test/CMakeLists.txt deleted file mode 100644 index 7a32bdb..0000000 --- a/framework/simple_scene/test/CMakeLists.txt +++ /dev/null @@ -1,14 +0,0 @@ -add_executable(simple_scene_test - ss_test.cpp -) - -target_include_directories(simple_scene_test PRIVATE ".") - -target_link_libraries(simple_scene_test - engine - simple_scene - gtest_main -) - -add_test(NAME simple_scene_test COMMAND simple_scene_test) - diff --git a/framework/simple_scene/test/ss_test.cpp b/framework/simple_scene/test/ss_test.cpp deleted file mode 100644 index 347ac47..0000000 --- a/framework/simple_scene/test/ss_test.cpp +++ /dev/null @@ -1,72 +0,0 @@ -#include - -#include -#include -#include - -TEST(simple_scene, add_en_dis) { - MM::Engine engine; - - engine.addService(); - - ASSERT_TRUE(engine.enableService()); - - { - auto* sss = engine.tryService(); - ASSERT_NE(sss, nullptr); - - auto& s = sss->getScene(); - auto e = s.create(); - ASSERT_TRUE(s.valid(e)); - } - - engine.disableService(); -} - -TEST(simple_scene, add_en_dis_provide) { - MM::Engine engine; - - engine.addService(); - engine.provide(); - - ASSERT_TRUE(engine.enableService()); - - { - auto* ssi = engine.tryService(); - ASSERT_NE(ssi, nullptr); - - auto& s = ssi->getScene(); - auto e = s.create(); - ASSERT_TRUE(s.valid(e)); - } - - engine.disableService(); -} - -TEST(simple_scene, change_scene) { - MM::Engine engine; - - engine.addService(); - ASSERT_TRUE(engine.enableService()); - - { - auto* sss = engine.tryService(); - ASSERT_NE(sss, nullptr); - - auto e = sss->getScene().create(); - ASSERT_TRUE(sss->getScene().valid(e)); - - sss->changeScene(std::make_unique()); - - ASSERT_TRUE(sss->getScene().valid(e)); - - //engine.fixedUpdate(); - engine.getUpdateStrategy().addDeferred([](MM::Engine& eng) {eng.stop();}); - engine.run(); - - ASSERT_FALSE(sss->getScene().valid(e)); - } - - engine.disableService(); -} - diff --git a/screens/CMakeLists.txt b/screens/CMakeLists.txt index 2db0498..a8d6b10 100644 --- a/screens/CMakeLists.txt +++ b/screens/CMakeLists.txt @@ -2,6 +2,6 @@ cmake_minimum_required(VERSION 3.2) project(screens CXX) if(NOT MM_HEADLESS) - add_subdirectory(mm_logo) + #add_subdirectory(mm_logo) endif() diff --git a/screens/mm_logo/CMakeLists.txt b/screens/mm_logo/CMakeLists.txt index 2513a21..3aa30d4 100644 --- a/screens/mm_logo/CMakeLists.txt +++ b/screens/mm_logo/CMakeLists.txt @@ -15,7 +15,7 @@ target_link_libraries(mm_logo_screen glm engine screen_director - simple_scene + organizer_scene opengl_renderer_s simple_sprite_render_task diff --git a/screens/mm_logo/src/mm/screens/mm_logo_screen.cpp b/screens/mm_logo/src/mm/screens/mm_logo_screen.cpp index 098ce2a..fcb82db 100644 --- a/screens/mm_logo/src/mm/screens/mm_logo_screen.cpp +++ b/screens/mm_logo/src/mm/screens/mm_logo_screen.cpp @@ -2,7 +2,7 @@ #include -#include +#include #include #include diff --git a/systems/CMakeLists.txt b/systems/CMakeLists.txt index f1876a0..5da2891 100644 --- a/systems/CMakeLists.txt +++ b/systems/CMakeLists.txt @@ -4,7 +4,7 @@ project(systems CXX) add_subdirectory(simple_velocity) if(NOT MM_HEADLESS) - add_subdirectory(player_velocity) - add_subdirectory(fast_sky_sun) + #add_subdirectory(player_velocity) + #add_subdirectory(fast_sky_sun) endif() diff --git a/systems/simple_velocity/src/mm/systems/simple_velocity_system2d.hpp b/systems/simple_velocity/src/mm/systems/simple_velocity_system2d.hpp index a3fc291..482a372 100644 --- a/systems/simple_velocity/src/mm/systems/simple_velocity_system2d.hpp +++ b/systems/simple_velocity/src/mm/systems/simple_velocity_system2d.hpp @@ -4,12 +4,13 @@ #include #include +#include #include namespace MM::Systems { - inline void SimpleVelocity(Scene& scene, float delta) { - scene.view().each([delta](auto, auto& t, auto& v) { + inline void simple_velocity(entt::view, Components::Transform2D, const Components::Velocity2D> view, const Components::TimeDelta& td) { + view.each([delta = td.tickDelta](auto, auto& t, auto& v) { t.position += v.velocity * delta; t.rotation += v.rotation * delta; } diff --git a/systems/simple_velocity/test/CMakeLists.txt b/systems/simple_velocity/test/CMakeLists.txt index 9a233b9..5a3d53a 100644 --- a/systems/simple_velocity/test/CMakeLists.txt +++ b/systems/simple_velocity/test/CMakeLists.txt @@ -6,7 +6,6 @@ target_include_directories(simple_velocity_test PRIVATE ".") target_link_libraries(simple_velocity_test simple_velocity_system - simple_scene gtest_main ) diff --git a/systems/simple_velocity/test/simple_velocity_test.cpp b/systems/simple_velocity/test/simple_velocity_test.cpp index d362dcd..28d9586 100644 --- a/systems/simple_velocity/test/simple_velocity_test.cpp +++ b/systems/simple_velocity/test/simple_velocity_test.cpp @@ -3,6 +3,7 @@ #include #include +#include #include @@ -10,8 +11,15 @@ TEST(simple_velocity_2d, basic_run) { MM::Scene scene; // setup v system - MM::AddSystemToScene(scene, MM::Systems::SimpleVelocity); + auto& org = scene.set(); + org.emplace<&MM::Systems::simple_velocity>("simple_velocity"); + auto graph = org.graph(); + // setup delta + auto& time_ctx = scene.ctx_or_set(1.f/60.f, 1.f); + time_ctx.tickDelta = 1.f/60.f * time_ctx.deltaFactor; + + // setup test entity auto e = scene.create(); auto& t = scene.emplace(e); auto& v = scene.emplace(e); @@ -21,9 +29,10 @@ TEST(simple_velocity_2d, basic_run) { v.velocity = { 1.f, 1.f }; v.rotation = 0.f; - ::MM::EachSystemInScene(scene, [&](::MM::Scene& s, ::MM::System& fn) { - fn(s, 1.f/60.f); - }); + // run all systems + for (auto&& vert : graph) { + vert.callback()(vert.data(), scene); + } ASSERT_EQ(t.position.x, 1.f * 1.f/60.f); }