Olympe Engine
2.0
2D Game Engine with ECS Architecture
Loading...
Searching...
No Matches
Source
TaskSystem
AtomicTasks
System
Task_SetPosition.cpp
Go to the documentation of this file.
1
/**
2
* @file Task_SetPosition.cpp
3
* @brief Atomic task: set entity position via ECS or LocalBlackboard.
4
* @author Olympe Engine
5
* @date 2026-03-08
6
*
7
* C++14 compliant - no C++17/20 features.
8
*/
9
10
#include "
Task_SetPosition.h
"
11
#include "../../AtomicTaskRegistry.h"
12
#include "../../LocalBlackboard.h"
13
#include "../../TaskWorldFacade.h"
14
#include "../../../system/system_utils.h"
15
16
namespace
Olympe
{
17
18
Task_SetPosition::Task_SetPosition
() {}
19
20
void
Task_SetPosition::Abort
()
21
{
22
SYSTEM_LOG
<<
"[Task_SetPosition] Abort()\n"
;
23
}
24
25
TaskStatus
Task_SetPosition::Execute
(
const
ParameterMap
&
/*params*/
)
26
{
27
return
TaskStatus::Failure
;
// requires context; use ExecuteWithContext
28
}
29
30
TaskStatus
Task_SetPosition::ExecuteWithContext
(
const
AtomicTaskContext
&
ctx
,
31
const
ParameterMap
&
params
)
32
{
33
// --- Resolve Target parameter ---
34
::Vector
target(0.0f, 0.0f, 0.0f);
35
{
36
auto
it
=
params
.find(
"Target"
);
37
if
(
it
==
params
.end() ||
it
->second.GetType() !=
VariableType::Vector
)
38
{
39
SYSTEM_LOG
<<
"[Task_SetPosition] Missing or invalid 'Target' parameter\n"
;
40
return
TaskStatus::Failure
;
41
}
42
target =
it
->second.AsVector();
43
}
44
45
SYSTEM_LOG
<<
"[Task_SetPosition] Entity "
<<
ctx
.Entity
46
<<
" -> ("
<< target.
x
<<
","
<< target.
y
<<
")\n"
;
47
48
// -----------------------------------------------------------------------
49
// World mode: write directly to PositionComponent when available
50
// -----------------------------------------------------------------------
51
if
(
ctx
.ComponentFacade &&
ctx
.ComponentFacade->Position)
52
{
53
ctx
.ComponentFacade->Position->Position = target;
54
SYSTEM_LOG
<<
"[Task_SetPosition] (WorldMode) Entity "
<<
ctx
.Entity
55
<<
" position set - Success\n"
;
56
return
TaskStatus::Success
;
57
}
58
59
// -----------------------------------------------------------------------
60
// Headless mode: write to "local:Position" in LocalBlackboard
61
// -----------------------------------------------------------------------
62
if
(!
ctx
.LocalBB)
63
{
64
SYSTEM_LOG
<<
"[Task_SetPosition] No LocalBlackboard in context\n"
;
65
return
TaskStatus::Failure
;
66
}
67
68
ctx
.LocalBB->SetValueScoped(
"local:Position"
,
TaskValue
(target));
69
70
SYSTEM_LOG
<<
"[Task_SetPosition] Entity "
<<
ctx
.Entity
71
<<
" position written to LocalBB - Success\n"
;
72
return
TaskStatus::Success
;
73
}
74
75
REGISTER_ATOMIC_TASK
(
Task_SetPosition
,
"Task_SetPosition"
)
76
77
}
// namespace Olympe
REGISTER_ATOMIC_TASK
#define REGISTER_ATOMIC_TASK(ClassName, Id)
Registers a factory for ClassName under Id at static init time.
Definition
AtomicTaskRegistry.h:119
GetComponentTypeID_Static
ComponentTypeID GetComponentTypeID_Static()
Definition
ECS_Entity.h:56
Task_SetPosition.h
Atomic task that sets the entity's position.
Olympe::IAtomicTask::ParameterMap
std::unordered_map< std::string, TaskValue > ParameterMap
Convenience alias for the parameter map passed to Execute().
Definition
IAtomicTask.h:67
Olympe::TaskValue
C++14-compliant type-safe value container for task parameters.
Definition
TaskGraphTypes.h:181
Olympe::Task_SetPosition
Sets entity position via ECS or LocalBlackboard.
Definition
Task_SetPosition.h:36
Olympe::Task_SetPosition::Execute
TaskStatus Execute(const ParameterMap ¶ms) override
Executes the atomic task for one frame.
Definition
Task_SetPosition.cpp:25
Olympe::Task_SetPosition::Task_SetPosition
Task_SetPosition()
Definition
Task_SetPosition.cpp:18
Olympe::Task_SetPosition::ExecuteWithContext
TaskStatus ExecuteWithContext(const AtomicTaskContext &ctx, const ParameterMap ¶ms) override
Executes the atomic task for one frame with full runtime context.
Definition
Task_SetPosition.cpp:30
Olympe::Task_SetPosition::Abort
void Abort() override
Aborts the task, releasing any in-progress state.
Definition
Task_SetPosition.cpp:20
Vector
Definition
vector.h:22
Vector::y
float y
Definition
vector.h:25
Vector::x
float x
Definition
vector.h:25
Olympe
< Provides AssetID and INVALID_ASSET_ID
Definition
BTEditorCommand.cpp:16
Olympe::VariableType::Vector
@ Vector
3-component vector (Vector from vector.h)
Olympe::TaskStatus
TaskStatus
Result code returned by IAtomicTask::Execute().
Definition
IAtomicTask.h:38
Olympe::TaskStatus::Success
@ Success
Task completed successfully.
Olympe::TaskStatus::Failure
@ Failure
Task failed.
Olympe::AtomicTaskContext
Lightweight context bundle passed to IAtomicTask::ExecuteWithContext().
Definition
AtomicTaskContext.h:36
SYSTEM_LOG
#define SYSTEM_LOG
Definition
system_utils.h:23
Generated on Mon Apr 13 2026 08:15:20 for Olympe Engine by
1.9.8