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