/
convert.py
executable file
·83 lines (75 loc) · 2.99 KB
/
convert.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#
# 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):
file = codecs.open(filename, "r", "utf-8")
content = file.read()
file.close()
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):
file = codecs.open(filename, "r", "utf-8")
content = file.read()
file.close()
new_content = ""
is_converted = False
for line in content.splitlines(True):
if line.startswith("[ext_resource") and 'type="SpineSkeletonFileResource"' in line and '.json"' in line:
if not is_converted:
print("Converting TSCN file " + str(filename))
is_converted = True
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)