Olympe Engine 2.0
2D Game Engine with ECS Architecture
Loading...
Searching...
No Matches
ConditionPreset.cpp
Go to the documentation of this file.
1/**
2 * @file ConditionPreset.cpp
3 * @brief Implementation of ConditionPreset (Phase 24.0).
4 * @author Olympe Engine
5 * @date 2026-03-17
6 *
7 * C++14 compliant — no std::optional, structured bindings, std::filesystem.
8 */
9
10#include "ConditionPreset.h"
11
12#include <sstream>
13#include <iomanip>
14
15namespace Olympe {
16
17// ============================================================================
18// Default constructor
19// ============================================================================
20
22 : id("")
23 , name("")
24 , left()
25 , op(ComparisonOp::Equal)
26 , right()
27{
28}
29
30// ============================================================================
31// Full constructor
32// ============================================================================
33
35 const Operand& l,
37 const Operand& r)
38 : id(id_)
39 , name("")
40 , left(l)
41 , op(o)
42 , right(r)
43{
44}
45
46// ============================================================================
47// Helpers
48// ============================================================================
49
50std::string ConditionPreset::GetPreview() const
51{
52 return left.GetDisplayString()
53 + " " + OpToString(op)
54 + " " + right.GetDisplayString();
55}
56
58{
59 return left.IsPin();
60}
61
63{
64 return right.IsPin();
65}
66
67std::pair<bool, bool> ConditionPreset::GetPinNeeds() const
68{
69 return { left.IsPin(), right.IsPin() };
70}
71
72/*static*/
74{
75 switch (o)
76 {
77 case ComparisonOp::Equal: return "==";
78 case ComparisonOp::NotEqual: return "!=";
79 case ComparisonOp::Less: return "<";
80 case ComparisonOp::LessEqual: return "<=";
81 case ComparisonOp::Greater: return ">";
82 case ComparisonOp::GreaterEqual: return ">=";
83 }
84 return "==";
85}
86
87/*static*/
89{
90 if (s == "!=") return ComparisonOp::NotEqual;
91 if (s == "<") return ComparisonOp::Less;
92 if (s == "<=") return ComparisonOp::LessEqual;
93 if (s == ">") return ComparisonOp::Greater;
94 if (s == ">=") return ComparisonOp::GreaterEqual;
95 return ComparisonOp::Equal; // default / "=="
96}
97
98// ============================================================================
99// Serialization
100// ============================================================================
101
103{
104 nlohmann::json j = nlohmann::json::object();
105 j["id"] = id;
106 j["name"] = name;
107 j["left"] = left.ToJson();
108 j["op"] = OpToString(op);
109 j["right"] = right.ToJson();
110 return j;
111}
112
113/*static*/
115{
117
118 if (!data.is_object())
119 return p;
120
121 if (data.contains("id") && data["id"].is_string())
122 p.id = data["id"].get<std::string>();
123
124 if (data.contains("name") && data["name"].is_string())
125 p.name = data["name"].get<std::string>();
126
127 if (data.contains("left"))
128 p.left = Operand::FromJson(data["left"]);
129
130 if (data.contains("op") && data["op"].is_string())
131 p.op = OpFromString(data["op"].get<std::string>());
132 else if (data.contains("operator") && data["operator"].is_string())
133 p.op = OpFromString(data["operator"].get<std::string>());
134
135 if (data.contains("right"))
136 p.right = Operand::FromJson(data["right"]);
137
138 return p;
139}
140
141} // namespace Olympe
Defines ConditionPreset — a reusable, globally-stored condition expression.
ComponentTypeID GetComponentTypeID_Static()
Definition ECS_Entity.h:56
< Provides AssetID and INVALID_ASSET_ID
ComparisonOp
The relational operator used in a ConditionPreset.
nlohmann::json json
A globally-stored, reusable condition expression.
std::pair< bool, bool > GetPinNeeds() const
Returns a pair {needsLeft, needsRight}.
nlohmann::json ToJson() const
Serializes this preset to a JSON object.
std::string GetPreview() const
Returns a human-readable preview string.
static ConditionPreset FromJson(const nlohmann::json &data)
Deserializes a ConditionPreset from a JSON object.
ConditionPreset()
Default constructor — generates an empty preset.
static std::string OpToString(ComparisonOp o)
Returns the operator as a display string (e.g. "<=").
std::string id
Global unique UUID (e.g. "preset_001")
bool NeedsLeftPin() const
Returns true when the left operand is in Pin mode.
static ComparisonOp OpFromString(const std::string &s)
Parses a display string back to a ComparisonOp.
bool NeedsRightPin() const
Returns true when the right operand is in Pin mode.
std::string name
Human-readable display name (e.g. "Condition #1")
One side of a ConditionPreset comparison expression.
Definition Operand.h:45
static Operand FromJson(const nlohmann::json &data)
Deserializes an Operand from a JSON object.
Definition Operand.cpp:149
nlohmann::json ToJson() const
Serializes this Operand to a JSON object.
Definition Operand.cpp:123
bool IsPin() const
Returns true when mode == Pin.
Definition Operand.cpp:104
std::string GetDisplayString() const
Returns a human-readable display string.
Definition Operand.cpp:66