Skip to content

Commit 1954dfc

Browse files
committed
Make the new unit back-compatible via delegation.
1 parent 22a5040 commit 1954dfc

File tree

1 file changed

+45
-11
lines changed

1 file changed

+45
-11
lines changed

sc2reader/data/__init__.py

Lines changed: 45 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,21 +27,56 @@ class Unit(object):
2727
def __init__(self, unit_id, flags):
2828
self.id = unit_id
2929
self.flags = flags
30-
self.type = None
31-
self.name = 'Unknown Unit'
30+
self._type_class = None
3231
self.hallucinated = (flags & 2 == 2)
3332

3433
def is_type(self, unit_type):
3534
if isinstance(unit_type, int):
36-
if self.type:
37-
return self.type.id == unit_type
38-
else:
39-
return unit_type == 0
35+
# Compare integer ids. Unknown units have id==0 and should be equal
36+
return self._type_class.id if self._type_class else unit_type == 0
4037
else:
41-
return self.type == unit_type
38+
return self._type_class == unit_type
4239

43-
def get_race(self):
44-
return self.type.race if self.type else None
40+
@property
41+
def name(self):
42+
return self._type_class.name if self._type_class else None
43+
44+
@property
45+
def title(self):
46+
return self._type_class.title if self._type_class else None
47+
48+
@property
49+
def type(self):
50+
""" For backwards compatibility this returns the int id instead of the actual class """
51+
return self._type_class.id if self._type_class else None
52+
53+
@property
54+
def race(self):
55+
return self._type_class.race if self._type_class else None
56+
57+
@property
58+
def minerals(self):
59+
return self._type_class.minerals if self._type_class else None
60+
61+
@property
62+
def vespene(self):
63+
return self._type_class.vespene if self._type_class else None
64+
65+
@property
66+
def supply(self):
67+
return self._type_class.supply if self._type_class else None
68+
69+
@property
70+
def is_worker(self):
71+
return self._type_class.is_worker if self._type_class else False
72+
73+
@property
74+
def is_building(self):
75+
return self._type_class.is_building if self._type_class else False
76+
77+
@property
78+
def is_army(self):
79+
return self._type_class.is_army if self._type_class else False
4580

4681
def __str__(self):
4782
return "{0} [{1:X}]".format(self.name, self.id)
@@ -74,8 +109,7 @@ def create_unit(self, unit_id, unit_type, unit_flags):
74109
def change_type(self, unit, new_type):
75110
if new_type in self.units:
76111
reference_unit = self.units[new_type]
77-
unit.type = reference_unit
78-
unit.name = reference_unit.name
112+
unit._type_class = reference_unit
79113
else:
80114
self.logger.error("Unable to change type of {0} to {1}; unit type not found in build {2}".format(unit,hex(new_type),self.id))
81115

0 commit comments

Comments
 (0)