Functions autogen update + matrix fields naming (#590)

This commit is contained in:
PeachyPeach 2024-12-29 19:49:37 +01:00 committed by GitHub
parent 62ced7973b
commit f695f988a2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 751 additions and 2413 deletions

View file

@ -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