Skip to content

Commit eeb9b0b

Browse files
committed
Bug fix: Apply the deselect mask on hotkey.get events.
1 parent 7788919 commit eeb9b0b

File tree

1 file changed

+16
-5
lines changed

1 file changed

+16
-5
lines changed

sc2reader/listeners/selection.py

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@
22

33
from sc2reader.listeners.utils import ListenerBase
44

5+
import sc2reader
56
from sc2reader import events
67
from sc2reader import utils
7-
8+
from sc2reader import log_utils
89

910
class GameState(dict):
1011
def __init__(self, initial_state):
@@ -22,6 +23,7 @@ def __getitem__(self, frame):
2223

2324
class UnitSelection(object):
2425
def __init__(self, *new_objects):
26+
self.logger = log_utils.get_logger(UnitSelection)
2527
self.objects = list()
2628
self.select(new_objects)
2729

@@ -36,6 +38,7 @@ def deselect(self, mode, data):
3638
if len(mask) < len(self.objects):
3739
# pad to the right
3840
mask = mask+[False,]*(len(self.objects)-len(mask))
41+
self.logger.debug("Deselection Mask: "+mask)
3942
self.objects = [ obj for (slct, obj) in filter(lambda (slct, obj): not slct, zip(mask, self.objects)) ]
4043

4144
elif mode == 0x02:
@@ -72,6 +75,9 @@ def setup(self, replay):
7275
def __call__(self, event, replay):
7376

7477
if isinstance(event, events.HotkeyEvent):
78+
if replay.opt.debug:
79+
self.logger.debug("Event bytes: "+event.bytes.encode("hex"))
80+
7581
selections = event.player.selections[event.frame]
7682
hotkey_selection = selections[event.hotkey]
7783

@@ -85,15 +91,20 @@ def __call__(self, event, replay):
8591
self.logger.info("[{0}] {1} added current selection to hotkey {2}".format(utils.Length(seconds=event.second),event.player.name,event.hotkey))
8692

8793
if isinstance(event, events.GetFromHotkeyEvent):
88-
selections[0x0A] = selections[event.hotkey]
89-
self.logger.info("[{0}] {1} retrieved hotkey {2}: {3}".format(utils.Length(seconds=event.second),event.player.name,event.hotkey,selections[event.hotkey]))
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]))
9098

91-
event.selected = selections[event.hotkey]
99+
event.selected = selections[0x0A]
92100

93101
if isinstance(event, events.SelectionEvent):
102+
if replay.opt.debug:
103+
self.logger.debug("Event bytes: "+event.bytes.encode("hex"))
104+
94105
selections = event.player.selections[event.frame]
95106
selections[0x0A].deselect(*event.deselect)
96107
selections[0x0A].select(event.objects)
97108

98109
event.selected = selections[0x0A]
99-
self.logger.info("[{0}] {1} selected: {2}".format(utils.Length(seconds=event.second),event.player.name,event.selected))
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))

0 commit comments

Comments
 (0)