|
1 | 1 | from __future__ import absolute_import |
2 | 2 |
|
3 | | -#from sc2reader.data.utils import DataObject |
4 | | -#from sc2reader.data.build16561 import Data_16561 |
5 | | -#from sc2reader.data.build17326 import Data_17326 |
6 | | -#from sc2reader.data.build18317 import Data_18317 |
7 | | -#from sc2reader.data.build19595 import Data_19595 |
8 | | - |
| 3 | +import pkgutil |
9 | 4 |
|
10 | 5 | class Build(object): |
11 | 6 | def __init__(self, build_id, units, abilities): |
@@ -258,87 +253,88 @@ def __repr__(self): |
258 | 253 | class Ability(object): |
259 | 254 | pass |
260 | 255 |
|
| 256 | + |
261 | 257 | def create_build(build): |
262 | | - units_file = path.join(BASE_PATH, "{}_{}.csv".format(build,"units")) |
263 | | - abils_file = path.join(BASE_PATH, "{}_{}.csv".format(build,"abilities")) |
264 | | - with open(units_file, 'r') as data_file: |
265 | | - units = dict() |
266 | | - for row in [UnitRow(*line.strip().split('|')[1:]) for line in data_file]: |
267 | | - unit_id = int(row.id, 10) << 8 | 1 |
268 | | - values = dict(cost=[0,0,0], race='Neutral',is_army=False, is_building=False, is_worker=False) |
269 | | - race, minerals, vespene, supply = "Neutral", 0, 0, 0 |
270 | | - for race in ('Protoss','Terran','Zerg'): |
271 | | - if row.type.lower() in unit_lookup[race]: |
272 | | - values.update(unit_lookup[race][row.type.lower()]) |
273 | | - values['race']=race |
274 | | - break |
275 | | - |
276 | | - units[unit_id] = type(row.title,(Unit,), dict( |
277 | | - type=unit_id, |
278 | | - name=row.title, |
279 | | - title=row.title, |
280 | | - race=values['race'], |
281 | | - minerals=values['cost'][0], |
282 | | - vespene=values['cost'][1], |
283 | | - supply=values['cost'][2], |
284 | | - is_building=values['is_building'], |
285 | | - is_worker=values['is_worker'], |
286 | | - is_army=values['is_army'], |
| 258 | + units = dict() |
| 259 | + units_file = "{0}_{1}.csv".format(build,"units") |
| 260 | + units_data = pkgutil.get_data('sc2reader.data',units_file).split('\n')[:-1] |
| 261 | + for row in [UnitRow(*line.strip().split('|')[1:]) for line in units_data]: |
| 262 | + unit_id = int(row.id, 10) << 8 | 1 |
| 263 | + values = dict(cost=[0,0,0], race='Neutral',is_army=False, is_building=False, is_worker=False) |
| 264 | + race, minerals, vespene, supply = "Neutral", 0, 0, 0 |
| 265 | + for race in ('Protoss','Terran','Zerg'): |
| 266 | + if row.type.lower() in unit_lookup[race]: |
| 267 | + values.update(unit_lookup[race][row.type.lower()]) |
| 268 | + values['race']=race |
| 269 | + break |
| 270 | + |
| 271 | + units[unit_id] = type(row.title,(Unit,), dict( |
| 272 | + type=unit_id, |
| 273 | + name=row.title, |
| 274 | + title=row.title, |
| 275 | + race=values['race'], |
| 276 | + minerals=values['cost'][0], |
| 277 | + vespene=values['cost'][1], |
| 278 | + supply=values['cost'][2], |
| 279 | + is_building=values['is_building'], |
| 280 | + is_worker=values['is_worker'], |
| 281 | + is_army=values['is_army'], |
| 282 | + )) |
| 283 | + |
| 284 | + if row.title.lower() in ('probe','zealot','stalker','immortal','phoenix','hightemplar','warpprism','archon','colossus','voidray'): |
| 285 | + units[unit_id+1] = type("Hallucinated"+row.title,(Unit,), dict( |
| 286 | + type=unit_id+1, |
| 287 | + name="Hallucinated"+row.title, |
| 288 | + title="Hallucinated"+row.title, |
| 289 | + race='Protoss', |
| 290 | + minerals=0, |
| 291 | + vespene=0, |
| 292 | + supply=0, |
| 293 | + is_building=False, |
| 294 | + is_army=True, |
| 295 | + is_worker=False, |
| 296 | + )) |
| 297 | + |
| 298 | + |
| 299 | + abils_file = "{0}_{1}.csv".format(build,"abilities") |
| 300 | + abils_data = pkgutil.get_data('sc2reader.data',abils_file).split('\n')[:-1] |
| 301 | + abilities = {0:type('RightClick',(Ability,), dict(type=0, name='RightClick', title='Right Click', is_build=False, build_time=None, build_unit=None))} |
| 302 | + for row in [line.strip().split('|') for line in abils_data]: |
| 303 | + base = int(row[1],10) << 5 |
| 304 | + if base == 0: continue |
| 305 | + |
| 306 | + # Temporary Hack here. |
| 307 | + if base == 0xe80: |
| 308 | + real_abils = [(0xe80,"QueueCancel0"), (0xe81,"QueueCancel1")] |
| 309 | + else: |
| 310 | + real_abils = [(base|i,t) for i,t in enumerate(row[3:]) if t.strip()!=''] |
| 311 | + |
| 312 | + for abil_id, title in real_abils: |
| 313 | + abilities[abil_id] = type(title,(Ability,), dict( |
| 314 | + type=abil_id, |
| 315 | + name=title, |
| 316 | + title=title, |
| 317 | + is_build=False, |
| 318 | + build_time=None, |
| 319 | + build_unit=None |
| 320 | + )) |
| 321 | + |
| 322 | + |
| 323 | + # Some abilities have missing entries.. |
| 324 | + if len(real_abils) == 0: |
| 325 | + abilities[base] = type(row[2],(Ability,), dict( |
| 326 | + type=base, |
| 327 | + name=row[2], |
| 328 | + title=row[2], |
| 329 | + is_build=False, |
| 330 | + build_time=None, |
| 331 | + build_unit=None |
287 | 332 | )) |
288 | 333 |
|
289 | | - if row.title.lower() in ('probe','zealot','stalker','immortal','phoenix','hightemplar','warpprism','archon','colossus','voidray'): |
290 | | - units[unit_id+1] = type("Hallucinated"+row.title,(Unit,), dict( |
291 | | - type=unit_id+1, |
292 | | - name="Hallucinated"+row.title, |
293 | | - title="Hallucinated"+row.title, |
294 | | - race='Protoss', |
295 | | - minerals=0, |
296 | | - vespene=0, |
297 | | - supply=0, |
298 | | - is_building=False, |
299 | | - is_army=True, |
300 | | - is_worker=False, |
301 | | - )) |
302 | | - |
303 | | - |
304 | | - with open(abils_file, 'r') as data_file: |
305 | | - abilities = {0:type('RightClick',(Ability,), dict(type=0, name='RightClick', title='Right Click', is_build=False, build_time=None, build_unit=None))} |
306 | | - for row in [line.strip().split('|') for line in data_file]: |
307 | | - base = int(row[1],10) << 5 |
308 | | - if base == 0: continue |
309 | | - |
310 | | - # Temporary Hack here. |
311 | | - if base == 0xe80: |
312 | | - real_abils = [(0xe80,"QueueCancel0"), (0xe81,"QueueCancel1")] |
313 | | - else: |
314 | | - real_abils = [(base|i,t) for i,t in enumerate(row[3:]) if t.strip()!=''] |
315 | | - |
316 | | - for abil_id, title in real_abils: |
317 | | - abilities[abil_id] = type(title,(Ability,), dict( |
318 | | - type=abil_id, |
319 | | - name=title, |
320 | | - title=title, |
321 | | - is_build=False, |
322 | | - build_time=None, |
323 | | - build_unit=None |
324 | | - )) |
325 | | - |
326 | | - |
327 | | - # Some abilities have missing entries.. |
328 | | - if len(real_abils) == 0: |
329 | | - abilities[base] = type(row[2],(Ability,), dict( |
330 | | - type=base, |
331 | | - name=row[2], |
332 | | - title=row[2], |
333 | | - is_build=False, |
334 | | - build_time=None, |
335 | | - build_unit=None |
336 | | - )) |
337 | | - |
338 | | - if int(row[1],10) == 249 and build==22612: |
339 | | - pass |
340 | | - #print row |
341 | | - #print abilities[0x1f20], abilities[0x1f21], abilities[0x1f22], abilities[0x1f23] |
| 334 | + if int(row[1],10) == 249 and build==22612: |
| 335 | + pass |
| 336 | + #print row |
| 337 | + #print abilities[0x1f20], abilities[0x1f21], abilities[0x1f22], abilities[0x1f23] |
342 | 338 |
|
343 | 339 | data = Build(build, units, abilities) |
344 | 340 | for unit in units.values(): |
|
0 commit comments