comparison utils/object_generator.py @ 0:4a0efb7baf70

* Datasets becomes the new trunk and retires after that :-)
author mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
date Sun, 29 Jun 2008 18:44:17 +0000
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:4a0efb7baf70
1 #!/usr/bin/python
2 from util_scripts.path import path
3 import os, sys
4
5 DIRNAME = 'clients/rio_de_hola/objects/nature/trees'
6 NAMESPACE = 'http://www.fifengine.de/xml/rio_de_hola'
7 STATIC = 1
8 BLOCKING = 1
9
10 _sep = os.path.sep
11
12 def dirpath(p):
13 return _sep.join(p.split(_sep)[:-1]) + _sep
14
15 def filename(p):
16 return p.split(_sep)[-1]
17
18 class Animation(object):
19 def __init__(self, path_to_xml):
20 self.path = path_to_xml
21 self.direction = int(dirpath(path_to_xml).split(_sep)[-2])
22 self.action_name = dirpath(path_to_xml).split(_sep)[-3]
23
24 def __str__(self):
25 return self.path
26
27 def relpath(self, rootpath):
28 return self.path.replace(rootpath, '')
29
30 class StaticImage(object):
31 def __init__(self, path_to_image):
32 self.path = path_to_image
33 self.direction = int(filename(path_to_image).split('.')[0])
34
35 def __str__(self):
36 return self.path
37
38 def relpath(self, rootpath):
39 return self.path.replace(rootpath, '')
40
41 OBJECT_HEADER = '<object id="%s" namespace="%s" blocking="%d" static="%d">'
42 ACTION_HEADER = '\t<action id="%s">'
43 ANIMATION_LINE = '\t\t<animation source="%s" direction="%d" />'
44 ACTION_FOOTER = '\t</action>'
45 IMAGE_LINE = '\t<image source="%s" direction="%d" />'
46 OBJECT_FOOTER = '</object>\n'
47
48 class Obj(object):
49 def __init__(self, path_to_xml):
50 self.path = path_to_xml
51 self.dirpath = dirpath(path_to_xml)
52 self.name = self.dirpath.split(_sep)[-2]
53 try:
54 num = int(self.name)
55 self.name = self.dirpath.split(_sep)[-3] + ':' + self.name
56 except ValueError:
57 pass # ok, object is not named as plain integer
58 self.actions = {}
59 self.images = []
60
61 def animation_is_part_of(self, anim):
62 return anim.path.find(self.dirpath) != -1
63
64 def image_is_part_of(self, img):
65 return (img.path.find(self.dirpath) != -1) and (img.relpath(self.dirpath).find(_sep) == -1)
66
67 def add_animation(self, animation):
68 if not self.actions.has_key(animation.action_name):
69 self.actions[animation.action_name] = []
70 self.actions[animation.action_name].append(animation)
71
72 def add_image(self, image):
73 self.images.append(image)
74
75 def write_xml(self):
76 lines = []
77 a = lines.append
78 a(OBJECT_HEADER % (self.name, NAMESPACE, BLOCKING, STATIC))
79 self.images.sort(lambda x, y: cmp(str(x), str(y)))
80 for i in self.images:
81 a(IMAGE_LINE % (i.relpath(self.dirpath), i.direction))
82
83 for action_name in sorted(self.actions.keys()):
84 a(ACTION_HEADER % action_name)
85 self.actions[action_name].sort(lambda x, y: cmp(str(x), str(y)))
86 for animation in self.actions[action_name]:
87 a(ANIMATION_LINE % (animation.relpath(self.dirpath), animation.direction))
88 a(ACTION_FOOTER)
89 a(OBJECT_FOOTER)
90
91 print 'FILE : ', self.path
92 print '\n'.join(lines)
93 print ''
94 open(self.path, 'w').write('\n'.join(lines))
95
96 def __str__(self):
97 return self.name
98
99 p = path(DIRNAME)
100 obj_files = [str(f) for f in p.walkfiles('object.xml')]
101 anim_files = [str(f) for f in p.walkfiles('animation.xml')]
102 images = [str(f) for f in p.walkfiles('*.png')]
103
104 objects = []
105 # iterate all object.xml files
106 for o in obj_files:
107 obj = Obj(str(o))
108 objects.append(obj)
109
110 for a in anim_files:
111 anim = Animation(str(a))
112 if obj.animation_is_part_of(anim):
113 obj.add_animation(anim)
114 for i in images:
115 img = StaticImage(str(i))
116 if obj.image_is_part_of(img):
117 obj.add_image(img)
118
119 for o in objects:
120 o.write_xml()
121
122 print "all done"