From 0fc106ee03dc7879b909a1d1435eec028b636e78 Mon Sep 17 00:00:00 2001 From: Relintai Date: Sat, 4 Jun 2022 13:22:43 +0200 Subject: [PATCH] The code converter now generates properties from the automatically created getters and setters. --- game/addons/gdc_converter/gdsparser.gd | 109 ++++++++++++++++++++++++- 1 file changed, 106 insertions(+), 3 deletions(-) diff --git a/game/addons/gdc_converter/gdsparser.gd b/game/addons/gdc_converter/gdsparser.gd index 889303e6..25f327fc 100644 --- a/game/addons/gdc_converter/gdsparser.gd +++ b/game/addons/gdc_converter/gdsparser.gd @@ -428,14 +428,14 @@ class GDSScope: s += indents + "}\n\n" s += "\n" s += indents + "static void " + scope_data + "::_bind_methods() {\n" - s += indents + "/*\n" for l in scope_lines: - var gs : String = create_cpp_getter_setter(l, true, indents + " ") + var gs : String = create_cpp_getter_setter_bind(l, indents + " ", scope_data) if gs != "": s += gs + "\n" - + + s += indents + "/*\n" for subs in subscopes: var scstr : String = subs.get_cpp_header_string(indents.length() + 1) @@ -504,6 +504,109 @@ class GDSScope: return ret_final + func create_cpp_getter_setter_bind(line : String, indent : String, owner_class_name : String) -> String: + if !line.begins_with("var "): + return "" + + var cpp_var : String = transform_variable_to_cpp(line) + + var equals_index = cpp_var.find("=") + if equals_index != -1: + cpp_var = cpp_var.substr(0, equals_index) + + cpp_var = cpp_var.strip_edges() + + var name_start_index : int = cpp_var.find_last(" ") + var var_type : String = cpp_var.substr(0, name_start_index).strip_edges() + var var_name : String = cpp_var.substr(name_start_index + 1).strip_edges() + + var ret_final : String = "" + + ret_final += indent + " ClassDB::bind_method(D_METHOD(\"get_" + var_name + "\"), &" + owner_class_name + "::get_" + var_name + ");\n" + ret_final += indent + " ClassDB::bind_method(D_METHOD(\"set_" + var_name + "\", \"value\"), &" + owner_class_name + "::set_" + var_name + ");\n" + + ret_final += indent + " ADD_PROPERTY(PropertyInfo(Variant::" + + var is_object : bool = false + + if var_type == "bool": + ret_final += "BOOL" + elif var_type == "int": + ret_final += "INT" + elif var_type == "float" || var_type == "double": + ret_final += "REAL" + elif var_type == "String": + ret_final += "STRING" + elif var_type == "Vector2": + ret_final += "VECTOR2" + elif var_type == "Vector2i": + ret_final += "VECTOR2I" + elif var_type == "Rect2": + ret_final += "RECT2" + elif var_type == "Rect2i": + ret_final += "RECT2I" + elif var_type == "Vector3": + ret_final += "VECTOR3" + elif var_type == "Vector3i": + ret_final += "VECTOR3I" + elif var_type == "Transform2D": + ret_final += "TRANSFORM2D" + elif var_type == "Plane": + ret_final += "PLANE" + elif var_type == "Quat": + ret_final += "QUAT" + elif var_type == "AABB": + ret_final += "AABB" + elif var_type == "Basis": + ret_final += "BASIS" + elif var_type == "Transform": + ret_final += "TRANSFORM" + elif var_type == "Color": + ret_final += "COLOR" + elif var_type == "NodePath": + ret_final += "NODE_PATH" + elif var_type == "RID": + ret_final += "_RID" + elif var_type == "Object": + ret_final += "OBJECT" + is_object = true + elif var_type == "StringName": + ret_final += "STRING_NAME" + elif var_type == "Dictionary": + ret_final += "DICTIONARY" + elif var_type == "Array": + ret_final += "ARRAY" + elif var_type == "PoolByteArray": + ret_final += "POOL_BYTE_ARRAY" + elif var_type == "PoolIntArray": + ret_final += "POOL_INT_ARRAY" + elif var_type == "PoolRealArray": + ret_final += "POOL_REAL_ARRAY" + elif var_type == "PoolStringArray": + ret_final += "POOL_STRING_ARRAY" + elif var_type == "PoolVector2Array": + ret_final += "POOL_VECTOR2_ARRAY" + elif var_type == "PoolVector2iArray": + ret_final += "POOL_VECTOR2I_ARRAY" + elif var_type == "PoolVector3Array": + ret_final += "POOL_VECTOR3_ARRAY" + elif var_type == "PoolVector3iArray": + ret_final += "POOL_VECTOR3I_ARRAY" + elif var_type == "PoolColorArray": + ret_final += "POOL_COLOR_ARRAY" + else: + ret_final += "OBJECT" + is_object = true + + if is_object: + ret_final += ", \"" + var_name + "\", PROPERTY_HINT_RESOURCE_TYPE, \"" + var_type + "\"), \"set_" + var_name + "\", \"get_" + var_name + "\");" + else: + ret_final += ", \"" + var_name + "\"), \"set_" + var_name + "\", \"get_" + var_name + "\");" + + ret_final += "\n\n" + + return ret_final + func transform_variable_assign(line : String) -> String: if !line.ends_with(" as "):