@@ -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