Olympe Engine 2.0
2D Game Engine with ECS Architecture
Loading...
Searching...
No Matches
Task_SetAnimation.cpp
Go to the documentation of this file.
1/**
2 * @file Task_SetAnimation.cpp
3 * @brief Atomic AI task: trigger an animation 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_SetAnimation.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_SetAnimation] Abort()\n";
22}
23
25{
26 return TaskStatus::Failure; // requires context; use ExecuteWithContext
27}
28
30 const ParameterMap& params)
31{
32 if (!ctx.LocalBB)
33 {
34 SYSTEM_LOG << "[Task_SetAnimation] No LocalBlackboard in context\n";
36 }
37
38 // --- Resolve AnimRef parameter ---
39 std::string animRef;
40 {
41 auto it = params.find("AnimRef");
42 if (it == params.end() || it->second.GetType() != VariableType::String)
43 {
44 SYSTEM_LOG << "[Task_SetAnimation] Missing or invalid 'AnimRef' parameter\n";
46 }
47 animRef = it->second.AsString();
48 }
49
50 // --- Resolve Loop parameter (optional, default true) ---
51 bool loop = true;
52 {
53 auto it = params.find("Loop");
54 if (it != params.end() && it->second.GetType() == VariableType::Bool)
55 {
56 loop = it->second.AsBool();
57 }
58 }
59
60 SYSTEM_LOG << "[Task_SetAnimation] Entity " << ctx.Entity
61 << " anim='" << animRef << "' loop=" << (loop ? "true" : "false") << "\n";
62
63 // Write animation info to LocalBlackboard.
64 // Future: when ComponentFacade exposes an AnimationComponent, call
65 // ctx.ComponentFacade->Animation->Play(animRef, loop) here.
66 ctx.LocalBB->SetValueScoped("local:current_animation", TaskValue(animRef));
67
69}
70
71REGISTER_ATOMIC_TASK(Task_SetAnimation, "Task_SetAnimation")
72
73} // 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 AI task that triggers 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 clip to play on the entity.
void Abort() override
Aborts the task, releasing any in-progress state.
TaskStatus ExecuteWithContext(const AtomicTaskContext &ctx, const ParameterMap &params) override
Executes the atomic task for one frame with full runtime context.
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