From dd27099b3291d9e2e015030d2e4398b6f7adf693 Mon Sep 17 00:00:00 2001 From: Isaac0-dev <62234577+Isaac0-dev@users.noreply.github.com> Date: Sun, 5 Jan 2025 08:48:38 +1000 Subject: [PATCH] fix mat4 optional fields --- autogen/convert_functions.py | 10 ++++-- autogen/convert_structs.py | 13 ++++++-- autogen/vec_types.py | 2 ++ src/pc/lua/smlua_cobject_autogen.c | 40 +++++++++++------------ src/pc/lua/smlua_functions_autogen.c | 48 ++++++++++------------------ 5 files changed, 56 insertions(+), 57 deletions(-) diff --git a/autogen/convert_functions.py b/autogen/convert_functions.py index 75b5a8be7..7735948c8 100644 --- a/autogen/convert_functions.py +++ b/autogen/convert_functions.py @@ -767,14 +767,20 @@ def build_vec_types(): # Get s += "static void smlua_get_%s(%s dest, int index) {\n" % (type_name.lower(), type_name) - for lua_field, c_field in vec_type["fields_mapping"].items(): - s += " dest%s = smlua_get_%s_field(index, \"%s\");\n" % (c_field, vec_type["field_lua_type"], lua_field) + optional_fields_list = list(vec_type.get("optional_fields_mapping", {}).keys()) + for index, (lua_field, c_field) in enumerate(vec_type["fields_mapping"].items()): + s += " dest%s = smlua_get_%s_field(index, \"%s\")" % (c_field, vec_type["field_lua_type"], lua_field) + if 'optional_fields_mapping' in vec_type: + s += " || smlua_get_%s_field(index, \"%s\")" % (vec_type["field_lua_type"], optional_fields_list[index]) + s += ";\n" s += "}\n\n" # Push s += "static void smlua_push_%s(%s src, int index) {\n" % (type_name.lower(), type_name) for lua_field, c_field in vec_type["fields_mapping"].items(): s += " smlua_push_%s_field(index, \"%s\", src%s);\n" % (vec_type["field_lua_type"], lua_field, c_field) + for lua_field, c_field in vec_type.get('optional_fields_mapping', {}).items(): + s += " smlua_push_%s_field(index, \"%s\", src%s);\n" % (vec_type["field_lua_type"], lua_field, c_field) s += "}\n\n" return s diff --git a/autogen/convert_structs.py b/autogen/convert_structs.py index 222cd536f..55c8b07be 100644 --- a/autogen/convert_structs.py +++ b/autogen/convert_structs.py @@ -392,12 +392,19 @@ def build_vec_types(): s = gen_comment_header("vec types") for type_name, vec_type in VEC_TYPES.items(): - s += '#define LUA_%s_FIELD_COUNT %d\n' % (type_name.upper(), len(vec_type['fields_mapping'])) + optional_fields = vec_type.get('optional_fields_mapping', {}) + s += '#define LUA_%s_FIELD_COUNT %d\n' % (type_name.upper(), len(vec_type['fields_mapping']) + len(optional_fields)) s += 'static struct LuaObjectField s%sFields[LUA_%s_FIELD_COUNT] = {\n' % (type_name, type_name.upper()) field_c_type = vec_type['field_c_type'] - for i, lua_field in enumerate(vec_type['fields_mapping'].keys()): - s += ' { "%s", LVT_%s, sizeof(%s) * %d, false, LOT_NONE },\n' % (lua_field, field_c_type.upper(), field_c_type, i) + combined_fields = [ + (index, field_name) + for mapping in [vec_type['fields_mapping'], optional_fields] + for index, field_name in enumerate(mapping.keys()) + ] + sorted_fields_with_order = sorted(combined_fields, key=lambda x: x[1]) # sort alphabetically + for original_index, lua_field in sorted_fields_with_order: + s += ' { "%s", LVT_%s, sizeof(%s) * %d, false, LOT_NONE },\n' % (lua_field, field_c_type.upper(), field_c_type, original_index) s += '};\n\n' diff --git a/autogen/vec_types.py b/autogen/vec_types.py index 2cc10e1fb..38d953f97 100644 --- a/autogen/vec_types.py +++ b/autogen/vec_types.py @@ -65,6 +65,8 @@ VEC_TYPES = { "m31": "[3][1]", "m32": "[3][2]", "m33": "[3][3]", + }, + "optional_fields_mapping": { "a": "[0][0]", "b": "[0][1]", "c": "[0][2]", diff --git a/src/pc/lua/smlua_cobject_autogen.c b/src/pc/lua/smlua_cobject_autogen.c index 1cd6bed64..4ba2dd574 100644 --- a/src/pc/lua/smlua_cobject_autogen.c +++ b/src/pc/lua/smlua_cobject_autogen.c @@ -48,10 +48,10 @@ static struct LuaObjectField sVec3fFields[LUA_VEC3F_FIELD_COUNT] = { #define LUA_VEC4F_FIELD_COUNT 4 static struct LuaObjectField sVec4fFields[LUA_VEC4F_FIELD_COUNT] = { + { "w", LVT_F32, sizeof(f32) * 3, false, LOT_NONE }, { "x", LVT_F32, sizeof(f32) * 0, false, LOT_NONE }, { "y", LVT_F32, sizeof(f32) * 1, false, LOT_NONE }, { "z", LVT_F32, sizeof(f32) * 2, false, LOT_NONE }, - { "w", LVT_F32, sizeof(f32) * 3, false, LOT_NONE }, }; #define LUA_VEC3S_FIELD_COUNT 3 @@ -63,14 +63,27 @@ static struct LuaObjectField sVec3sFields[LUA_VEC3S_FIELD_COUNT] = { #define LUA_VEC4S_FIELD_COUNT 4 static struct LuaObjectField sVec4sFields[LUA_VEC4S_FIELD_COUNT] = { + { "w", LVT_S16, sizeof(s16) * 3, false, LOT_NONE }, { "x", LVT_S16, sizeof(s16) * 0, false, LOT_NONE }, { "y", LVT_S16, sizeof(s16) * 1, false, LOT_NONE }, { "z", LVT_S16, sizeof(s16) * 2, false, LOT_NONE }, - { "w", LVT_S16, sizeof(s16) * 3, false, LOT_NONE }, }; #define LUA_MAT4_FIELD_COUNT 32 static struct LuaObjectField sMat4Fields[LUA_MAT4_FIELD_COUNT] = { + { "a", LVT_F32, sizeof(f32) * 0, false, LOT_NONE }, + { "b", LVT_F32, sizeof(f32) * 1, false, LOT_NONE }, + { "c", LVT_F32, sizeof(f32) * 2, false, LOT_NONE }, + { "d", LVT_F32, sizeof(f32) * 3, false, LOT_NONE }, + { "e", LVT_F32, sizeof(f32) * 4, false, LOT_NONE }, + { "f", LVT_F32, sizeof(f32) * 5, false, LOT_NONE }, + { "g", LVT_F32, sizeof(f32) * 6, false, LOT_NONE }, + { "h", LVT_F32, sizeof(f32) * 7, false, LOT_NONE }, + { "i", LVT_F32, sizeof(f32) * 8, false, LOT_NONE }, + { "j", LVT_F32, sizeof(f32) * 9, false, LOT_NONE }, + { "k", LVT_F32, sizeof(f32) * 10, false, LOT_NONE }, + { "l", LVT_F32, sizeof(f32) * 11, false, LOT_NONE }, + { "m", LVT_F32, sizeof(f32) * 12, false, LOT_NONE }, { "m00", LVT_F32, sizeof(f32) * 0, false, LOT_NONE }, { "m01", LVT_F32, sizeof(f32) * 1, false, LOT_NONE }, { "m02", LVT_F32, sizeof(f32) * 2, false, LOT_NONE }, @@ -87,29 +100,16 @@ static struct LuaObjectField sMat4Fields[LUA_MAT4_FIELD_COUNT] = { { "m31", LVT_F32, sizeof(f32) * 13, false, LOT_NONE }, { "m32", LVT_F32, sizeof(f32) * 14, false, LOT_NONE }, { "m33", LVT_F32, sizeof(f32) * 15, false, LOT_NONE }, - { "a", LVT_F32, sizeof(f32) * 16, false, LOT_NONE }, - { "b", LVT_F32, sizeof(f32) * 17, false, LOT_NONE }, - { "c", LVT_F32, sizeof(f32) * 18, false, LOT_NONE }, - { "d", LVT_F32, sizeof(f32) * 19, false, LOT_NONE }, - { "e", LVT_F32, sizeof(f32) * 20, false, LOT_NONE }, - { "f", LVT_F32, sizeof(f32) * 21, false, LOT_NONE }, - { "g", LVT_F32, sizeof(f32) * 22, false, LOT_NONE }, - { "h", LVT_F32, sizeof(f32) * 23, false, LOT_NONE }, - { "i", LVT_F32, sizeof(f32) * 24, false, LOT_NONE }, - { "j", LVT_F32, sizeof(f32) * 25, false, LOT_NONE }, - { "k", LVT_F32, sizeof(f32) * 26, false, LOT_NONE }, - { "l", LVT_F32, sizeof(f32) * 27, false, LOT_NONE }, - { "m", LVT_F32, sizeof(f32) * 28, false, LOT_NONE }, - { "n", LVT_F32, sizeof(f32) * 29, false, LOT_NONE }, - { "o", LVT_F32, sizeof(f32) * 30, false, LOT_NONE }, - { "p", LVT_F32, sizeof(f32) * 31, false, LOT_NONE }, + { "n", LVT_F32, sizeof(f32) * 13, false, LOT_NONE }, + { "o", LVT_F32, sizeof(f32) * 14, false, LOT_NONE }, + { "p", LVT_F32, sizeof(f32) * 15, false, LOT_NONE }, }; #define LUA_COLOR_FIELD_COUNT 3 static struct LuaObjectField sColorFields[LUA_COLOR_FIELD_COUNT] = { - { "r", LVT_U8, sizeof(u8) * 0, false, LOT_NONE }, - { "g", LVT_U8, sizeof(u8) * 1, false, LOT_NONE }, { "b", LVT_U8, sizeof(u8) * 2, false, LOT_NONE }, + { "g", LVT_U8, sizeof(u8) * 1, false, LOT_NONE }, + { "r", LVT_U8, sizeof(u8) * 0, false, LOT_NONE }, }; struct LuaObjectTable sLuaObjectTable[LOT_MAX] = { diff --git a/src/pc/lua/smlua_functions_autogen.c b/src/pc/lua/smlua_functions_autogen.c index e751798ef..030735b79 100644 --- a/src/pc/lua/smlua_functions_autogen.c +++ b/src/pc/lua/smlua_functions_autogen.c @@ -120,38 +120,22 @@ static void smlua_push_vec4s(Vec4s src, int index) { } static void smlua_get_mat4(Mat4 dest, int index) { - dest[0][0] = smlua_get_number_field(index, "m00"); - dest[0][1] = smlua_get_number_field(index, "m01"); - dest[0][2] = smlua_get_number_field(index, "m02"); - dest[0][3] = smlua_get_number_field(index, "m03"); - dest[1][0] = smlua_get_number_field(index, "m10"); - dest[1][1] = smlua_get_number_field(index, "m11"); - dest[1][2] = smlua_get_number_field(index, "m12"); - dest[1][3] = smlua_get_number_field(index, "m13"); - dest[2][0] = smlua_get_number_field(index, "m20"); - dest[2][1] = smlua_get_number_field(index, "m21"); - dest[2][2] = smlua_get_number_field(index, "m22"); - dest[2][3] = smlua_get_number_field(index, "m23"); - dest[3][0] = smlua_get_number_field(index, "m30"); - dest[3][1] = smlua_get_number_field(index, "m31"); - dest[3][2] = smlua_get_number_field(index, "m32"); - dest[3][3] = smlua_get_number_field(index, "m33"); - dest[0][0] = smlua_get_number_field(index, "a"); - dest[0][1] = smlua_get_number_field(index, "b"); - dest[0][2] = smlua_get_number_field(index, "c"); - dest[0][3] = smlua_get_number_field(index, "d"); - dest[1][0] = smlua_get_number_field(index, "e"); - dest[1][1] = smlua_get_number_field(index, "f"); - dest[1][2] = smlua_get_number_field(index, "g"); - dest[1][3] = smlua_get_number_field(index, "h"); - dest[2][0] = smlua_get_number_field(index, "i"); - dest[2][1] = smlua_get_number_field(index, "j"); - dest[2][2] = smlua_get_number_field(index, "k"); - dest[2][3] = smlua_get_number_field(index, "l"); - dest[3][0] = smlua_get_number_field(index, "m"); - dest[3][1] = smlua_get_number_field(index, "n"); - dest[3][2] = smlua_get_number_field(index, "o"); - dest[3][3] = smlua_get_number_field(index, "p"); + dest[0][0] = smlua_get_number_field(index, "m00") || smlua_get_number_field(index, "a"); + dest[0][1] = smlua_get_number_field(index, "m01") || smlua_get_number_field(index, "b"); + dest[0][2] = smlua_get_number_field(index, "m02") || smlua_get_number_field(index, "c"); + dest[0][3] = smlua_get_number_field(index, "m03") || smlua_get_number_field(index, "d"); + dest[1][0] = smlua_get_number_field(index, "m10") || smlua_get_number_field(index, "e"); + dest[1][1] = smlua_get_number_field(index, "m11") || smlua_get_number_field(index, "f"); + dest[1][2] = smlua_get_number_field(index, "m12") || smlua_get_number_field(index, "g"); + dest[1][3] = smlua_get_number_field(index, "m13") || smlua_get_number_field(index, "h"); + dest[2][0] = smlua_get_number_field(index, "m20") || smlua_get_number_field(index, "i"); + dest[2][1] = smlua_get_number_field(index, "m21") || smlua_get_number_field(index, "j"); + dest[2][2] = smlua_get_number_field(index, "m22") || smlua_get_number_field(index, "k"); + dest[2][3] = smlua_get_number_field(index, "m23") || smlua_get_number_field(index, "l"); + dest[3][0] = smlua_get_number_field(index, "m30") || smlua_get_number_field(index, "m"); + dest[3][1] = smlua_get_number_field(index, "m31") || smlua_get_number_field(index, "n"); + dest[3][2] = smlua_get_number_field(index, "m32") || smlua_get_number_field(index, "o"); + dest[3][3] = smlua_get_number_field(index, "m33") || smlua_get_number_field(index, "p"); } static void smlua_push_mat4(Mat4 src, int index) {