forked from AlexRuiz7/bf2-mirror-map
-
Notifications
You must be signed in to change notification settings - Fork 0
/
__mirror.py
123 lines (105 loc) · 2.96 KB
/
__mirror.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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
# --------------------------------------------------- #
# Author: SgtAlex
# Description: Battlefield 2 Modding tool
#
# This program mirrors the objects in the map
# (flips content vertical and horizontally)
#
# The algorithm procedure is the following:
#
# reads filename from commandline
# if file exists, then
# creates file: filename_mirror
# for line in file
# if (line contains ".absolutePosition"), then
# mirror (line)
# elif (line contains ".rotation"), then
# line.X += 180
# endif
# write line into filename_mirror
# endfor
#
#
# func mirror(string line)
# line.X = -line.X
# line.Z = -line.Z
#
#
# It can process several files in a time:
# python __mirror.py StaticObjects.con AmbientObjects.con Editor\Splines.con Editor\GamePlayObjects.con
#
# --------------------------------------------------- #
import os, sys
# --
# -
#
class Position:
def __init__(self, line):
self.base = line.strip().split(' ')[0]
coords = line.strip().split(' ')[1]
self.x = float(coords.split('/')[0])
self.y = float(coords.split('/')[1])
self.z = float(coords.split('/')[2])
self.mirror()
def __str__(self):
return '%s %s/%s/%s\n' % (self.base, self.x, self.y, self.z)
def mirror(self):
self.x = -self.x
self.z = -self.z
# --
# -
#
class Rotation(Position):
def __init__(self, line):
super().__init__(line)
def mirror(self):
self.x = self.x + 180
# --
# -
#
def parseFile(filename):
output = ''
hasEmptyRotation = False
# read source file and mirror its objects
fd = open(filename)
for line in fd:
if ('.absolutePosition' in line):
obj = Position(line)
output += str(obj)
hasEmptyRotation = True
elif ('.rotation' in line):
obj = Rotation(line)
output += str(obj)
hasEmptyRotation = False
elif (hasEmptyRotation): # 0/0/0 rotations are skipped by editor
obj = 'Object.rotation 180/0/0\n'
output += str(obj)
output += line
hasEmptyRotation = False
elif ('.AddControlPoint' in line): # Splines.con
obj = Position(line)
output += str(obj)
else:
output += line
fd.close()
# write parsed content into new file
outputFile = filename.replace('.con', '_mirrored.con')
fd = open(outputFile, 'w')
fd.write(output)
fd.close()
# --
# -
#
def main(argv):
argv.pop(0) # remove script name from args
for file in argv:
parseFile(file)
# --
# -
#
if __name__ == "__main__":
if (len(sys.argv) < 2):
print ('Usage: __mirror.py filename_1 filename_2 ... filename_N')
sys.exit(-1)
else:
main(sys.argv)