3#include "Utilities/ValueVariant.h"
5#include "Foundation/Reflection/Type.h"
7#include <unordered_map>
59 Variable & setFloat(
float value) { this->value = ValueVariant(value); setValid();
return *
this; }
60 Variable & setDouble(
double value) { this->value = ValueVariant(value); setValid();
return *
this; }
61 Variable & setInt(
int value) { this->value = ValueVariant(value); setValid();
return *
this; }
62 Variable & setVec2(glm::vec2 value) { this->value = ValueVariant(value); setValid();
return *
this; }
63 Variable & setVec3(glm::vec3 value) { this->value = ValueVariant(value); setValid();
return *
this; }
64 Variable & setVec4(glm::vec4 value) { this->value = ValueVariant(value); setValid();
return *
this; }
70 void setStatic() { variableFlags |= VariableFlags::Static; }
74 const char * getCString()
const {
return getValue().
data(); }
75 bool getBool(
bool defaultValue =
false)
const {
return value.getBool(defaultValue); }
76 float getFloat(
float defaultValue = 0.0f)
const {
return value.getFloat(defaultValue); }
77 double getDouble(
double defaultValue = 0.0)
const {
return value.getDouble(defaultValue); }
78 int getInt(
int defaultValue = 0)
const {
return value.getInt(defaultValue); }
79 glm::vec2 getVec2(glm::vec2 defaultValue = {})
const {
return value.getVec2(defaultValue); }
80 glm::vec3 getVec3(glm::vec3 defaultValue = {})
const {
return value.getVec3(defaultValue); }
81 glm::vec4 getVec4(glm::vec4 defaultValue = {})
const {
return value.getVec4(defaultValue); }
83 bool isEmpty()
const {
return (variableFlags & VariableFlags::Empty) != VariableFlags::None; }
84 bool isStatic()
const {
return (variableFlags & VariableFlags::Static) != VariableFlags::None; }
86 explicit operator bool()
const {
return !isEmpty(); }
88 ParsedDataType getType()
const {
return value.getType(); }
91 void setValid() { variableFlags &= ~VariableFlags::Empty; }
95 std::string stringValue;
105 Variables(
const char ** variables,
int count);
110 Variable * set(
const StringView & name,
const char * value) {
return &get(name)->setValue(value); }
111 Variable * set(
const StringView & name,
int value) {
return &get(name)->setInt(value); }
112 Variable * set(
const StringView & name,
float value) {
return &get(name)->setFloat(value); }
113 Variable * set(
const StringView & name,
double value) {
return &get(name)->setDouble(value); }
114 Variable * set(
const StringView & name,
bool value) {
return &get(name)->setBool(value); }
115 Variable * set(
const StringView & name, glm::vec2 value) {
return &get(name)->setVec2(value); }
116 Variable * set(
const StringView & name, glm::vec3 value) {
return &get(name)->setVec3(value); }
117 Variable * set(
const StringView & name, glm::vec4 value) {
return &get(name)->setVec4(value); }
135 const char * get(
const StringView & name,
const char * defaultValue)
const {
return get(name,
StringView(defaultValue)).
data(); }
136 bool get(
const StringView & name,
bool defaultValue)
const {
return get(name)->getBool(defaultValue); }
137 float get(
const StringView & name,
float defaultValue)
const {
return get(name)->getFloat(defaultValue); }
138 double get(
const StringView & name,
double defaultValue)
const {
return get(name)->getDouble(defaultValue); }
139 int get(
const StringView & name,
int defaultValue)
const {
return get(name)->getInt(defaultValue); }
140 glm::vec2 get(
const StringView & name, glm::vec2 defaultValue)
const {
return get(name)->getVec2(defaultValue); }
141 glm::vec3 get(
const StringView & name, glm::vec3 defaultValue)
const {
return get(name)->getVec3(defaultValue); }
142 glm::vec4 get(
const StringView & name, glm::vec4 defaultValue)
const {
return get(name)->getVec4(defaultValue); }
144 bool getOrAdd(
const StringView & name,
bool defaultValue)
148 if (v->isEmpty()) v->setBool(defaultValue);
150 return v->getBool(defaultValue);
153 void getMatchingVariables(std::vector<const Variable*>& vars,
const StringView& keyPrefix);
155 Variable & operator[](
const StringView & key);
157 std::unordered_map<size_t, Variable> & getVariables() {
return variables; }
Provides handling of reading and caching of external resources.
Manages runtime variables for the engine.
std::unordered_map< size_t, Variable > variables
Variable store.
Variable empty
Empty variable, returned on invalid queries.
bool exist(const StringView &name)
Check if a variable exists.
Provides a weakly referenced view over the contents of a string.
constexpr const char * data() const noexcept
Get the sequence of characters referenced by the string view.
std::string to_string() const
String conversion method.
constexpr size_t hash() const noexcept
Get the hash code of the string.
Contains the Engine, Renderer, resource managers and other systems needed to run Cogs....
VariableFlags
Variable flags, specifying variable behavior.
Runtime control variable.
const StringView getValue(StringView defaultValue="") const
Get the value string.
Variable()=default
Default constructs a Variable instance. By default holds no value.
void operator=(const StringView &value)
Overloaded assignment operator to allow assigning a variable directly from a string.
Variable(StringView name, StringView value)
Constructs a variable with the given name and value.
const StringView getName() const
Get the name of the variable.