diff --git a/src/services/impl/workflow_frame_scene_step.cpp b/src/services/impl/workflow_frame_scene_step.cpp new file mode 100644 index 0000000..963b582 --- /dev/null +++ b/src/services/impl/workflow_frame_scene_step.cpp @@ -0,0 +1,35 @@ +#include "workflow_frame_scene_step.hpp" +#include "workflow_step_io_resolver.hpp" + +#include + +namespace sdl3cpp::services::impl { + +WorkflowFrameSceneStep::WorkflowFrameSceneStep(std::shared_ptr sceneService, + std::shared_ptr logger) + : sceneService_(std::move(sceneService)), + logger_(std::move(logger)) {} + +std::string WorkflowFrameSceneStep::GetPluginId() const { + return "frame.scene"; +} + +void WorkflowFrameSceneStep::Execute(const WorkflowStepDefinition& step, WorkflowContext& context) { + if (!sceneService_) { + throw std::runtime_error("frame.scene requires an ISceneService"); + } + WorkflowStepIoResolver resolver; + const std::string deltaKey = resolver.GetRequiredInputKey(step, "delta"); + const auto* delta = context.TryGet(deltaKey); + if (!delta) { + throw std::runtime_error("frame.scene missing delta input"); + } + sceneService_->UpdateScene(static_cast(*delta)); + if (logger_) { + logger_->Trace("WorkflowFrameSceneStep", "Execute", + "delta=" + std::to_string(*delta), + "Scene updated"); + } +} + +} // namespace sdl3cpp::services::impl diff --git a/src/services/impl/workflow_frame_scene_step.hpp b/src/services/impl/workflow_frame_scene_step.hpp new file mode 100644 index 0000000..3d15931 --- /dev/null +++ b/src/services/impl/workflow_frame_scene_step.hpp @@ -0,0 +1,24 @@ +#pragma once + +#include "../interfaces/i_workflow_step.hpp" +#include "../interfaces/i_logger.hpp" +#include "../interfaces/i_scene_service.hpp" + +#include + +namespace sdl3cpp::services::impl { + +class WorkflowFrameSceneStep final : public IWorkflowStep { +public: + WorkflowFrameSceneStep(std::shared_ptr sceneService, + std::shared_ptr logger); + + std::string GetPluginId() const override; + void Execute(const WorkflowStepDefinition& step, WorkflowContext& context) override; + +private: + std::shared_ptr sceneService_; + std::shared_ptr logger_; +}; + +} // namespace sdl3cpp::services::impl