{%- assign NewLine = newline_to_br -%} {{ Indent2 }}struct {{ Name }}_Static_{{MetaName}} { {{ Indent2 }} consteval static auto __StaticFields() { {{ Indent2 }} return std::make_tuple({% for field in FieldList %}{% if field.Type != 2 %}{% unless forloop.first %}, {% endunless %}&{{Name}}::{{field.Name}}{% endif %}{% endfor %}); {{ Indent2 }} }; {{ NewLine }} {{ Indent2 }} consteval static auto __MakeStaticFields() { {{ Indent2 }} return std::array{ {{ NewLine }} {%- for field in FieldList -%} {{ NewLine }} {%- if field.Type == 1 -%} {{ Indent2 }} refl::StaticMethodField(&{{Name}}::{{field.Name}}, FName("{{field.Name}}"), {{field.Meta}}), {{ NewLine }} {%- elsif field.Type == 2 -%} {{ Indent2 }} refl::StaticCtorField<{{field.Name}}>({{field.Meta}}), {{ NewLine }} {%- else -%} {{ Indent2 }} refl::StaticMemberField(&{{Name}}::{{field.Name}}, FName("{{field.Name}}"), {{field.Meta}}), {{ NewLine }} {%- endif -%} {{ NewLine }} {%- endfor -%} {{ Indent2 }} }; {{ Indent2 }} }; {{ NewLine }} {{ Indent2 }} consteval static int Size() { {{ Indent2 }} return refl::fetch_meta_size<{{ Name }}_Static_{{MetaName}}>(); {{ Indent2 }} }; {{ Indent2 }} consteval static int MemberCount() { {{ Indent2 }} return {{MemberCount}}; {{ Indent2 }} }; {{ Indent2 }} consteval static int CtorCount() { {{ Indent2 }} return {{CtorCount}}; {{ Indent2 }} }; {{ Indent2 }}}; {{ NewLine }} {{ Indent2 }}struct {{ Name }}_{{MetaName}} : public refl::Meta { {{ Indent2 }} using MyUClass = refl::UClass_Meta<{{ Name }}_{{MetaName}}, {{ ParentName }}>; {{ Indent2 }} using MyStatic = {{ Name }}_Static_{{MetaName}}; {{ NewLine }} {%-if IsMultyMeta -%} {{ Indent2 }} using MyMetas = class {{Name}}_MulytMeta; {{ NewLine }} {%- endif -%} {{ Indent2 }} inline static char s_data[MyStatic::Size()]{}; {{ Indent2 }} static auto __MakeFields() { {{ Indent2 }} char* memory = &s_data[0]; {{ Indent2 }} return std::array{ {{ NewLine }} {%- for field in FieldList -%} {{ NewLine }} {%- if field.Type == 1 -%} {{ Indent2 }} MethodField(&{{Name}}::{{field.Name}}, FName("{{field.Name}}"), memory, {{field.Meta}}), {{ NewLine }} {%- elsif field.Type == 2 -%} {{ Indent2 }} CtorField<{{field.Name}}>({{field.Meta}}), {{ NewLine }} {%- else -%} {{ Indent2 }} MemberField(&{{Name}}::{{field.Name}}, FName("{{field.Name}}"), memory, {{field.Meta}}), {{ NewLine }} {%- endif -%} {{ NewLine }} {%- endfor -%} {{ Indent2 }} }; {{ Indent2 }} }; {{ Indent2 }}}; {{ NewLine }}{%- if IsMultyMeta -%} {{ Indent2 }}const refl::UClass* {{Name}}_MulytMeta::{{ MetaName }}() {{ Indent2 }}{ {{ Indent2 }} static const auto s_cls = {{ Name }}_{{MetaName}}::MyUClass(); {{ Indent2 }} return &s_cls; {{ Indent2 }}}; {{ NewLine }}{%- endif -%}