diff --git a/addons/resources_speadsheet_view/import_export/import_export_dialog.gd b/addons/resources_speadsheet_view/import_export/import_export_dialog.gd index f72184f..6b8355e 100644 --- a/addons/resources_speadsheet_view/import_export/import_export_dialog.gd +++ b/addons/resources_speadsheet_view/import_export/import_export_dialog.gd @@ -109,28 +109,9 @@ func _create_prop_editors(): func _generate_class(save_script = true): - var new_script = GDScript.new() - if save_script and import_data.script_classname != "": - new_script.source_code = "class_name " + import_data.script_classname + " \nextends Resource\n\n" - - else: - new_script.source_code = "extends Resource\n\n" - - # Enums - import_data.uniques = import_data.get_uniques(entries) - for i in import_data.prop_types.size(): - if import_data.prop_types[i] == SpreadsheetImport.PropType.ENUM: - new_script.source_code += import_data.create_enum_for_prop(i) - - # Properties - for i in import_data.prop_names.size(): - if import_data.prop_names[i] != "resource_path" && import_data.prop_names[i] != "resource_name": - new_script.source_code += import_data.create_property_line_for_prop(i) - - import_data.new_script = new_script - new_script.reload() + import_data.new_script = import_data.generate_script(entries, save_script) if save_script: - ResourceSaver.save(import_data.edited_path.get_basename() + ".gd", new_script) + ResourceSaver.save(import_data.edited_path.get_basename() + ".gd", import_data.new_script) # Because when instanced, objects have a copy of the script import_data.new_script = load(import_data.edited_path.get_basename() + ".gd") diff --git a/addons/resources_speadsheet_view/import_export/spreadsheet_import.gd b/addons/resources_speadsheet_view/import_export/spreadsheet_import.gd index 0a468d6..5a58f2e 100644 --- a/addons/resources_speadsheet_view/import_export/spreadsheet_import.gd +++ b/addons/resources_speadsheet_view/import_export/spreadsheet_import.gd @@ -118,36 +118,37 @@ func property_to_string(value, col_index : int) -> String: return str(value) -func create_property_line_for_prop(col_index : int): +func create_property_line_for_prop(col_index : int) -> String: var result = "export var " + prop_names[col_index] + " :" match prop_types[col_index]: PropType.STRING: - return result + "= \"\"\n" + return result + "= \"\"\r\n" PropType.BOOL: - return result + "= false\n" + return result + "= false\r\n" PropType.REAL: - return result + "= 0.0\n" + return result + "= 0.0\r\n" PropType.INT: - return result + "= 0\n" + return result + "= 0\r\n" PropType.COLOR: - return result + "= Color.white\n" + return result + "= Color.white\r\n" PropType.OBJECT: - return result + " Resource\n" + return result + " Resource\r\n" PropType.ENUM: return result.replace( "export var", "export(" + _escape_forbidden_enum_names( - TextEditingUtils\ - .string_snake_to_naming_case(prop_names[col_index])\ + prop_names[col_index].capitalize()\ .replace(" ", "") ) + ") var" - ) + "= 0\n" + ) + "= 0\r\n" + + return "" func _escape_forbidden_enum_names(string : String) -> String: @@ -164,14 +165,13 @@ func _escape_forbidden_enum_names(string : String) -> String: return string -func create_enum_for_prop(col_index): +func create_enum_for_prop(col_index) -> String: var result := ( "enum " + _escape_forbidden_enum_names( - TextEditingUtils\ - .string_snake_to_naming_case(prop_names[col_index])\ + prop_names[col_index].capitalize()\ .replace(" ", "") - ) + " {\n" + ) + " {\r\n" ) for k in uniques[col_index]: result += ( @@ -179,12 +179,37 @@ func create_enum_for_prop(col_index): + k # Enum Entry + " = " + str(uniques[col_index][k]) # Value - + ",\n" + + ",\r\n" ) - result += "\tMAX,\n}\n\n" + result += "\tMAX,\r\n}\r\n\r\n" return result +func generate_script(entries, has_classname = true) -> GDScript: + var source = "" + if has_classname and script_classname != "": + source = "class_name " + script_classname + " \r\nextends Resource\r\n\r\n" + + else: + source = "extends Resource\r\n\r\n" + + # Enums + uniques = get_uniques(entries) + for i in prop_types.size(): + if prop_types[i] == PropType.ENUM: + source += create_enum_for_prop(i) + + # Properties + for i in prop_names.size(): + if (prop_names[i] != "resource_path") and (prop_names[i] != "resource_name"): + source += create_property_line_for_prop(i) + + var created_script = GDScript.new() + created_script.source_code = source + created_script.reload() + return created_script + + func strings_to_resource(strings : Array): var new_res = new_script.new() for j in min(prop_names.size(), strings.size()):