mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2026-04-22 10:01:46 +00:00
Functions autogen update + matrix fields naming (#590)
This commit is contained in:
parent
62ced7973b
commit
f695f988a2
2 changed files with 751 additions and 2413 deletions
|
|
@ -7,7 +7,6 @@ from common import *
|
|||
rejects = ""
|
||||
integer_types = ["u8", "u16", "u32", "u64", "s8", "s16", "s32", "s64", "int"]
|
||||
number_types = ["f32", "float", "f64", "double"]
|
||||
param_override_build = {}
|
||||
out_filename = 'src/pc/lua/smlua_functions_autogen.c'
|
||||
out_filename_docs = 'docs/lua/functions%s.md'
|
||||
out_filename_defs = 'autogen/lua_definitions/functions.lua'
|
||||
|
|
@ -153,6 +152,8 @@ template = """/* THIS FILE IS AUTOGENERATED */
|
|||
|
||||
$[INCLUDES]
|
||||
|
||||
$[TYPES]
|
||||
|
||||
$[FUNCTIONS]
|
||||
|
||||
void smlua_bind_functions_autogen(void) {
|
||||
|
|
@ -163,145 +164,89 @@ $[BINDS]
|
|||
|
||||
###########################################################
|
||||
|
||||
param_vec3f_before_call = """
|
||||
f32* $[IDENTIFIER] = smlua_get_vec3f_from_buffer();
|
||||
$[IDENTIFIER][0] = smlua_get_number_field($[INDEX], "x");
|
||||
$[IDENTIFIER][1] = smlua_get_number_field($[INDEX], "y");
|
||||
$[IDENTIFIER][2] = smlua_get_number_field($[INDEX], "z");
|
||||
"""
|
||||
|
||||
param_vec3f_after_call = """
|
||||
smlua_push_number_field($[INDEX], "x", $[IDENTIFIER][0]);
|
||||
smlua_push_number_field($[INDEX], "y", $[IDENTIFIER][1]);
|
||||
smlua_push_number_field($[INDEX], "z", $[IDENTIFIER][2]);
|
||||
"""
|
||||
|
||||
param_override_build['Vec3f'] = {
|
||||
'before': param_vec3f_before_call,
|
||||
'after': param_vec3f_after_call
|
||||
c_types = {
|
||||
"Vec2f": {
|
||||
"field_type": "number",
|
||||
"fields_mapping": {
|
||||
"x": "[0]",
|
||||
"y": "[1]",
|
||||
},
|
||||
},
|
||||
"Vec3f": {
|
||||
"field_type": "number",
|
||||
"fields_mapping": {
|
||||
"x": "[0]",
|
||||
"y": "[1]",
|
||||
"z": "[2]",
|
||||
},
|
||||
},
|
||||
"Vec4f": {
|
||||
"field_type": "number",
|
||||
"fields_mapping": {
|
||||
"x": "[0]",
|
||||
"y": "[1]",
|
||||
"z": "[2]",
|
||||
"w": "[3]",
|
||||
},
|
||||
},
|
||||
"Vec3s": {
|
||||
"field_type": "integer",
|
||||
"fields_mapping": {
|
||||
"x": "[0]",
|
||||
"y": "[1]",
|
||||
"z": "[2]",
|
||||
},
|
||||
},
|
||||
"Vec4s": {
|
||||
"field_type": "integer",
|
||||
"fields_mapping": {
|
||||
"x": "[0]",
|
||||
"y": "[1]",
|
||||
"z": "[2]",
|
||||
"w": "[3]",
|
||||
},
|
||||
},
|
||||
"Mat4": {
|
||||
"field_type": "number",
|
||||
"fields_mapping": {
|
||||
"m00": "[0][0]",
|
||||
"m01": "[0][1]",
|
||||
"m02": "[0][2]",
|
||||
"m03": "[0][3]",
|
||||
"m10": "[1][0]",
|
||||
"m11": "[1][1]",
|
||||
"m12": "[1][2]",
|
||||
"m13": "[1][3]",
|
||||
"m20": "[2][0]",
|
||||
"m21": "[2][1]",
|
||||
"m22": "[2][2]",
|
||||
"m23": "[2][3]",
|
||||
"m30": "[3][0]",
|
||||
"m31": "[3][1]",
|
||||
"m32": "[3][2]",
|
||||
"m33": "[3][3]",
|
||||
},
|
||||
},
|
||||
"Color": {
|
||||
"field_type": "integer",
|
||||
"fields_mapping": {
|
||||
"r": "[0]",
|
||||
"g": "[1]",
|
||||
"b": "[2]",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
param_vec3s_before_call = """
|
||||
s16* $[IDENTIFIER] = smlua_get_vec3s_from_buffer();
|
||||
$[IDENTIFIER][0] = smlua_get_integer_field($[INDEX], "x");
|
||||
$[IDENTIFIER][1] = smlua_get_integer_field($[INDEX], "y");
|
||||
$[IDENTIFIER][2] = smlua_get_integer_field($[INDEX], "z");
|
||||
c_type_before = """
|
||||
%s $[IDENTIFIER];
|
||||
smlua_get_%s($[IDENTIFIER], $[INDEX]);
|
||||
"""
|
||||
|
||||
param_vec3s_after_call = """
|
||||
smlua_push_integer_field($[INDEX], "x", $[IDENTIFIER][0]);
|
||||
smlua_push_integer_field($[INDEX], "y", $[IDENTIFIER][1]);
|
||||
smlua_push_integer_field($[INDEX], "z", $[IDENTIFIER][2]);
|
||||
c_type_after = """
|
||||
smlua_push_%s($[IDENTIFIER], $[INDEX]);
|
||||
"""
|
||||
|
||||
param_override_build['Vec3s'] = {
|
||||
'before': param_vec3s_before_call,
|
||||
'after': param_vec3s_after_call
|
||||
}
|
||||
|
||||
param_vec4f_before_call = """
|
||||
f32* $[IDENTIFIER] = smlua_get_vec4f_from_buffer();
|
||||
$[IDENTIFIER][0] = smlua_get_number_field($[INDEX], "x");
|
||||
$[IDENTIFIER][1] = smlua_get_number_field($[INDEX], "y");
|
||||
$[IDENTIFIER][2] = smlua_get_number_field($[INDEX], "z");
|
||||
$[IDENTIFIER][3] = smlua_get_number_field($[INDEX], "w");
|
||||
"""
|
||||
|
||||
param_vec4f_after_call = """
|
||||
smlua_push_number_field($[INDEX], "x", $[IDENTIFIER][0]);
|
||||
smlua_push_number_field($[INDEX], "y", $[IDENTIFIER][1]);
|
||||
smlua_push_number_field($[INDEX], "z", $[IDENTIFIER][2]);
|
||||
smlua_push_number_field($[INDEX], "w", $[IDENTIFIER][3]);
|
||||
"""
|
||||
|
||||
param_override_build['Vec4f'] = {
|
||||
'before': param_vec4f_before_call,
|
||||
'after': param_vec4f_after_call
|
||||
}
|
||||
|
||||
param_vec4s_before_call = """
|
||||
s16* $[IDENTIFIER] = smlua_get_vec4s_from_buffer();
|
||||
$[IDENTIFIER][0] = smlua_get_integer_field($[INDEX], "x");
|
||||
$[IDENTIFIER][1] = smlua_get_integer_field($[INDEX], "y");
|
||||
$[IDENTIFIER][2] = smlua_get_integer_field($[INDEX], "z");
|
||||
$[IDENTIFIER][3] = smlua_get_integer_field($[INDEX], "w");
|
||||
"""
|
||||
|
||||
param_vec4s_after_call = """
|
||||
smlua_push_integer_field($[INDEX], "x", $[IDENTIFIER][0]);
|
||||
smlua_push_integer_field($[INDEX], "y", $[IDENTIFIER][1]);
|
||||
smlua_push_integer_field($[INDEX], "z", $[IDENTIFIER][2]);
|
||||
smlua_push_integer_field($[INDEX], "w", $[IDENTIFIER][3]);
|
||||
"""
|
||||
|
||||
param_override_build['Vec4s'] = {
|
||||
'before': param_vec4s_before_call,
|
||||
'after': param_vec4s_after_call
|
||||
}
|
||||
|
||||
param_mat4_before_call = """
|
||||
Mat4 $[IDENTIFIER];
|
||||
$[IDENTIFIER][0][0] = smlua_get_number_field($[INDEX], "a");
|
||||
$[IDENTIFIER][0][1] = smlua_get_number_field($[INDEX], "b");
|
||||
$[IDENTIFIER][0][2] = smlua_get_number_field($[INDEX], "c");
|
||||
$[IDENTIFIER][0][3] = smlua_get_number_field($[INDEX], "d");
|
||||
$[IDENTIFIER][1][0] = smlua_get_number_field($[INDEX], "e");
|
||||
$[IDENTIFIER][1][1] = smlua_get_number_field($[INDEX], "f");
|
||||
$[IDENTIFIER][1][2] = smlua_get_number_field($[INDEX], "g");
|
||||
$[IDENTIFIER][1][3] = smlua_get_number_field($[INDEX], "h");
|
||||
$[IDENTIFIER][2][0] = smlua_get_number_field($[INDEX], "i");
|
||||
$[IDENTIFIER][2][1] = smlua_get_number_field($[INDEX], "j");
|
||||
$[IDENTIFIER][2][2] = smlua_get_number_field($[INDEX], "k");
|
||||
$[IDENTIFIER][2][3] = smlua_get_number_field($[INDEX], "l");
|
||||
$[IDENTIFIER][3][0] = smlua_get_number_field($[INDEX], "m");
|
||||
$[IDENTIFIER][3][1] = smlua_get_number_field($[INDEX], "n");
|
||||
$[IDENTIFIER][3][2] = smlua_get_number_field($[INDEX], "o");
|
||||
$[IDENTIFIER][3][3] = smlua_get_number_field($[INDEX], "p");
|
||||
"""
|
||||
|
||||
param_mat4_after_call = """
|
||||
smlua_push_number_field($[INDEX], "a", $[IDENTIFIER][0][0]);
|
||||
smlua_push_number_field($[INDEX], "b", $[IDENTIFIER][0][1]);
|
||||
smlua_push_number_field($[INDEX], "c", $[IDENTIFIER][0][2]);
|
||||
smlua_push_number_field($[INDEX], "d", $[IDENTIFIER][0][3]);
|
||||
smlua_push_number_field($[INDEX], "e", $[IDENTIFIER][1][0]);
|
||||
smlua_push_number_field($[INDEX], "f", $[IDENTIFIER][1][1]);
|
||||
smlua_push_number_field($[INDEX], "g", $[IDENTIFIER][1][2]);
|
||||
smlua_push_number_field($[INDEX], "h", $[IDENTIFIER][1][3]);
|
||||
smlua_push_number_field($[INDEX], "i", $[IDENTIFIER][2][0]);
|
||||
smlua_push_number_field($[INDEX], "j", $[IDENTIFIER][2][1]);
|
||||
smlua_push_number_field($[INDEX], "k", $[IDENTIFIER][2][2]);
|
||||
smlua_push_number_field($[INDEX], "l", $[IDENTIFIER][2][3]);
|
||||
smlua_push_number_field($[INDEX], "m", $[IDENTIFIER][3][0]);
|
||||
smlua_push_number_field($[INDEX], "n", $[IDENTIFIER][3][1]);
|
||||
smlua_push_number_field($[INDEX], "o", $[IDENTIFIER][3][2]);
|
||||
smlua_push_number_field($[INDEX], "p", $[IDENTIFIER][3][3]);
|
||||
"""
|
||||
|
||||
param_override_build['Mat4'] = {
|
||||
'before': param_mat4_before_call,
|
||||
'after': param_mat4_after_call
|
||||
}
|
||||
|
||||
param_color_before_call = """
|
||||
u8* $[IDENTIFIER] = smlua_get_color_from_buffer();
|
||||
$[IDENTIFIER][0] = smlua_get_integer_field($[INDEX], "r");
|
||||
$[IDENTIFIER][1] = smlua_get_integer_field($[INDEX], "g");
|
||||
$[IDENTIFIER][2] = smlua_get_integer_field($[INDEX], "b");
|
||||
"""
|
||||
|
||||
param_color_after_call = """
|
||||
smlua_push_integer_field($[INDEX], "r", $[IDENTIFIER][0]);
|
||||
smlua_push_integer_field($[INDEX], "g", $[IDENTIFIER][1]);
|
||||
smlua_push_integer_field($[INDEX], "b", $[IDENTIFIER][2]);
|
||||
"""
|
||||
|
||||
param_override_build['Color'] = {
|
||||
'before': param_color_before_call,
|
||||
'after': param_color_after_call
|
||||
}
|
||||
|
||||
############################################################################
|
||||
###########################################################
|
||||
|
||||
manual_index_documentation = """
|
||||
- manually written functions
|
||||
|
|
@ -870,6 +815,25 @@ def alter_type(t):
|
|||
return 'int'
|
||||
return t
|
||||
|
||||
############################################################################
|
||||
|
||||
def build_types():
|
||||
s = gen_comment_header("types")
|
||||
for type_name, c_type in c_types.items():
|
||||
|
||||
# Get
|
||||
s += "static void smlua_get_%s(%s dest, int index) {\n" % (type_name.lower(), type_name)
|
||||
for lua_field, c_field in c_type["fields_mapping"].items():
|
||||
s += " dest%s = smlua_get_%s_field(index, \"%s\");\n" % (c_field, c_type["field_type"], lua_field)
|
||||
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 c_type["fields_mapping"].items():
|
||||
s += " smlua_push_%s_field(index, \"%s\", src%s);\n" % (c_type["field_type"], lua_field, c_field)
|
||||
s += "}\n\n"
|
||||
|
||||
return s
|
||||
|
||||
############################################################################
|
||||
|
||||
|
|
@ -877,8 +841,8 @@ def build_param(param, i):
|
|||
ptype = alter_type(param['type'])
|
||||
pid = param['identifier']
|
||||
|
||||
if ptype in param_override_build:
|
||||
return param_override_build[ptype]['before'].replace('$[IDENTIFIER]', str(pid)).replace('$[INDEX]', str(i))
|
||||
if ptype in c_types:
|
||||
return (c_type_before % (ptype, ptype.lower())).replace('$[IDENTIFIER]', str(pid)).replace('$[INDEX]', str(i))
|
||||
elif ptype == 'bool':
|
||||
return ' %s %s = smlua_to_boolean(L, %d);\n' % (ptype, pid, i)
|
||||
elif ptype in integer_types:
|
||||
|
|
@ -907,8 +871,8 @@ def build_param_after(param, i):
|
|||
ptype = param['type']
|
||||
pid = param['identifier']
|
||||
|
||||
if ptype in param_override_build:
|
||||
return param_override_build[ptype]['after'].replace('$[IDENTIFIER]', str(pid)).replace('$[INDEX]', str(i))
|
||||
if ptype in c_types:
|
||||
return (c_type_after % (ptype.lower())).replace('$[IDENTIFIER]', str(pid)).replace('$[INDEX]', str(i))
|
||||
else:
|
||||
return ''
|
||||
|
||||
|
|
@ -1450,6 +1414,7 @@ def def_files(processed_files):
|
|||
def main():
|
||||
processed_files = process_files()
|
||||
|
||||
built_types = build_types()
|
||||
built_functions = build_functions(processed_files)
|
||||
built_binds = build_binds(processed_files)
|
||||
built_includes = build_includes()
|
||||
|
|
@ -1457,6 +1422,7 @@ def main():
|
|||
filename = get_path(out_filename)
|
||||
|
||||
gen = template \
|
||||
.replace("$[TYPES]", built_types) \
|
||||
.replace("$[FUNCTIONS]", built_functions) \
|
||||
.replace("$[BINDS]", built_binds) \
|
||||
.replace("$[INCLUDES]", built_includes)
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
Loading…
Add table
Reference in a new issue