Olympe Engine 2.0
2D Game Engine with ECS Architecture
Loading...
Searching...
No Matches
Task_PlayAnimation.cpp
Go to the documentation of this file.
1/**
2 * @file Task_PlayAnimation.cpp
3 * @brief Atomic task: request an animation to play on 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_PlayAnimation.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_PlayAnimation] Abort()\n";
22}
23
25{
26 return TaskStatus::Failure; // requires context; use ExecuteWithContext
27}
28
30 const ParameterMap& params)
31{
32 // --- Resolve AnimationName parameter ---
33 std::string animName;
34 {
35 auto it = params.find("AnimationName");
36 if (it == params.end() || it->second.GetType() != VariableType::String)
37 {
38 SYSTEM_LOG << "[Task_PlayAnimation] Missing or invalid 'AnimationName' parameter\n";
40 }
41 animName = it->second.AsString();
42 }
43
44 // --- Resolve Loop parameter (optional, default false) ---
45 bool loop = false;
46 {
47 auto it = params.find("Loop");
48 if (it != params.end() && it->second.GetType() == VariableType::Bool)
49 {
50 loop = it->second.AsBool();
51 }
52 }
53
54 SYSTEM_LOG << "[Task_PlayAnimation] Entity " << ctx.Entity
55 << " animation='" << animName << "' loop=" << (loop ? "true" : "false") << "\n";
56
57 // -----------------------------------------------------------------------
58 // Headless / fallback mode: write to "local:CurrentAnimation" in LocalBB
59 // -----------------------------------------------------------------------
60 // (Future: when an AnimationComponent pointer is added to TaskWorldFacade,
61 // call ctx.ComponentFacade->Animation->Play(animName, loop) here.)
62 if (!ctx.LocalBB)
63 {
64 SYSTEM_LOG << "[Task_PlayAnimation] No LocalBlackboard in context\n";
66 }
67
68 ctx.LocalBB->SetValueScoped("local:CurrentAnimation", TaskValue(animName));
69
70 SYSTEM_LOG << "[Task_PlayAnimation] Entity " << ctx.Entity
71 << " animation set - Success\n";
73}
74
75REGISTER_ATOMIC_TASK(Task_PlayAnimation, "Task_PlayAnimation")
76
77} // 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 starts an animation on 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.
Requests an animation to play via ECS or LocalBlackboard.
void Abort() override
Aborts the task, releasing any in-progress state.
TaskStatus Execute(const ParameterMap &params) override
Executes the atomic task for one frame.
TaskStatus ExecuteWithContext(const AtomicTaskContext &ctx, const ParameterMap &params) override
Executes the atomic task for one frame with full runtime context.
< 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