Olympe Engine 2.0
2D Game Engine with ECS Architecture
Loading...
Searching...
No Matches
Task_SetSprite.cpp
Go to the documentation of this file.
1/**
2 * @file Task_SetSprite.cpp
3 * @brief Atomic task: set the current sprite reference for an entity.
4 * @author Olympe Engine
5 * @date 2026-03-08
6 *
7 * C++14 compliant - no C++17/20 features.
8 */
9
10#include "Task_SetSprite.h"
11#include "../../AtomicTaskRegistry.h"
12#include "../../LocalBlackboard.h"
13#include "../../../system/system_utils.h"
14
15namespace Olympe {
16
18
20{
21 SYSTEM_LOG << "[Task_SetSprite] Abort()\n";
22}
23
25{
26 return TaskStatus::Failure; // requires context; use ExecuteWithContext
27}
28
30 const ParameterMap& params)
31{
32 // --- Resolve SpriteRef parameter ---
33 std::string spriteRef;
34 {
35 auto it = params.find("SpriteRef");
36 if (it == params.end() || it->second.GetType() != VariableType::String)
37 {
38 SYSTEM_LOG << "[Task_SetSprite] Missing or invalid 'SpriteRef' parameter\n";
40 }
41 spriteRef = it->second.AsString();
42 }
43
44 SYSTEM_LOG << "[Task_SetSprite] Entity " << ctx.Entity
45 << " sprite='" << spriteRef << "'\n";
46
47 // -----------------------------------------------------------------------
48 // World mode: delegate to render component (stub — render facade not yet
49 // added to TaskWorldFacade; falls through to headless path)
50 // -----------------------------------------------------------------------
51 // (Future: when a RenderComponent pointer is added to TaskWorldFacade,
52 // call ctx.ComponentFacade->Render->SetSprite(spriteRef) here.)
53
54 // -----------------------------------------------------------------------
55 // Headless / fallback mode: write to "local:CurrentSprite" in LocalBB
56 // -----------------------------------------------------------------------
57 if (!ctx.LocalBB)
58 {
59 SYSTEM_LOG << "[Task_SetSprite] No LocalBlackboard in context\n";
61 }
62
63 ctx.LocalBB->SetValueScoped("local:CurrentSprite", TaskValue(spriteRef));
64
65 SYSTEM_LOG << "[Task_SetSprite] Entity " << ctx.Entity
66 << " sprite set - Success\n";
68}
69
70REGISTER_ATOMIC_TASK(Task_SetSprite, "Task_SetSprite")
71
72} // namespace Olympe
#define REGISTER_ATOMIC_TASK(ClassName, Id)
Registers a factory for ClassName under Id at static init time.
ComponentTypeID GetComponentTypeID_Static()
Definition ECS_Entity.h:56
Atomic task that sets the current sprite reference for an entity.
std::unordered_map< std::string, TaskValue > ParameterMap
Convenience alias for the parameter map passed to Execute().
Definition IAtomicTask.h:67
C++14-compliant type-safe value container for task parameters.
Sets the current sprite reference via ECS or LocalBlackboard.
TaskStatus ExecuteWithContext(const AtomicTaskContext &ctx, const ParameterMap &params) override
Executes the atomic task for one frame with full runtime context.
void Abort() override
Aborts the task, releasing any in-progress state.
TaskStatus Execute(const ParameterMap &params) override
Executes the atomic task for one frame.
< Provides AssetID and INVALID_ASSET_ID
@ String
std::string
TaskStatus
Result code returned by IAtomicTask::Execute().
Definition IAtomicTask.h:38
@ Success
Task completed successfully.
@ Failure
Task failed.
Lightweight context bundle passed to IAtomicTask::ExecuteWithContext().
#define SYSTEM_LOG