mirror of
https://github.com/MadeOfJelly/MushMachine.git
synced 2025-04-19 01:32:58 +02:00
remove simple scene and disable most stuff that used it. TODO: replace with organizer
This commit is contained in:
parent
b0e065e2ef
commit
0ad504e5d4
@ -9,17 +9,16 @@ add_subdirectory(std_utils)
|
|||||||
add_subdirectory(random)
|
add_subdirectory(random)
|
||||||
add_subdirectory(screen_director)
|
add_subdirectory(screen_director)
|
||||||
add_subdirectory(filesystem)
|
add_subdirectory(filesystem)
|
||||||
add_subdirectory(simple_scene)
|
|
||||||
add_subdirectory(organizer_scene)
|
add_subdirectory(organizer_scene)
|
||||||
|
|
||||||
if(NOT MM_HEADLESS)
|
if(NOT MM_HEADLESS)
|
||||||
add_subdirectory(sdl_service)
|
add_subdirectory(sdl_service)
|
||||||
add_subdirectory(simple_sdl_renderer)
|
add_subdirectory(simple_sdl_renderer)
|
||||||
add_subdirectory(opengl_primitives)
|
add_subdirectory(opengl_primitives)
|
||||||
add_subdirectory(opengl_renderer)
|
#add_subdirectory(opengl_renderer)
|
||||||
add_subdirectory(imgui)
|
#add_subdirectory(imgui)
|
||||||
add_subdirectory(input)
|
#add_subdirectory(input)
|
||||||
add_subdirectory(sound)
|
add_subdirectory(sound)
|
||||||
add_subdirectory(tilemap)
|
#add_subdirectory(tilemap)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
@ -15,7 +15,6 @@ add_library(engine
|
|||||||
src/mm/update_strategies/sequential_strategy.cpp
|
src/mm/update_strategies/sequential_strategy.cpp
|
||||||
|
|
||||||
src/mm/services/scene_service_interface.hpp
|
src/mm/services/scene_service_interface.hpp
|
||||||
src/mm/services/scene_service_interface.cpp
|
|
||||||
|
|
||||||
src/mm/services/net_channeled_interface.hpp
|
src/mm/services/net_channeled_interface.hpp
|
||||||
)
|
)
|
||||||
|
@ -1,27 +0,0 @@
|
|||||||
#include "./scene_service_interface.hpp"
|
|
||||||
|
|
||||||
#include <entt/entity/registry.hpp>
|
|
||||||
|
|
||||||
namespace MM {
|
|
||||||
|
|
||||||
struct DefaultSystemsContainer {
|
|
||||||
// list of callables, expecting a Scene (ecs) and a step size (delta)
|
|
||||||
std::vector<std::function<void(Scene&, float)>> systems;
|
|
||||||
};
|
|
||||||
|
|
||||||
void AddSystemToScene(::MM::Scene& scene, ::MM::System fn) {
|
|
||||||
auto& sc = scene.ctx_or_set<DefaultSystemsContainer>();
|
|
||||||
sc.systems.emplace_back(std::move(fn));
|
|
||||||
}
|
|
||||||
|
|
||||||
void EachSystemInScene(::MM::Scene& scene, std::function<void(::MM::Scene&, ::MM::System&)> fn) {
|
|
||||||
auto* sc = scene.try_ctx<DefaultSystemsContainer>();
|
|
||||||
if (sc != nullptr) {
|
|
||||||
for (auto& system : sc->systems) {
|
|
||||||
fn(scene, system);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} // MM
|
|
||||||
|
|
@ -10,14 +10,6 @@ namespace MM {
|
|||||||
using Scene = entt::basic_registry<::MM::Entity>;
|
using Scene = entt::basic_registry<::MM::Entity>;
|
||||||
using System = std::function<void(::MM::Scene&, float)>;
|
using System = std::function<void(::MM::Scene&, float)>;
|
||||||
|
|
||||||
// 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<void(::MM::Scene&, ::MM::System&)> fn);
|
|
||||||
|
|
||||||
} // MM
|
} // MM
|
||||||
|
|
||||||
namespace MM::Services {
|
namespace MM::Services {
|
||||||
@ -34,12 +26,6 @@ namespace MM::Services {
|
|||||||
// dont use, except for when you know what you are doing!
|
// dont use, except for when you know what you are doing!
|
||||||
// be carefull of that one (lol)
|
// be carefull of that one (lol)
|
||||||
virtual void changeSceneNow(std::unique_ptr<::MM::Scene>&& new_scene) = 0;
|
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
|
} // MM::Services
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
add_executable(opengl_renderer_s_test ./opengl_renderer_s_test.cpp)
|
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
|
target_link_libraries(opengl_renderer_s_test
|
||||||
opengl_renderer_s
|
opengl_renderer_s
|
||||||
gtest_main
|
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)
|
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
|
target_link_libraries(imgui_render_task_test
|
||||||
opengl_renderer_s
|
opengl_renderer_s
|
||||||
imgui_service
|
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)
|
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
|
target_link_libraries(simple_rect_render_task_test
|
||||||
opengl_renderer_s
|
opengl_renderer_s
|
||||||
simple_scene
|
organizer_scene
|
||||||
simple_rect_render_task
|
simple_rect_render_task
|
||||||
|
|
||||||
simple_velocity_system
|
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)
|
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
|
target_link_libraries(simple_sprite_render_task_test
|
||||||
opengl_renderer_s
|
opengl_renderer_s
|
||||||
simple_scene
|
organizer_scene
|
||||||
simple_sprite_render_task
|
simple_sprite_render_task
|
||||||
|
|
||||||
simple_velocity_system
|
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)
|
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
|
target_link_libraries(simple_spritesheet_render_task_test
|
||||||
opengl_renderer_s
|
opengl_renderer_s
|
||||||
simple_scene
|
organizer_scene
|
||||||
simple_spritesheet_render_task
|
simple_spritesheet_render_task
|
||||||
|
|
||||||
#simple_velocity_system
|
#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)
|
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
|
target_link_libraries(batched_spritesheet_render_task_test
|
||||||
opengl_renderer_s
|
opengl_renderer_s
|
||||||
simple_scene
|
organizer_scene
|
||||||
batched_spritesheet_render_task
|
batched_spritesheet_render_task
|
||||||
|
|
||||||
#simple_velocity_system
|
#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)
|
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
|
target_link_libraries(blur_render_task_test
|
||||||
opengl_renderer_s
|
opengl_renderer_s
|
||||||
simple_scene
|
organizer_scene
|
||||||
simple_rect_render_task
|
simple_rect_render_task
|
||||||
blur_render_task
|
blur_render_task
|
||||||
copy_to_fb_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)
|
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
|
target_link_libraries(tilemap_render_task_test
|
||||||
opengl_renderer_s
|
opengl_renderer_s
|
||||||
simple_scene
|
organizer_scene
|
||||||
imgui_service
|
imgui_service
|
||||||
tilemap_render_task
|
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)
|
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
|
target_link_libraries(fast_sky_render_task_test
|
||||||
opengl_renderer_s
|
opengl_renderer_s
|
||||||
simple_scene
|
organizer_scene
|
||||||
#imgui_service
|
#imgui_service
|
||||||
fast_sky_render_task
|
fast_sky_render_task
|
||||||
fast_sky_sun_system
|
fast_sky_sun_system
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
|
#include "entt/entity/fwd.hpp"
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
|
|
||||||
#include <mm/engine.hpp>
|
#include <mm/engine.hpp>
|
||||||
|
|
||||||
#include <mm/services/filesystem.hpp>
|
#include <mm/services/filesystem.hpp>
|
||||||
#include <mm/services/sdl_service.hpp>
|
#include <mm/services/sdl_service.hpp>
|
||||||
#include <mm/services/simple_scene.hpp>
|
#include <mm/services/organizer_scene.hpp>
|
||||||
#include <mm/services/opengl_renderer.hpp>
|
#include <mm/services/opengl_renderer.hpp>
|
||||||
|
|
||||||
#include <entt/entity/registry.hpp>
|
#include <entt/entity/registry.hpp>
|
||||||
@ -28,10 +29,10 @@ TEST(simple_rect_render_task, it) {
|
|||||||
|
|
||||||
sdl_ss.createGLWindow("simple_rect_render_task_test", 1280, 720);
|
sdl_ss.createGLWindow("simple_rect_render_task_test", 1280, 720);
|
||||||
|
|
||||||
engine.addService<MM::Services::SimpleSceneService>();
|
engine.addService<MM::Services::OrganizerSceneService>();
|
||||||
ASSERT_TRUE(engine.enableService<MM::Services::SimpleSceneService>());
|
ASSERT_TRUE(engine.enableService<MM::Services::OrganizerSceneService>());
|
||||||
|
|
||||||
bool provide_ret = engine.provide<MM::Services::SceneServiceInterface, MM::Services::SimpleSceneService>();
|
bool provide_ret = engine.provide<MM::Services::SceneServiceInterface, MM::Services::OrganizerSceneService>();
|
||||||
ASSERT_TRUE(provide_ret);
|
ASSERT_TRUE(provide_ret);
|
||||||
auto& scene = engine.tryService<MM::Services::SceneServiceInterface>()->getScene();
|
auto& scene = engine.tryService<MM::Services::SceneServiceInterface>()->getScene();
|
||||||
|
|
||||||
@ -44,7 +45,9 @@ TEST(simple_rect_render_task, it) {
|
|||||||
rs.addRenderTask<MM::OpenGL::RenderTasks::SimpleRect>(engine);
|
rs.addRenderTask<MM::OpenGL::RenderTasks::SimpleRect>(engine);
|
||||||
|
|
||||||
// setup v system
|
// setup v system
|
||||||
MM::AddSystemToScene(scene, MM::Systems::SimpleVelocity);
|
auto& org = scene.set<entt::organizer>();
|
||||||
|
|
||||||
|
//MM::AddSystemToScene(scene, MM::Systems::SimpleVelocity);
|
||||||
|
|
||||||
std::mt19937 mt(42);
|
std::mt19937 mt(42);
|
||||||
|
|
||||||
|
@ -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()
|
|
||||||
|
|
@ -1,109 +0,0 @@
|
|||||||
#include "./simple_scene.hpp"
|
|
||||||
|
|
||||||
#include <mm/components/time_delta.hpp>
|
|
||||||
|
|
||||||
#include <entt/entity/registry.hpp>
|
|
||||||
|
|
||||||
#include <tracy/Tracy.hpp>
|
|
||||||
|
|
||||||
#include <mm/logger.hpp>
|
|
||||||
#define LOG_SSS(x) LOG("SimpleSceneService", x)
|
|
||||||
|
|
||||||
namespace MM::Services {
|
|
||||||
|
|
||||||
bool SimpleSceneService::enable(Engine& engine, std::vector<UpdateStrategies::TaskInfo>& 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>();
|
|
||||||
_scene->set<MM::Engine*>(&engine);
|
|
||||||
}
|
|
||||||
|
|
||||||
resetTime();
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void SimpleSceneService::disable(Engine&) {
|
|
||||||
}
|
|
||||||
|
|
||||||
void SimpleSceneService::sceneFixedUpdate(Engine&) {
|
|
||||||
ZoneScoped;
|
|
||||||
|
|
||||||
auto newNow = clock::now();
|
|
||||||
auto deltaTime = std::chrono::duration_cast<std::chrono::nanoseconds>(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<MM::Components::TimeDelta>(f_delta, initial_delta_factor);
|
|
||||||
time_ctx.tickDelta = f_delta * time_ctx.deltaFactor;
|
|
||||||
|
|
||||||
// TODO: this is just cancer
|
|
||||||
while (_accumulator >= static_cast<decltype(_accumulator)>(dt)){
|
|
||||||
_accumulator -= static_cast<decltype(_accumulator)>(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<MM::Engine*>(&engine); // make engine accessible from scene
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void SimpleSceneService::changeScene(std::unique_ptr<Scene>&& 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<MM::simple_scene::SystemsContainer>()) {
|
|
||||||
//_next_scene->set<MM::simple_scene::SystemsContainer>();
|
|
||||||
//}
|
|
||||||
}
|
|
||||||
|
|
||||||
void SimpleSceneService::changeSceneNow(std::unique_ptr<Scene>&& new_scene) {
|
|
||||||
_scene = std::move(new_scene);
|
|
||||||
//_scene->set<MM::Engine*>(&engine); // make engine accessible from scene
|
|
||||||
|
|
||||||
//// ensure there are systems
|
|
||||||
//if (!_scene->try_ctx<MM::simple_scene::SystemsContainer>()) {
|
|
||||||
//_scene->set<MM::simple_scene::SystemsContainer>();
|
|
||||||
//}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void SimpleSceneService::resetTime(void) {
|
|
||||||
_last_time = clock::now();
|
|
||||||
_accumulator = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
} // MM::Services
|
|
||||||
|
|
@ -1,48 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <mm/services/scene_service_interface.hpp>
|
|
||||||
|
|
||||||
#include <chrono>
|
|
||||||
|
|
||||||
namespace MM::Services {
|
|
||||||
|
|
||||||
// provides an implementation for SceneServiceInterface
|
|
||||||
class SimpleSceneService : public SceneServiceInterface {
|
|
||||||
private:
|
|
||||||
std::unique_ptr<Scene> _scene;
|
|
||||||
std::unique_ptr<Scene> _next_scene; // enqueued next scene
|
|
||||||
|
|
||||||
using clock = std::chrono::high_resolution_clock;
|
|
||||||
long long int _accumulator = 0;
|
|
||||||
std::chrono::time_point<clock> _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<UpdateStrategies::TaskInfo>& 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<Scene>&& new_scene) override;
|
|
||||||
|
|
||||||
// be carefull of that one
|
|
||||||
void changeSceneNow(std::unique_ptr<Scene>&& new_scene) override;
|
|
||||||
|
|
||||||
void resetTime(void);
|
|
||||||
};
|
|
||||||
|
|
||||||
} // MM::Services
|
|
||||||
|
|
@ -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)
|
|
||||||
|
|
@ -1,72 +0,0 @@
|
|||||||
#include <gtest/gtest.h>
|
|
||||||
|
|
||||||
#include <mm/engine.hpp>
|
|
||||||
#include <mm/services/simple_scene.hpp>
|
|
||||||
#include <entt/entity/registry.hpp>
|
|
||||||
|
|
||||||
TEST(simple_scene, add_en_dis) {
|
|
||||||
MM::Engine engine;
|
|
||||||
|
|
||||||
engine.addService<MM::Services::SimpleSceneService>();
|
|
||||||
|
|
||||||
ASSERT_TRUE(engine.enableService<MM::Services::SimpleSceneService>());
|
|
||||||
|
|
||||||
{
|
|
||||||
auto* sss = engine.tryService<MM::Services::SimpleSceneService>();
|
|
||||||
ASSERT_NE(sss, nullptr);
|
|
||||||
|
|
||||||
auto& s = sss->getScene();
|
|
||||||
auto e = s.create();
|
|
||||||
ASSERT_TRUE(s.valid(e));
|
|
||||||
}
|
|
||||||
|
|
||||||
engine.disableService<MM::Services::SimpleSceneService>();
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST(simple_scene, add_en_dis_provide) {
|
|
||||||
MM::Engine engine;
|
|
||||||
|
|
||||||
engine.addService<MM::Services::SimpleSceneService>();
|
|
||||||
engine.provide<MM::Services::SceneServiceInterface, MM::Services::SimpleSceneService>();
|
|
||||||
|
|
||||||
ASSERT_TRUE(engine.enableService<MM::Services::SimpleSceneService>());
|
|
||||||
|
|
||||||
{
|
|
||||||
auto* ssi = engine.tryService<MM::Services::SceneServiceInterface>();
|
|
||||||
ASSERT_NE(ssi, nullptr);
|
|
||||||
|
|
||||||
auto& s = ssi->getScene();
|
|
||||||
auto e = s.create();
|
|
||||||
ASSERT_TRUE(s.valid(e));
|
|
||||||
}
|
|
||||||
|
|
||||||
engine.disableService<MM::Services::SimpleSceneService>();
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST(simple_scene, change_scene) {
|
|
||||||
MM::Engine engine;
|
|
||||||
|
|
||||||
engine.addService<MM::Services::SimpleSceneService>();
|
|
||||||
ASSERT_TRUE(engine.enableService<MM::Services::SimpleSceneService>());
|
|
||||||
|
|
||||||
{
|
|
||||||
auto* sss = engine.tryService<MM::Services::SimpleSceneService>();
|
|
||||||
ASSERT_NE(sss, nullptr);
|
|
||||||
|
|
||||||
auto e = sss->getScene().create();
|
|
||||||
ASSERT_TRUE(sss->getScene().valid(e));
|
|
||||||
|
|
||||||
sss->changeScene(std::make_unique<MM::Scene>());
|
|
||||||
|
|
||||||
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<MM::Services::SimpleSceneService>();
|
|
||||||
}
|
|
||||||
|
|
@ -2,6 +2,6 @@ cmake_minimum_required(VERSION 3.2)
|
|||||||
project(screens CXX)
|
project(screens CXX)
|
||||||
|
|
||||||
if(NOT MM_HEADLESS)
|
if(NOT MM_HEADLESS)
|
||||||
add_subdirectory(mm_logo)
|
#add_subdirectory(mm_logo)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ target_link_libraries(mm_logo_screen
|
|||||||
glm
|
glm
|
||||||
engine
|
engine
|
||||||
screen_director
|
screen_director
|
||||||
simple_scene
|
organizer_scene
|
||||||
|
|
||||||
opengl_renderer_s
|
opengl_renderer_s
|
||||||
simple_sprite_render_task
|
simple_sprite_render_task
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
#include <glm/gtc/constants.hpp>
|
#include <glm/gtc/constants.hpp>
|
||||||
|
|
||||||
#include <mm/services/simple_scene.hpp>
|
#include <mm/services/organizer_scene.hpp>
|
||||||
#include <mm/services/opengl_renderer.hpp>
|
#include <mm/services/opengl_renderer.hpp>
|
||||||
|
|
||||||
#include <entt/entity/registry.hpp>
|
#include <entt/entity/registry.hpp>
|
||||||
|
@ -4,7 +4,7 @@ project(systems CXX)
|
|||||||
add_subdirectory(simple_velocity)
|
add_subdirectory(simple_velocity)
|
||||||
|
|
||||||
if(NOT MM_HEADLESS)
|
if(NOT MM_HEADLESS)
|
||||||
add_subdirectory(player_velocity)
|
#add_subdirectory(player_velocity)
|
||||||
add_subdirectory(fast_sky_sun)
|
#add_subdirectory(fast_sky_sun)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
@ -4,12 +4,13 @@
|
|||||||
|
|
||||||
#include <mm/components/velocity2d.hpp>
|
#include <mm/components/velocity2d.hpp>
|
||||||
#include <mm/components/transform2d.hpp>
|
#include <mm/components/transform2d.hpp>
|
||||||
|
#include <mm/components/time_delta.hpp>
|
||||||
|
|
||||||
#include <mm/services/scene_service_interface.hpp>
|
#include <mm/services/scene_service_interface.hpp>
|
||||||
|
|
||||||
namespace MM::Systems {
|
namespace MM::Systems {
|
||||||
inline void SimpleVelocity(Scene& scene, float delta) {
|
inline void simple_velocity(entt::view<entt::exclude_t<>, Components::Transform2D, const Components::Velocity2D> view, const Components::TimeDelta& td) {
|
||||||
scene.view<MM::Components::Transform2D, MM::Components::Velocity2D>().each([delta](auto, auto& t, auto& v) {
|
view.each([delta = td.tickDelta](auto, auto& t, auto& v) {
|
||||||
t.position += v.velocity * delta;
|
t.position += v.velocity * delta;
|
||||||
t.rotation += v.rotation * delta;
|
t.rotation += v.rotation * delta;
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,6 @@ target_include_directories(simple_velocity_test PRIVATE ".")
|
|||||||
|
|
||||||
target_link_libraries(simple_velocity_test
|
target_link_libraries(simple_velocity_test
|
||||||
simple_velocity_system
|
simple_velocity_system
|
||||||
simple_scene
|
|
||||||
gtest_main
|
gtest_main
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
#include <mm/engine_fwd.hpp>
|
#include <mm/engine_fwd.hpp>
|
||||||
|
|
||||||
#include <entt/entity/registry.hpp>
|
#include <entt/entity/registry.hpp>
|
||||||
|
#include <entt/entity/organizer.hpp>
|
||||||
|
|
||||||
#include <mm/systems/simple_velocity_system2d.hpp>
|
#include <mm/systems/simple_velocity_system2d.hpp>
|
||||||
|
|
||||||
@ -10,8 +11,15 @@ TEST(simple_velocity_2d, basic_run) {
|
|||||||
MM::Scene scene;
|
MM::Scene scene;
|
||||||
|
|
||||||
// setup v system
|
// setup v system
|
||||||
MM::AddSystemToScene(scene, MM::Systems::SimpleVelocity);
|
auto& org = scene.set<entt::organizer>();
|
||||||
|
org.emplace<&MM::Systems::simple_velocity>("simple_velocity");
|
||||||
|
auto graph = org.graph();
|
||||||
|
|
||||||
|
// setup delta
|
||||||
|
auto& time_ctx = scene.ctx_or_set<MM::Components::TimeDelta>(1.f/60.f, 1.f);
|
||||||
|
time_ctx.tickDelta = 1.f/60.f * time_ctx.deltaFactor;
|
||||||
|
|
||||||
|
// setup test entity
|
||||||
auto e = scene.create();
|
auto e = scene.create();
|
||||||
auto& t = scene.emplace<MM::Components::Transform2D>(e);
|
auto& t = scene.emplace<MM::Components::Transform2D>(e);
|
||||||
auto& v = scene.emplace<MM::Components::Velocity2D>(e);
|
auto& v = scene.emplace<MM::Components::Velocity2D>(e);
|
||||||
@ -21,9 +29,10 @@ TEST(simple_velocity_2d, basic_run) {
|
|||||||
v.velocity = { 1.f, 1.f };
|
v.velocity = { 1.f, 1.f };
|
||||||
v.rotation = 0.f;
|
v.rotation = 0.f;
|
||||||
|
|
||||||
::MM::EachSystemInScene(scene, [&](::MM::Scene& s, ::MM::System& fn) {
|
// run all systems
|
||||||
fn(s, 1.f/60.f);
|
for (auto&& vert : graph) {
|
||||||
});
|
vert.callback()(vert.data(), scene);
|
||||||
|
}
|
||||||
|
|
||||||
ASSERT_EQ(t.position.x, 1.f * 1.f/60.f);
|
ASSERT_EQ(t.position.x, 1.f * 1.f/60.f);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user