reworked the general update strategy interface

This commit is contained in:
2021-04-28 19:38:25 +02:00
parent b8a5cd7cf4
commit efad254193
53 changed files with 756 additions and 889 deletions

View File

@ -36,7 +36,25 @@ static std::ostream& operator<<(std::ostream& out, const std::vector<entt::organ
namespace MM::Services {
bool OrganizerSceneService::enable(Engine& engine) {
bool OrganizerSceneService::enable(Engine& engine, std::vector<UpdateStrategies::TaskInfo>& task_array) {
// add tasks
task_array.push_back(
UpdateStrategies::TaskInfo{"OrganizerSceneService::scene_update"}
.fn([this](Engine& e) { sceneUpdate(e); })
);
task_array.push_back(
UpdateStrategies::TaskInfo{"OrganizerSceneService::scene_tick"}
.fn([this](Engine& e) { sceneFixedUpdate(e); })
// bc it renders imgui, but this is not "hard"
.succeed("OrganizerSceneService::scene_update")
);
task_array.push_back(
UpdateStrategies::TaskInfo{"OrganizerSceneService::scene_changer"}
.fn([this](Engine& e) { changeSceneFixedUpdate(e); })
.succeed("OrganizerSceneService::scene_tick")
);
// default scene
if (!_scene) {
_scene = std::make_unique<Scene>();
@ -52,38 +70,6 @@ bool OrganizerSceneService::enable(Engine& engine) {
void OrganizerSceneService::disable(Engine&) {
}
std::vector<UpdateStrategies::UpdateCreationInfo> OrganizerSceneService::registerUpdates(void) {
using namespace entt::literals;
return {
{
"OrganizerSceneService::scene_update"_hs,
"OrganizerSceneService::scene_update",
[this](Engine& e) { sceneUpdate(e); },
// depends on imgui
},
{
"OrganizerSceneService::scene_tick"_hs,
"OrganizerSceneService::scene_tick",
[this](Engine& e) { sceneFixedUpdate(e); },
UpdateStrategies::update_phase_t::MAIN,
true,
{
"OrganizerSceneService::scene_update"_hs, // bc it renders imgui, but this is not "hard"
}
},
{
"OrganizerSceneService::scene_changer"_hs,
"OrganizerSceneService::scene_changer",
[this](Engine& e) { changeSceneFixedUpdate(e); },
UpdateStrategies::update_phase_t::MAIN,
true,
{
"OrganizerSceneService::scene_tick"_hs,
}
},
};
}
void OrganizerSceneService::sceneFixedUpdate(Engine&) {
ZoneScoped;

View File

@ -1,5 +1,6 @@
#pragma once
#include "mm/services/service.hpp"
#include <mm/services/scene_service_interface.hpp>
#include <entt/fwd.hpp>
@ -28,11 +29,9 @@ namespace MM::Services {
const char* name(void) override { return "OrganizerSceneService"; }
bool enable(Engine& engine) override;
bool enable(Engine& engine, std::vector<UpdateStrategies::TaskInfo>& task_array) override;
void disable(Engine& engine) override;
std::vector<UpdateStrategies::UpdateCreationInfo> registerUpdates(void) override;
public: // scene interface
Scene& getScene(void) override { return *_scene; }