Skip to content

Commit c381558

Browse files
committed
Refactor the selection listener for less redundancy.
1 parent eeb9b0b commit c381558

File tree

1 file changed

+30
-32
lines changed

1 file changed

+30
-32
lines changed

sc2reader/listeners/selection.py

Lines changed: 30 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ def deselect(self, mode, data):
3838
if len(mask) < len(self.objects):
3939
# pad to the right
4040
mask = mask+[False,]*(len(self.objects)-len(mask))
41-
self.logger.debug("Deselection Mask: "+mask)
41+
self.logger.debug("Deselection Mask: {0}".format(mask))
4242
self.objects = [ obj for (slct, obj) in filter(lambda (slct, obj): not slct, zip(mask, self.objects)) ]
4343

4444
elif mode == 0x02:
@@ -73,38 +73,36 @@ def setup(self, replay):
7373
player.selections = GameState(PlayerSelection())
7474

7575
def __call__(self, event, replay):
76+
# TODO: The whole register_listener thing is really clunky
77+
# right now. In some cases, listeners already know what
78+
# they want to listen to.
79+
if not (isinstance(event, events.SelectionEvent) or isinstance(event, events.HotkeyEvent)):
80+
return
81+
82+
if replay.opt.debug:
83+
self.logger.debug("Event bytes: "+event.bytes.encode("hex"))
84+
85+
selections = event.player.selections[event.frame]
86+
87+
if isinstance(event, events.SetToHotkeyEvent):
88+
# Make a copy to decouple the hotkey from primary selection
89+
selections[event.hotkey] = selections[0x0A].copy()
90+
self.logger.info("[{0}] {1} set hotkey {2} to current selection".format(utils.Length(seconds=event.second),event.player.name,event.hotkey))
91+
92+
elif isinstance(event, events.AddToHotkeyEvent):
93+
selections[event.hotkey].deselect(*event.deselect)
94+
selections[event.hotkey].select(selections[0x0A].objects)
95+
self.logger.info("[{0}] {1} added current selection to hotkey {2}".format(utils.Length(seconds=event.second),event.player.name,event.hotkey))
96+
97+
elif isinstance(event, events.GetFromHotkeyEvent):
98+
# For some reason they leave the hotkey buffer unmodified so make a copy
99+
selections[0x0A] = selections[event.hotkey].copy()
100+
selections[0x0A].deselect(*event.deselect)
101+
self.logger.info("[{0}] {1} retrieved hotkey {2}, {3} units: {4}".format(utils.Length(seconds=event.second),event.player.name,event.hotkey,len(selections[0x0A].objects),selections[0x0A]))
76102

77-
if isinstance(event, events.HotkeyEvent):
78-
if replay.opt.debug:
79-
self.logger.debug("Event bytes: "+event.bytes.encode("hex"))
80-
81-
selections = event.player.selections[event.frame]
82-
hotkey_selection = selections[event.hotkey]
83-
84-
if isinstance(event, events.SetToHotkeyEvent):
85-
selections[event.hotkey] = selections[0x0A].copy()
86-
self.logger.info("[{0}] {1} set hotkey {2} to current selection".format(utils.Length(seconds=event.second),event.player.name,event.hotkey))
87-
88-
if isinstance(event, events.AddToHotkeyEvent):
89-
selections[event.hotkey].deselect(*event.deselect)
90-
selections[event.hotkey].select(selections[0x0A].objects)
91-
self.logger.info("[{0}] {1} added current selection to hotkey {2}".format(utils.Length(seconds=event.second),event.player.name,event.hotkey))
92-
93-
if isinstance(event, events.GetFromHotkeyEvent):
94-
# For some reason they leave the hotkey buffer unmodified
95-
selections[0x0A] = selections[event.hotkey].copy()
96-
selections[0x0A].deselect(*event.deselect)
97-
self.logger.info("[{0}] {1} retrieved hotkey {2}, {3} units: {4}".format(utils.Length(seconds=event.second),event.player.name,event.hotkey,len(selections[0x0A].objects),selections[0x0A]))
98-
99-
event.selected = selections[0x0A]
100-
101-
if isinstance(event, events.SelectionEvent):
102-
if replay.opt.debug:
103-
self.logger.debug("Event bytes: "+event.bytes.encode("hex"))
104-
105-
selections = event.player.selections[event.frame]
103+
elif isinstance(event, events.SelectionEvent):
106104
selections[0x0A].deselect(*event.deselect)
107105
selections[0x0A].select(event.objects)
106+
self.logger.info("[{0}] {1} selected {2} units: {3}".format(utils.Length(seconds=event.second),event.player.name,len(selections[0x0A].objects),selections[0x0A]))
108107

109-
event.selected = selections[0x0A]
110-
self.logger.info("[{0}] {1} selected {2} units: {3}".format(utils.Length(seconds=event.second),event.player.name,len(event.selected.objects),event.selected))
108+
event.selected = selections[0x0A]

0 commit comments

Comments
 (0)