def handleTraversalKeys(self, event): if not event.isKeyDown(): return False elif event.key in [Keys.KEY_JOYDDOWN, Keys.KEY_DOWNARROW, Keys.KEY_S]: if len(self.items.children) == 0: return True oidx = None idx = self.selection while idx != oidx: if oidx == None: oidx = idx idx += 1 if idx >= len(self.items.children): idx = 0 if self.canSelect(idx): self.selectItem(idx) break BigWorld.playSound('ui/tick') return True elif event.key in [Keys.KEY_JOYDUP, Keys.KEY_UPARROW, Keys.KEY_W]: if len(self.items.children) == 0: return 1 oidx = None idx = self.selection while idx != oidx: if oidx == None: oidx = idx idx -= 1 if idx < 0: idx = len(self.items.children) - 1 if self.canSelect(idx): self.selectItem(idx) break BigWorld.playSound('ui/tick') return True else: if event.key == Keys.KEY_PGUP: dist = self.maxVisibleItems if self.selection - dist < 0: dist = self.selection self.moveSelection(-dist) elif event.key == Keys.KEY_PGDN: dist = self.maxVisibleItems if self.selection + dist >= len(self.items.children): dist = len(self.items.children) - self.selection - 1 self.moveSelection(dist) elif event.key == Keys.KEY_HOME: self.selectItem(0) elif event.key == Keys.KEY_END: self.selectItem(len(self.items.children) - 1) return False
def handleKeyEvent(self, event): c = self.component key = event.key if event.isKeyDown(): if key == Keys.KEY_JOYDUP or key == Keys.KEY_UPARROW: x, y = c.scroll y += 0.1 c.scroll = (x, y) BigWorld.playSound('ui/tick') return True if key == Keys.KEY_JOYDDOWN or key == Keys.KEY_DOWNARROW: x, y = c.scroll y -= 0.1 c.scroll = (x, y) BigWorld.playSound('ui/tick') return True if key == Keys.KEY_JOYDRIGHT or key == Keys.KEY_RIGHTARROW: x, y = c.scroll x += 0.1 c.scroll = (x, y) BigWorld.playSound('ui/tick') return True if key == Keys.KEY_JOYDLEFT or key == Keys.KEY_LEFTARROW: x, y = c.scroll x -= 0.1 c.scroll = (x, y) BigWorld.playSound('ui/tick') return True return False
def play(self, eventName, vehicleIdToBind = None): replayCtrl = BattleReplay.g_replayCtrl if replayCtrl.isPlaying and replayCtrl.isTimeWarpInProgress: return elif not self.__isEnabled or BigWorld.isWindowVisible() == False: return else: event = self.__events.get(eventName, None) if event is None: LOG_WARNING("Couldn't find %s event" % eventName) return queues = self.__soundQueues enabledCategories = self.__enabledSoundCategories time = BigWorld.time() for category, soundDesc in event.iteritems(): if category in enabledCategories and soundDesc['sound'] != '': rules = soundDesc['playRules'] idToBind = vehicleIdToBind if idToBind is None and soundDesc['shouldBindToPlayer']: if BigWorld.player().vehicle is not None: idToBind = BigWorld.player().vehicle.id soundPath = soundDesc['sound'] minTimeBetweenEvents = soundDesc['minTimeBetweenEvents'] queueItem = (soundPath, time + soundDesc['timeout'], minTimeBetweenEvents, idToBind) if rules == 0: try: BigWorld.playSound(soundDesc['sound']) except: pass continue else: lastEnqueuedTime = self.__lastEnqueuedTime.get(soundPath) if lastEnqueuedTime is not None and time - lastEnqueuedTime < minTimeBetweenEvents: continue self.__lastEnqueuedTime[soundPath] = time if rules == 1: self.__clearQueue(category) queues[category].append(queueItem) elif rules == 2: queues[category].insert(0, queueItem) elif rules == 3: queues[category].append(queueItem) if self.__activeEvents[category] is None: self.__playFirstFromQueue(category) return
def play(self, eventName, vehicleIdToBind=None): replayCtrl = BattleReplay.g_replayCtrl if replayCtrl.isPlaying and replayCtrl.isTimeWarpInProgress: return elif not self.__isEnabled or BigWorld.isWindowVisible() == False: return else: event = self.__events.get(eventName, None) if event is None: LOG_WARNING("Couldn't find %s event" % eventName) return queues = self.__soundQueues enabledCategories = self.__enabledSoundCategories time = BigWorld.time() for category, soundDesc in event.iteritems(): if category in enabledCategories and soundDesc['sound'] != '': rules = soundDesc['playRules'] idToBind = vehicleIdToBind if idToBind is None and soundDesc['shouldBindToPlayer']: if BigWorld.player().vehicle is not None: idToBind = BigWorld.player().vehicle.id soundPath = soundDesc['sound'] minTimeBetweenEvents = soundDesc['minTimeBetweenEvents'] queueItem = (soundPath, time + soundDesc['timeout'], minTimeBetweenEvents, idToBind) if rules == 0: try: BigWorld.playSound(soundDesc['sound']) except: pass continue else: lastEnqueuedTime = self.__lastEnqueuedTime.get( soundPath) if lastEnqueuedTime is not None and time - lastEnqueuedTime < minTimeBetweenEvents: continue self.__lastEnqueuedTime[soundPath] = time if rules == 1: self.__clearQueue(category) queues[category].append(queueItem) elif rules == 2: queues[category].insert(0, queueItem) elif rules == 3: queues[category].append(queueItem) if self.__activeEvents[category] is None: self.__playFirstFromQueue(category) return
def handleKeyEvent(self, event): handled = ScrollWindow.handleKeyEvent(self, event) if not handled and down: if event.key == Keys.KEY_JOYALPUSH: if self.zoomFactor > 1: c = self.component.children[0][1] c.width = c.width / 2 c.height = c.height / 2 self.updateScrollLimits() self.zoomFactor = self.zoomFactor - 1 BigWorld.playSound('ui/boop') return True if event.key in [Keys.KEY_JOYARPUSH, Keys.KEY_MIDDLEMOUSE]: c = self.component.children[0][1] c.width = c.width * 2 c.height = c.height * 2 self.updateScrollLimits() self.zoomFactor = self.zoomFactor + 1 BigWorld.playSound('ui/boop') return True return False
def handleKeyEvent(self, event): key = event.key if event.isKeyDown(): if self.handleTraversalKeys(event): return True if key == [Keys.KEY_JOYA] or key == Keys.KEY_RETURN and not BigWorld.isKeyDown(Keys.KEY_LALT) and not BigWorld.isKeyDown(Keys.KEY_RALT): if len(self.items.children) == 0: return True BigWorld.sinkKeyEvents(Keys.KEY_RETURN) self.executeSelected() return 1 if key in [Keys.KEY_JOYB, Keys.KEY_JOYBACK, Keys.KEY_ESCAPE, Keys.KEY_BACKSPACE]: if self.backFn != None: self.active(0) BigWorld.playSound('ui/boop') self.backFn() return 1 return False
def __playFirstFromQueue(self, category): if not self.__isEnabled: return else: queue = self.__soundQueues[category] succes = False time = BigWorld.time() while not succes and len(queue) > 0: soundPath, timeout, minTimeBetweenEvents, vehicleIdToBind = queue[ 0] del queue[0] if vehicleIdToBind is not None: vehicles = BigWorld.player().arena.vehicles vehicleInfo = vehicles.get(vehicleIdToBind) if vehicleInfo is None or not vehicleInfo['isAlive']: continue if time > timeout: continue succes = True try: sound = BigWorld.playSound(soundPath) if sound is None: succes = False except: succes = False if not succes: LOG_ERROR('Failed to load sound %s' % soundPath) if succes: if sound.duration == 0: LOG_WARNING( 'Sound notification %s has zero duration and was skipped' % soundPath) BigWorld.callback( 0.01, partial(self.__playFirstFromQueue, category)) else: sound.setCallback('EVENTFINISHED', partial(self.__onSoundEnd, category)) self.__activeEvents[category] = { 'sound': sound, 'soundPath': soundPath } return
def __playFirstFromQueue(self, category): if not self.__isEnabled: return else: queue = self.__soundQueues[category] succes = False time = BigWorld.time() while not succes and len(queue) > 0: soundPath, timeout, minTimeBetweenEvents, vehicleIdToBind = queue[0] del queue[0] if vehicleIdToBind is not None: vehicles = BigWorld.player().arena.vehicles vehicleInfo = vehicles.get(vehicleIdToBind) if vehicleInfo is None or not vehicleInfo['isAlive']: continue if time > timeout: continue succes = True try: sound = BigWorld.playSound(soundPath) if sound is None: succes = False except: succes = False if not succes: LOG_ERROR('Failed to load sound %s' % soundPath) if succes: if sound.duration == 0: LOG_WARNING('Sound notification %s has zero duration and was skipped' % soundPath) BigWorld.callback(0.01, partial(self.__playFirstFromQueue, category)) else: sound.setCallback('EVENTFINISHED', partial(self.__onSoundEnd, category)) self.__activeEvents[category] = {'sound': sound, 'soundPath': soundPath} return
def executeSelected(self, playSound = True): BigWorld.playSound('ui/boop') entry = self.items.children[self.selection][1] i = entry.script.onSelect(self) self.updateControlBar()
def executeSelected(self, playSound=True): BigWorld.playSound('ui/boop') entry = self.items.children[self.selection][1] i = entry.script.onSelect(self) self.updateControlBar()