Can now pass tokens as values in animation steps
This commit is contained in:
@@ -33,8 +33,8 @@
|
||||
|
||||
enum class SimpleDynamicTag {
|
||||
UNINITIALIZED,
|
||||
AUTO,
|
||||
STRING,
|
||||
TOKEN,
|
||||
NUMBER,
|
||||
BOOLEAN,
|
||||
VECTOR,
|
||||
@@ -55,9 +55,10 @@ struct SimpleDynamic {
|
||||
static const char *type_name_of(SimpleDynamicTag t) {
|
||||
switch (t) {
|
||||
case SimpleDynamicTag::UNINITIALIZED: return "uninitialized";
|
||||
case SimpleDynamicTag::STRING: return "string";
|
||||
case SimpleDynamicTag::TOKEN: return "token";
|
||||
case SimpleDynamicTag::BOOLEAN: return "boolean";
|
||||
case SimpleDynamicTag::NUMBER: return "number";
|
||||
case SimpleDynamicTag::STRING: return "string";
|
||||
case SimpleDynamicTag::VECTOR: return "vector";
|
||||
default: return "unknown";
|
||||
}
|
||||
@@ -71,14 +72,14 @@ struct SimpleDynamic {
|
||||
type=SimpleDynamicTag::UNINITIALIZED; s.clear(); x=y=z=0;
|
||||
}
|
||||
|
||||
void set_auto() {
|
||||
type=SimpleDynamicTag::AUTO; s.clear(); x=y=z=0;
|
||||
}
|
||||
|
||||
void set_string(std::string_view is) {
|
||||
type=SimpleDynamicTag::STRING; s=is; x=y=z=0;
|
||||
}
|
||||
|
||||
void set_token(std::string_view is) {
|
||||
type=SimpleDynamicTag::TOKEN; s=is; x=y=z=0;
|
||||
}
|
||||
|
||||
void set_number(double n) {
|
||||
type = SimpleDynamicTag::NUMBER; s.clear(); x=n; y=z=0;
|
||||
}
|
||||
@@ -116,7 +117,6 @@ struct SimpleDynamic {
|
||||
// void write_double(double data)
|
||||
// void write_length(size_t data)
|
||||
// void write_string(std::string_view data)
|
||||
// void write_simple_dynamic(const SimpleDynamic &sd);
|
||||
//
|
||||
// You should derive from BaseWriter using the CRTP pattern:
|
||||
//
|
||||
@@ -197,7 +197,6 @@ public:
|
||||
// size_t read_length();
|
||||
// String read_string_limit(uint64_t size);
|
||||
// String read_string();
|
||||
// SimpleDynamic read_simple_dynamic();
|
||||
//
|
||||
// You should derive from BaseReader using the CRTP pattern:
|
||||
//
|
||||
@@ -501,17 +500,18 @@ public:
|
||||
|
||||
// Write a SimpleDynamic value.
|
||||
//
|
||||
// This works regardless of what kind of string is present in the
|
||||
// This works regardless of what kind of data is present in the
|
||||
// SimpleDynamic.
|
||||
//
|
||||
template<class STRING>
|
||||
void write_simple_dynamic(const SimpleDynamic<STRING> &sd) {
|
||||
write_simple_dynamic_tag(sd.type);
|
||||
switch(sd.type) {
|
||||
case SimpleDynamicTag::STRING: write_string(sd.s); break;
|
||||
case SimpleDynamicTag::TOKEN: write_string(sd.s); break;
|
||||
case SimpleDynamicTag::NUMBER: write_double(sd.x); break;
|
||||
case SimpleDynamicTag::BOOLEAN: write_bool(sd.x == 1.0); break;
|
||||
case SimpleDynamicTag::VECTOR: write_double(sd.x); write_double(sd.y); write_double(sd.z); break;
|
||||
case SimpleDynamicTag::STRING: write_string(sd.s); break;
|
||||
default: assert(false);
|
||||
}
|
||||
}
|
||||
@@ -628,6 +628,8 @@ public:
|
||||
void read_simple_dynamic(SimpleDynamic<STRING> *result) {
|
||||
SimpleDynamicTag type = read_simple_dynamic_tag();
|
||||
switch (type) {
|
||||
case SimpleDynamicTag::STRING: result->set_string(read_string()); break;
|
||||
case SimpleDynamicTag::TOKEN: result->set_token(read_string()); break;
|
||||
case SimpleDynamicTag::NUMBER: result->set_number(read_double()); break;
|
||||
case SimpleDynamicTag::BOOLEAN: result->set_boolean(read_bool()); break;
|
||||
case SimpleDynamicTag::VECTOR: {
|
||||
@@ -637,7 +639,6 @@ public:
|
||||
result->set_vector(x,y,z);
|
||||
break;
|
||||
}
|
||||
case SimpleDynamicTag::STRING: result->set_string(read_string()); break;
|
||||
default: result->set_uninitialized(); break;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user