瀏覽代碼

[godot] Conversion script .json -> .spine-json for existing projects.

Mario Zechner 3 年之前
父節點
當前提交
158eb4e7fb
共有 1 個文件被更改,包括 78 次插入0 次删除
  1. 78 0
      spine-godot/convert.py

+ 78 - 0
spine-godot/convert.py

@@ -0,0 +1,78 @@
+# 
+# Python script to convert a Godot project using Spine .json skeleton files to use the new
+# extension .spine-json instead.
+#
+# Usage: python convert.py path/to/godot/project
+#
+# Note: ensure you have created a backup of your Godot project before running this script.
+#
+# The script will traverse all .json, .tscn, and .tres files in the directory recursively.
+#
+# For each .json file, it will rename the file to .spine-json and remove the .json.import file.
+# Upon reloading the the project in Godot, the file will be re-imported and the a .spine-json.import
+# file will be created in place of the .json.import file.
+#
+# For each .tscn or .tres file, it will replace the .json suffix in external resources of type
+# SpineSkeletonFileResource with the new suffix .spine-json.
+#
+import sys
+import os
+import pathlib
+import codecs
+
+def convert_json(filename):    
+    with open(filename) as file:
+        content = file.read()
+        if "skeleton" in content and "hash" in content and "spine" in content:
+            path = pathlib.Path(filename)
+            new_path = path.with_suffix('.spine-json')
+            print("Renaming " + str(path) + " to " + str(new_path))
+            path.rename(new_path)
+            if os.path.exists(filename + ".import"):
+                print("Removing " + str(filename) + ".import")
+                os.remove(filename + ".import")
+
+def convert_tscn_or_tres(filename):
+    print("Converting TSCN file " + str(filename))
+    file = codecs.open(filename, "r", "utf-8")
+    content = file.read()
+    file.close()
+
+    new_content = ""
+    for line in content.splitlines(True):
+        if line.startswith("[ext_resource") and 'type="SpineSkeletonFileResource"' in line:
+            print("Replacing .json with .spine-json in \n" + line)
+            line = line.replace('.json"', '.spine-json"')
+        new_content += line
+
+    file = codecs.open(filename, "w", "utf-8")
+    file.write(new_content)
+    file.close()
+
+def convert_tres(filename):
+    print("Converting TRES file " + str(filename))
+    with open(filename) as file:
+        content = file.read()
+
+def convert(path):
+    for dirpath, dirs, files in os.walk(path):	
+        for filename in files:
+            file = os.path.join(dirpath,filename)
+            if file.endswith(".json"):
+                convert_json(file)
+            elif file.endswith(".tscn") or file.endswith(".tres"):
+                convert_tscn_or_tres(file)            
+
+if __name__ == "__main__":
+    if len(sys.argv) == 1:
+        print("Please provide the path to your Godot project, e.g. python convert.py path/to/my/project.")
+        sys.exit(-1)
+    path = os.path.abspath(sys.argv[1])
+    if not os.path.exists(path):
+        print("Directory " + str(path) + " does not exist.")
+        sys.exit(-1)
+    if not os.path.isdir(path):
+        print(str(path) + " is not a directory.")
+        sys.exit(-1)
+    print("Converting " + str(path))
+    convert(path)