Skip to content

Commit 835873f

Browse files
committed
Refactor overlay parsing from selection and hotkey events.
1 parent 7844ba5 commit 835873f

File tree

1 file changed

+25
-25
lines changed

1 file changed

+25
-25
lines changed

sc2reader/parsers.py

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -72,24 +72,34 @@ def read_resource(buffer):
7272
return ResourceTransferEvent(frames, pid, type, code, target, minerals, vespene)
7373

7474
class ActionParser_16561(ActionParser):
75-
76-
def parse_selection_event(self, buffer, frames, type, code, pid):
77-
bank = code >> 4
78-
first = buffer.read_byte() # TODO ?
7975

80-
deselect_flag = buffer.shift(2)
81-
if deselect_flag == 0x01: # deselect deselect mask
76+
def parse_overlay(self, buffer, mode):
77+
if mode == 0x01: # deselect overlay mask
8278
mask = buffer.read_bitmask()
83-
deselect = lambda a: Selection.mask(a, mask)
84-
elif deselect_flag == 0x02: # deselect mask
79+
def deselect_overlay_mask(a):
80+
return Selection.mask(a, mask)
81+
overlay = deselect_overlay_mask
82+
elif mode == 0x02: # deselect mask
8583
indexes = [buffer.read_byte() for i in range(buffer.read_byte())]
86-
deselect = lambda a: Selection.deselect(a, indexes)
87-
elif deselect_flag == 0x03: # replace mask
84+
def deselect_mask(a):
85+
return Selection.deselect(a, indexes)
86+
overlay = deselect_mask
87+
elif mode == 0x03: # replace mask
8888
indexes = [buffer.read_byte() for i in range(buffer.read_byte())]
89-
deselect = lambda a: Selection.replace(a, indexes)
89+
def replace_mask(a):
90+
return Selection.replace(a,indexes)
91+
overlay = replace_mask
9092
else:
91-
deselect = None
92-
93+
overlay = None
94+
95+
return overlay
96+
97+
def parse_selection_event(self, buffer, frames, type, code, pid):
98+
bank = code >> 4
99+
first = buffer.read_byte() # TODO ?
100+
101+
deselect = self.parse_overlay(buffer, buffer.shift(2))
102+
93103
# <count> (<type_id>, <count>,)*
94104
object_types = [ (buffer.read_object_type(read_modifier=True), buffer.read_byte(), ) for i in range(buffer.read_byte()) ]
95105
# <count> (<object_id>,)*
@@ -103,19 +113,9 @@ def parse_selection_event(self, buffer, frames, type, code, pid):
103113

104114
def parse_hotkey_event(self, buffer, frames, type, code, pid):
105115
hotkey = code >> 4
106-
action, mode = buffer.shift(2), buffer.shift(2)
116+
action = buffer.shift(2)
107117

108-
if mode == 1: # deselect overlay mask
109-
mask = buffer.read_bitmask()
110-
overlay = lambda a: Selection.mask(a, mask)
111-
elif mode == 2: # deselect mask
112-
indexes = [buffer.read_byte() for i in range(buffer.read_byte())]
113-
overlay = lambda a: Selection.deselect(a, indexes)
114-
elif mode == 3: # replace mask
115-
indexes = [buffer.read_byte() for i in range(buffer.read_byte())]
116-
overlay = lambda a: Selection.replace(a, indexes)
117-
else:
118-
overlay = None
118+
overlay = self.parse_overlay(buffer, buffer.shift(2))
119119

120120
if action == 0:
121121
return SetToHotkeyEvent(frames, pid, type, code, hotkey, overlay)

0 commit comments

Comments
 (0)