mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2025-10-30 08:01:01 +00:00
fix mat4 optional fields
This commit is contained in:
parent
25166483a6
commit
dd27099b32
5 changed files with 56 additions and 57 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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'
|
||||
|
||||
|
|
|
|||
|
|
@ -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]",
|
||||
|
|
|
|||
|
|
@ -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] = {
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue