mirror of
https://github.com/MadeOfJelly/MushMachine.git
synced 2025-06-18 18:56:36 +02:00
reworked the general update strategy interface
This commit is contained in:
@ -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;
|
||||
|
||||
|
@ -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; }
|
||||
|
||||
|
Reference in New Issue
Block a user