From 7e7ecb52c99aa9d89edbabc880f6a12928e7ea1e Mon Sep 17 00:00:00 2001 From: Fredrik Lindahl Date: Wed, 20 Mar 2024 17:32:47 +0100 Subject: [PATCH] Added field typename metadata to component traits. --- .../basegamefeature/components/orientation.h | 6 ++++++ code/application/basegamefeature/components/position.h | 5 +++++ code/application/basegamefeature/components/scale.h | 5 +++++ code/application/basegamefeature/components/velocity.h | 10 ++++++++++ code/application/game/component.h | 3 +++ code/application/game/entity.h | 3 +++ fips-files/generators/IDLC/idlcomponent.py | 10 ++++++++++ fips-files/generators/NIDL.py | 2 +- 8 files changed, 43 insertions(+), 1 deletion(-) diff --git a/code/application/basegamefeature/components/orientation.h b/code/application/basegamefeature/components/orientation.h index 2ca31ffd4..27e0ecf5a 100644 --- a/code/application/basegamefeature/components/orientation.h +++ b/code/application/basegamefeature/components/orientation.h @@ -33,6 +33,12 @@ struct Orientation::Traits "z", "w" }; + static constexpr const char* field_typenames[num_fields] = { + "float", + "float", + "float", + "float" + }; using field_types = std::tuple; static constexpr size_t field_byte_offsets[num_fields] = { offsetof(Orientation, x), diff --git a/code/application/basegamefeature/components/position.h b/code/application/basegamefeature/components/position.h index 9e1d9257d..dddf8058c 100644 --- a/code/application/basegamefeature/components/position.h +++ b/code/application/basegamefeature/components/position.h @@ -32,6 +32,11 @@ struct Position::Traits "y", "z" }; + static constexpr const char* field_typenames[num_fields] = { + "float", + "float", + "float" + }; using field_types = std::tuple; static constexpr size_t field_byte_offsets[num_fields] = { offsetof(Position, x), diff --git a/code/application/basegamefeature/components/scale.h b/code/application/basegamefeature/components/scale.h index 4d1740bb4..4fd03f149 100644 --- a/code/application/basegamefeature/components/scale.h +++ b/code/application/basegamefeature/components/scale.h @@ -36,6 +36,11 @@ struct Scale::Traits "y", "z" }; + static constexpr const char* field_typenames[num_fields] = { + "float", + "float", + "float" + }; using field_types = std::tuple; static constexpr size_t field_byte_offsets[num_fields] = { offsetof(Scale, x), diff --git a/code/application/basegamefeature/components/velocity.h b/code/application/basegamefeature/components/velocity.h index 911f4cf3e..c4c9cb5ad 100644 --- a/code/application/basegamefeature/components/velocity.h +++ b/code/application/basegamefeature/components/velocity.h @@ -43,6 +43,11 @@ struct Velocity::Traits "y", "z" }; + static constexpr const char* field_typenames[num_fields] = { + "float", + "float", + "float" + }; using field_types = std::tuple; static constexpr size_t field_byte_offsets[num_fields] = { offsetof(Velocity, x), @@ -66,6 +71,11 @@ struct AngularVelocity::Traits "y", "z" }; + static constexpr const char* field_typenames[num_fields] = { + "float", + "float", + "float" + }; using field_types = std::tuple; static constexpr size_t field_byte_offsets[num_fields] = { offsetof(AngularVelocity, x), diff --git a/code/application/game/component.h b/code/application/game/component.h index 94a76ca6b..e76d7efe4 100644 --- a/code/application/game/component.h +++ b/code/application/game/component.h @@ -82,6 +82,7 @@ class ComponentInterface : public MemDb::Attribute this->fullyQualifiedName = T::Traits::fully_qualified_name; this->numFields = T::Traits::num_fields; this->fieldNames = (const char**)T::Traits::field_names; + this->fieldTypenames = (const char**)T::Traits::field_typenames; this->fieldByteOffsets = (const size_t*)T::Traits::field_byte_offsets; } @@ -91,6 +92,7 @@ class ComponentInterface : public MemDb::Attribute const char* GetName() const { return componentName; } const char* GetFullyQualifiedName() const { return fullyQualifiedName; } const char** GetFieldNames() const { return fieldNames; }; + const char** GetFieldTypenames() const { return fieldTypenames; }; const size_t* GetFieldByteOffsets() const { return fieldByteOffsets; }; size_t const GetNumFields() const { return numFields; }; @@ -98,6 +100,7 @@ class ComponentInterface : public MemDb::Attribute const char* componentName = nullptr; const char* fullyQualifiedName = nullptr; const char** fieldNames = nullptr; + const char** fieldTypenames = nullptr; const size_t* fieldByteOffsets = nullptr; size_t numFields = 0; }; diff --git a/code/application/game/entity.h b/code/application/game/entity.h index 086dfd4c0..e016f0eef 100644 --- a/code/application/game/entity.h +++ b/code/application/game/entity.h @@ -63,6 +63,9 @@ struct Entity::Traits static constexpr const char* field_names[num_fields] = { "id" }; + static constexpr const char* field_typenames[num_fields] = { + "uint" + }; static constexpr size_t field_byte_offsets[num_fields] = { 0 }; /// This is the column that the entity "owner" will reside in, in every table. diff --git a/fips-files/generators/IDLC/idlcomponent.py b/fips-files/generators/IDLC/idlcomponent.py index 6d19e52aa..498df0d68 100644 --- a/fips-files/generators/IDLC/idlcomponent.py +++ b/fips-files/generators/IDLC/idlcomponent.py @@ -142,6 +142,15 @@ def WriteComponentHeaderDeclarations(f, document): for v in c.variables: f.WriteLine(' "{}",'.format(v.name)) f.WriteLine('};') + f.WriteLine('static constexpr const char* field_typenames[num_fields] = {') + for i, v in enumerate(c.variables): + f.Write(' "{}"'.format(IDLTypes.GetCppTypeString(v.type))) + if i < (len(c.variables) - 1): + f.WriteLine(",") + else: + f.WriteLine("") + f.WriteLine('};') + f.WriteLine('using field_types = std::tuple<') for i, v in enumerate(c.variables): f.Write(' {}'.format(IDLTypes.GetCppTypeString(v.type))) @@ -156,6 +165,7 @@ def WriteComponentHeaderDeclarations(f, document): f.WriteLine('};') else: f.WriteLine('static constexpr const char** field_names = nullptr;') + f.WriteLine('static constexpr const char** field_typenames = nullptr;') f.WriteLine('static constexpr size_t* field_byte_offsets = nullptr;') diff --git a/fips-files/generators/NIDL.py b/fips-files/generators/NIDL.py index bf354c3d2..443f644d6 100644 --- a/fips-files/generators/NIDL.py +++ b/fips-files/generators/NIDL.py @@ -1,4 +1,4 @@ -Version = 141 +Version = 142 import sys if __name__ == '__main__':