21
return p.abspath(p.join(WIDELANDS_SVN_DIR, "data", self._json['icon']))
23
return p.abspath(p.join(WIDELANDS_SVN_DIR, 'data', self._json['icon']))
23
26
class Ware(BaseDescr):
25
return "Ware(%s)" % self.name
29
return 'Ware(%s)' % self.name
27
32
class Worker(BaseDescr):
30
if 'becomes' in self._json:
31
return self._json['becomes']['name']
36
if 'becomes' in self._json:
37
return self._json['becomes']['name']
36
return "Worker(%s)" % self.name
42
return 'Worker(%s)' % self.name
38
45
class Building(BaseDescr):
40
48
def enhanced_building(self):
41
if 'enhanced' in self._json:
49
if 'enhanced' in self._json:
47
55
def base_building(self):
48
56
if not self.enhanced_building:
50
bases = [b for b in self.tribe.buildings.values() if b.enhancement == self.name]
58
bases = [b for b in self.tribe.buildings.values()
59
if b.enhancement == self.name]
51
60
if len(bases) == 0 and self.enhanced_building:
52
raise Exception("Building %s has no bases in tribe %s" % (self.name, self.tribe.name))
61
raise Exception('Building %s has no bases in tribe %s' %
62
(self.name, self.tribe.name))
54
raise Exception("Building %s seems to have more than one base in tribe %s." % (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))
58
69
def enhancement(self):
59
if 'enhancement' in self._json:
60
return self._json['enhancement']
70
if 'enhancement' in self._json:
71
return self._json['enhancement']
65
76
def buildcost(self):
67
if 'buildcost' in self._json:
68
for buildcost in self._json['buildcost']:
69
result[buildcost['name']] = buildcost['amount']
78
if 'buildcost' in self._json:
79
for buildcost in self._json['buildcost']:
80
result[buildcost['name']] = buildcost['amount']
74
85
return self._json['size']
76
88
class ProductionSite(Building):
77
btype = "productionsite"
89
btype = 'productionsite'
81
if 'produced_wares' in self._json:
82
for warename in self._json['produced_wares']:
94
if 'produced_wares' in self._json:
95
for warename in self._json['produced_wares']:
89
if 'stored_wares' in self._json:
90
for ware in self._json['stored_wares']:
91
result[ware['name']] = ware['amount']
102
if 'stored_wares' in self._json:
103
for ware in self._json['stored_wares']:
104
result[ware['name']] = ware['amount']
95
108
def workers(self):
97
if 'workers' in self._json:
98
for worker in self._json['workers']:
99
result[worker['name']] = worker['amount']
110
if 'workers' in self._json:
111
for worker in self._json['workers']:
112
result[worker['name']] = worker['amount']
103
116
def recruits(self):
105
if 'produced_workers' in self._json:
106
for workername in self._json['produced_workers']:
107
result.add(workername)
118
if 'produced_workers' in self._json:
119
for workername in self._json['produced_workers']:
120
result.add(workername)
110
124
class Warehouse(Building):
114
129
class TrainingSite(ProductionSite):
115
btype = "trainingsite"
130
btype = 'trainingsite'
118
134
class MilitarySite(Building):
119
btype = "militarysite"
135
btype = 'militarysite'
121
138
def conquers(self):
122
139
return self._json['conquers']
133
150
class Tribe(object):
134
152
def __init__(self, tribeinfo, json_directory):
135
153
self.name = tribeinfo['name']
137
wares_file = open(p.normpath(json_directory + "/" + self.name + "_wares.json"), "r")
155
wares_file = open(p.normpath(json_directory + '/' +
156
self.name + '_wares.json'), 'r')
138
157
waresinfo = json.load(wares_file)
139
158
self.wares = dict()
140
159
for ware in waresinfo['wares']:
141
descname = ware['descname'].encode('ascii', 'xmlcharrefreplace')
142
self.wares[ware['name']] = Ware(self, ware['name'], descname, ware)
160
descname = ware['descname'].encode('ascii', 'xmlcharrefreplace')
161
self.wares[ware['name']] = Ware(self, ware['name'], descname, ware)
144
workers_file = open(p.normpath(json_directory + "/" + self.name + "_workers.json"), "r")
163
workers_file = open(p.normpath(
164
json_directory + '/' + self.name + '_workers.json'), 'r')
145
165
workersinfo = json.load(workers_file)
146
166
self.workers = dict()
147
167
for worker in workersinfo['workers']:
148
descname = worker['descname'].encode('ascii', 'xmlcharrefreplace')
149
self.workers[worker['name']] = Worker(self, worker['name'], descname, worker)
168
descname = worker['descname'].encode('ascii', 'xmlcharrefreplace')
169
self.workers[worker['name']] = Worker(
170
self, worker['name'], descname, worker)
151
buildings_file = open(p.normpath(json_directory + "/" + self.name + "_buildings.json"), "r")
172
buildings_file = open(p.normpath(
173
json_directory + '/' + self.name + '_buildings.json'), 'r')
152
174
buildingsinfo = json.load(buildings_file)
153
175
self.buildings = dict()
154
176
for building in buildingsinfo['buildings']:
155
descname = building['descname'].encode('ascii', 'xmlcharrefreplace')
156
if building['type'] == "productionsite":
157
self.buildings[building['name']] = ProductionSite(self, building['name'], descname, building)
158
elif building['type'] == "warehouse":
159
self.buildings[building['name']] = Warehouse(self, building['name'], descname, building)
160
elif building['type'] == "trainingsite":
161
self.buildings[building['name']] = TrainingSite(self, building['name'], descname, building)
162
elif building['type'] == "militarysite":
163
self.buildings[building['name']] = MilitarySite(self, building['name'], descname, building)
165
self.buildings[building['name']] = Building(self, building['name'], descname, building)
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)
167
195
def __str__(self):
168
return "Tribe(%s)" % self.name
196
return 'Tribe(%s)' % self.name