22
33from sc2reader .listeners .utils import ListenerBase
44
5+ import sc2reader
56from sc2reader import events
67from sc2reader import utils
7-
8+ from sc2reader import log_utils
89
910class GameState (dict ):
1011 def __init__ (self , initial_state ):
@@ -22,6 +23,7 @@ def __getitem__(self, frame):
2223
2324class 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