7
from settings import WIDELANDS_SVN_DIR
8
basedir = WIDELANDS_SVN_DIR
10
basedir = p.join(p.dirname(__file__), p.pardir, p.pardir)
13
class BaseDescr(object):
15
def __init__(self, tribe, name, descname, json):
19
self.descname = descname
23
return p.abspath(p.join(WIDELANDS_SVN_DIR, 'data', self._json['icon']))
26
class Ware(BaseDescr):
29
return 'Ware(%s)' % self.name
32
class Worker(BaseDescr):
36
if 'becomes' in self._json:
37
return self._json['becomes']['name']
42
return 'Worker(%s)' % self.name
45
class Building(BaseDescr):
48
def enhanced_building(self):
49
if 'enhanced' in self._json:
55
def base_building(self):
56
if not self.enhanced_building:
58
bases = [b for b in self.tribe.buildings.values()
59
if b.enhancement == self.name]
60
if len(bases) == 0 and self.enhanced_building:
61
raise Exception('Building %s has no bases in tribe %s' %
62
(self.name, self.tribe.name))
64
raise Exception('Building %s seems to have more than one base in tribe %s.' % (
65
self.name, self.tribe.name))
69
def enhancement(self):
70
if 'enhancement' in self._json:
71
return self._json['enhancement']
78
if 'buildcost' in self._json:
79
for buildcost in self._json['buildcost']:
80
result[buildcost['name']] = buildcost['amount']
85
return self._json['size']
88
class ProductionSite(Building):
89
btype = 'productionsite'
94
if 'produced_wares' in self._json:
95
for warename in self._json['produced_wares']:
102
if 'stored_wares' in self._json:
103
for ware in self._json['stored_wares']:
104
result[ware['name']] = ware['amount']
110
if 'workers' in self._json:
111
for worker in self._json['workers']:
112
result[worker['name']] = worker['amount']
118
if 'produced_workers' in self._json:
119
for workername in self._json['produced_workers']:
120
result.add(workername)
124
class Warehouse(Building):
129
class TrainingSite(ProductionSite):
130
btype = 'trainingsite'
134
class MilitarySite(Building):
135
btype = 'militarysite'
139
return self._json['conquers']
142
def max_soldiers(self):
143
return self._json['max_soldiers']
146
def heal_per_second(self):
147
return self._json['heal_per_second']
152
def __init__(self, tribeinfo, json_directory):
153
self.name = tribeinfo['name']
155
wares_file = open(p.normpath(json_directory + '/' +
156
self.name + '_wares.json'), 'r')
157
waresinfo = json.load(wares_file)
159
for ware in waresinfo['wares']:
160
descname = ware['descname'].encode('ascii', 'xmlcharrefreplace')
161
self.wares[ware['name']] = Ware(self, ware['name'], descname, ware)
163
workers_file = open(p.normpath(
164
json_directory + '/' + self.name + '_workers.json'), 'r')
165
workersinfo = json.load(workers_file)
166
self.workers = dict()
167
for worker in workersinfo['workers']:
168
descname = worker['descname'].encode('ascii', 'xmlcharrefreplace')
169
self.workers[worker['name']] = Worker(
170
self, worker['name'], descname, worker)
172
buildings_file = open(p.normpath(
173
json_directory + '/' + self.name + '_buildings.json'), 'r')
174
buildingsinfo = json.load(buildings_file)
175
self.buildings = dict()
176
for building in buildingsinfo['buildings']:
177
descname = building['descname'].encode(
178
'ascii', 'xmlcharrefreplace')
179
if building['type'] == 'productionsite':
180
self.buildings[building['name']] = ProductionSite(
181
self, building['name'], descname, building)
182
elif building['type'] == 'warehouse':
183
self.buildings[building['name']] = Warehouse(
184
self, building['name'], descname, building)
185
elif building['type'] == 'trainingsite':
186
self.buildings[building['name']] = TrainingSite(
187
self, building['name'], descname, building)
188
elif building['type'] == 'militarysite':
189
self.buildings[building['name']] = MilitarySite(
190
self, building['name'], descname, building)
192
self.buildings[building['name']] = Building(
193
self, building['name'], descname, building)
196
return 'Tribe(%s)' % self.name