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
|
# Get
|
||||||
s += "static void smlua_get_%s(%s dest, int index) {\n" % (type_name.lower(), type_name)
|
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():
|
optional_fields_list = list(vec_type.get("optional_fields_mapping", {}).keys())
|
||||||
s += " dest%s = smlua_get_%s_field(index, \"%s\");\n" % (c_field, vec_type["field_lua_type"], lua_field)
|
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"
|
s += "}\n\n"
|
||||||
|
|
||||||
# Push
|
# Push
|
||||||
s += "static void smlua_push_%s(%s src, int index) {\n" % (type_name.lower(), type_name)
|
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():
|
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)
|
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"
|
s += "}\n\n"
|
||||||
|
|
||||||
return s
|
return s
|
||||||
|
|
|
||||||
|
|
@ -392,12 +392,19 @@ def build_vec_types():
|
||||||
s = gen_comment_header("vec types")
|
s = gen_comment_header("vec types")
|
||||||
|
|
||||||
for type_name, vec_type in VEC_TYPES.items():
|
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())
|
s += 'static struct LuaObjectField s%sFields[LUA_%s_FIELD_COUNT] = {\n' % (type_name, type_name.upper())
|
||||||
|
|
||||||
field_c_type = vec_type['field_c_type']
|
field_c_type = vec_type['field_c_type']
|
||||||
for i, lua_field in enumerate(vec_type['fields_mapping'].keys()):
|
combined_fields = [
|
||||||
s += ' { "%s", LVT_%s, sizeof(%s) * %d, false, LOT_NONE },\n' % (lua_field, field_c_type.upper(), field_c_type, i)
|
(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'
|
s += '};\n\n'
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -65,6 +65,8 @@ VEC_TYPES = {
|
||||||
"m31": "[3][1]",
|
"m31": "[3][1]",
|
||||||
"m32": "[3][2]",
|
"m32": "[3][2]",
|
||||||
"m33": "[3][3]",
|
"m33": "[3][3]",
|
||||||
|
},
|
||||||
|
"optional_fields_mapping": {
|
||||||
"a": "[0][0]",
|
"a": "[0][0]",
|
||||||
"b": "[0][1]",
|
"b": "[0][1]",
|
||||||
"c": "[0][2]",
|
"c": "[0][2]",
|
||||||
|
|
|
||||||
|
|
@ -48,10 +48,10 @@ static struct LuaObjectField sVec3fFields[LUA_VEC3F_FIELD_COUNT] = {
|
||||||
|
|
||||||
#define LUA_VEC4F_FIELD_COUNT 4
|
#define LUA_VEC4F_FIELD_COUNT 4
|
||||||
static struct LuaObjectField sVec4fFields[LUA_VEC4F_FIELD_COUNT] = {
|
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 },
|
{ "x", LVT_F32, sizeof(f32) * 0, false, LOT_NONE },
|
||||||
{ "y", LVT_F32, sizeof(f32) * 1, false, LOT_NONE },
|
{ "y", LVT_F32, sizeof(f32) * 1, false, LOT_NONE },
|
||||||
{ "z", LVT_F32, sizeof(f32) * 2, 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
|
#define LUA_VEC3S_FIELD_COUNT 3
|
||||||
|
|
@ -63,14 +63,27 @@ static struct LuaObjectField sVec3sFields[LUA_VEC3S_FIELD_COUNT] = {
|
||||||
|
|
||||||
#define LUA_VEC4S_FIELD_COUNT 4
|
#define LUA_VEC4S_FIELD_COUNT 4
|
||||||
static struct LuaObjectField sVec4sFields[LUA_VEC4S_FIELD_COUNT] = {
|
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 },
|
{ "x", LVT_S16, sizeof(s16) * 0, false, LOT_NONE },
|
||||||
{ "y", LVT_S16, sizeof(s16) * 1, false, LOT_NONE },
|
{ "y", LVT_S16, sizeof(s16) * 1, false, LOT_NONE },
|
||||||
{ "z", LVT_S16, sizeof(s16) * 2, 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
|
#define LUA_MAT4_FIELD_COUNT 32
|
||||||
static struct LuaObjectField sMat4Fields[LUA_MAT4_FIELD_COUNT] = {
|
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 },
|
{ "m00", LVT_F32, sizeof(f32) * 0, false, LOT_NONE },
|
||||||
{ "m01", LVT_F32, sizeof(f32) * 1, false, LOT_NONE },
|
{ "m01", LVT_F32, sizeof(f32) * 1, false, LOT_NONE },
|
||||||
{ "m02", LVT_F32, sizeof(f32) * 2, 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 },
|
{ "m31", LVT_F32, sizeof(f32) * 13, false, LOT_NONE },
|
||||||
{ "m32", LVT_F32, sizeof(f32) * 14, false, LOT_NONE },
|
{ "m32", LVT_F32, sizeof(f32) * 14, false, LOT_NONE },
|
||||||
{ "m33", LVT_F32, sizeof(f32) * 15, false, LOT_NONE },
|
{ "m33", LVT_F32, sizeof(f32) * 15, false, LOT_NONE },
|
||||||
{ "a", LVT_F32, sizeof(f32) * 16, false, LOT_NONE },
|
{ "n", LVT_F32, sizeof(f32) * 13, false, LOT_NONE },
|
||||||
{ "b", LVT_F32, sizeof(f32) * 17, false, LOT_NONE },
|
{ "o", LVT_F32, sizeof(f32) * 14, false, LOT_NONE },
|
||||||
{ "c", LVT_F32, sizeof(f32) * 18, false, LOT_NONE },
|
{ "p", LVT_F32, sizeof(f32) * 15, 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 },
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#define LUA_COLOR_FIELD_COUNT 3
|
#define LUA_COLOR_FIELD_COUNT 3
|
||||||
static struct LuaObjectField sColorFields[LUA_COLOR_FIELD_COUNT] = {
|
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 },
|
{ "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] = {
|
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) {
|
static void smlua_get_mat4(Mat4 dest, int index) {
|
||||||
dest[0][0] = smlua_get_number_field(index, "m00");
|
dest[0][0] = smlua_get_number_field(index, "m00") || smlua_get_number_field(index, "a");
|
||||||
dest[0][1] = smlua_get_number_field(index, "m01");
|
dest[0][1] = smlua_get_number_field(index, "m01") || smlua_get_number_field(index, "b");
|
||||||
dest[0][2] = smlua_get_number_field(index, "m02");
|
dest[0][2] = smlua_get_number_field(index, "m02") || smlua_get_number_field(index, "c");
|
||||||
dest[0][3] = smlua_get_number_field(index, "m03");
|
dest[0][3] = smlua_get_number_field(index, "m03") || smlua_get_number_field(index, "d");
|
||||||
dest[1][0] = smlua_get_number_field(index, "m10");
|
dest[1][0] = smlua_get_number_field(index, "m10") || smlua_get_number_field(index, "e");
|
||||||
dest[1][1] = smlua_get_number_field(index, "m11");
|
dest[1][1] = smlua_get_number_field(index, "m11") || smlua_get_number_field(index, "f");
|
||||||
dest[1][2] = smlua_get_number_field(index, "m12");
|
dest[1][2] = smlua_get_number_field(index, "m12") || smlua_get_number_field(index, "g");
|
||||||
dest[1][3] = smlua_get_number_field(index, "m13");
|
dest[1][3] = smlua_get_number_field(index, "m13") || smlua_get_number_field(index, "h");
|
||||||
dest[2][0] = smlua_get_number_field(index, "m20");
|
dest[2][0] = smlua_get_number_field(index, "m20") || smlua_get_number_field(index, "i");
|
||||||
dest[2][1] = smlua_get_number_field(index, "m21");
|
dest[2][1] = smlua_get_number_field(index, "m21") || smlua_get_number_field(index, "j");
|
||||||
dest[2][2] = smlua_get_number_field(index, "m22");
|
dest[2][2] = smlua_get_number_field(index, "m22") || smlua_get_number_field(index, "k");
|
||||||
dest[2][3] = smlua_get_number_field(index, "m23");
|
dest[2][3] = smlua_get_number_field(index, "m23") || smlua_get_number_field(index, "l");
|
||||||
dest[3][0] = smlua_get_number_field(index, "m30");
|
dest[3][0] = smlua_get_number_field(index, "m30") || smlua_get_number_field(index, "m");
|
||||||
dest[3][1] = smlua_get_number_field(index, "m31");
|
dest[3][1] = smlua_get_number_field(index, "m31") || smlua_get_number_field(index, "n");
|
||||||
dest[3][2] = smlua_get_number_field(index, "m32");
|
dest[3][2] = smlua_get_number_field(index, "m32") || smlua_get_number_field(index, "o");
|
||||||
dest[3][3] = smlua_get_number_field(index, "m33");
|
dest[3][3] = smlua_get_number_field(index, "m33") || smlua_get_number_field(index, "p");
|
||||||
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");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void smlua_push_mat4(Mat4 src, int index) {
|
static void smlua_push_mat4(Mat4 src, int index) {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue