class GunMarkersSetInfo(object): clientMarkerDataProvider = aih_global_binding.bindRO(_BINDING_ID.CLIENT_GUN_MARKER_DATA_PROVIDER) clientSPGMarkerDataProvider = aih_global_binding.bindRO(_BINDING_ID.CLIENT_SPG_GUN_MARKER_DATA_PROVIDER) serverMarkerDataProvider = aih_global_binding.bindRO(_BINDING_ID.SERVER_GUN_MARKER_DATA_PROVIDER) serverSPGMarkerDataProvider = aih_global_binding.bindRO(_BINDING_ID.SERVER_SPG_GUN_MARKER_DATA_PROVIDER) __gunMarkersFlags = aih_global_binding.bindRO(_BINDING_ID.GUN_MARKERS_FLAGS) @property def isClientMarkerActivated(self): return self.__isFlagActivated(_MARKER_FLAG.CLIENT_MODE_ENABLED) @property def isServerMarkerActivated(self): return self.__isFlagActivated(_MARKER_FLAG.SERVER_MODE_ENABLED) @property def isEnabledInVideoMode(self): return self.__isFlagActivated(_MARKER_FLAG.VIDEO_MODE_ENABLED) @property def isArtyHitActivated(self): return self.__isFlagActivated(_MARKER_FLAG.ARTY_HIT_ENABLED) def __isFlagActivated(self, flag): return self.__gunMarkersFlags & _MARKER_FLAG.CONTROL_ENABLED > 0 and self.__gunMarkersFlags & flag > 0
class RespawnDeathMode(IControlMode): isEnabled = property(lambda self: self.__isEnabled) curVehicleID = property(lambda self: self.__curVehicleID) aimingMode = property(lambda self: self._aimingMode) guiSessionProvider = dependency.descriptor(IBattleSessionProvider) __aimOffset = aih_global_binding.bindRO( aih_global_binding.BINDING_ID.AIM_OFFSET) def __init__(self, dataSection, avatarInputHandler): self.__aih = weakref.proxy(avatarInputHandler) self.__cam = ArcadeCamera(dataSection['camera'], dataSection.readVector2('defaultOffset')) self.__isEnabled = False self.__curVehicleID = None self._aimingMode = 0 return def create(self): self.__cam.create(None, True) return def destroy(self): self.disable() self.__cam.destroy() self.__cam = None return def enable(self, **args): BattleReplay.g_replayCtrl.onRespawnMode(True) SoundGroups.g_instance.changePlayMode(0) self.__cam.enable(None, False, args.get('postmortemParams')) self.__cam.reinitMatrix() player = BigWorld.player() self.__curVehicleID = player.playerVehicleID ctrl = self.guiSessionProvider.dynamic.respawn if hasattr(ctrl, 'showUiAllowed'): ctrl.showUiAllowed = True self.__isEnabled = True return def disable(self): self.__isEnabled = False self.__cam.disable() ctrl = self.guiSessionProvider.dynamic.respawn if hasattr(ctrl, 'showUiAllowed'): ctrl.showUiAllowed = False BattleReplay.g_replayCtrl.onRespawnMode(False) def handleMouseEvent(self, dx, dy, dz): GUI.mcursor().position = self.__aimOffset self.__cam.update(dx, dy, clamp(-1.0, 1.0, dz)) return True
class ControlModePlugin(MarkerPlugin): _aimOffset = aih_global_binding.bindRO( aih_global_binding.BINDING_ID.AIM_OFFSET) def start(self): aih_global_binding.subscribe(BINDING_ID.AIM_OFFSET, self.__onAimOffsetChanged) self.__onAimOffsetChanged(self._aimOffset) def stop(self): aih_global_binding.unsubscribe(BINDING_ID.AIM_OFFSET, self.__onAimOffsetChanged) def __onAimOffsetChanged(self, offset): self._parentObj.setActiveCameraAimOffset(offset)
class FalloutDeathMode(IControlMode): curVehicleID = property(lambda self: self.__curVehicleID) aimingMode = property(lambda self: self._aimingMode) __aimOffset = aih_global_binding.bindRO( aih_global_binding.BINDING_ID.AIM_OFFSET) def __init__(self, dataSection, avatarInputHandler): self.__aih = weakref.proxy(avatarInputHandler) self.__cam = ArcadeCamera(dataSection['camera'], dataSection.readVector2('defaultOffset')) self.__isEnabled = False self.__curVehicleID = None self._aimingMode = 0 return def create(self): self.__cam.create(_ARCADE_CAM_PIVOT_POS, None, True) return def destroy(self): self.disable() self.__cam.destroy() self.__cam = None return def enable(self, **args): SoundGroups.g_instance.changePlayMode(0) self.__cam.enable(None, False, args.get('postmortemParams')) player = BigWorld.player() self.__curVehicleID = player.playerVehicleID self.__isEnabled = True return def disable(self): self.__isEnabled = False self.__cam.disable() def handleMouseEvent(self, dx, dy, dz): raise self.__isEnabled or AssertionError GUI.mcursor().position = self.__aimOffset self.__cam.update(dx, dy, clamp(-1.0, 1.0, dz)) return True
class CrosshairDataProxy(IBattleController): __slots__ = ('__width', '__height', '__positionX', '__positionY', '__scale', '__viewID', '__eManager', '__isArenaStarted', '__strategicCameraID', 'onCrosshairViewChanged', 'onCrosshairOffsetChanged', 'onCrosshairSizeChanged', 'onCrosshairPositionChanged', 'onCrosshairScaleChanged', 'onCrosshairZoomFactorChanged', 'onGunMarkerStateChanged', 'onGunMarkersSetChanged', 'onStrategicCameraChanged', 'onChargeMarkerStateUpdated', 'onSPGShotsIndicatorStateChanged') settingsCore = dependency.descriptor(ISettingsCore) __spgShotsIndicatorState = aih_global_binding.bindRO(_BINDING_ID.SPG_SHOTS_INDICATOR_STATE) __ctrlMode = aih_global_binding.bindRO(_BINDING_ID.CTRL_MODE_NAME) __offset = aih_global_binding.bindRO(_BINDING_ID.AIM_OFFSET) __zoomFactor = aih_global_binding.bindRO(_BINDING_ID.ZOOM_FACTOR) def __init__(self): super(CrosshairDataProxy, self).__init__() self.__width = 0 self.__height = 0 self.__positionX = 0 self.__positionY = 0 self.__scale = 1.0 self.__viewID = CROSSHAIR_VIEW_ID.UNDEFINED self.__strategicCameraID = STRATEGIC_CAMERA_ID.UNDEFINED self.__eManager = Event.EventManager() self.onCrosshairViewChanged = Event.Event(self.__eManager) self.onCrosshairOffsetChanged = Event.Event(self.__eManager) self.onCrosshairSizeChanged = Event.Event(self.__eManager) self.onCrosshairPositionChanged = Event.Event(self.__eManager) self.onCrosshairScaleChanged = Event.Event(self.__eManager) self.onCrosshairZoomFactorChanged = Event.Event(self.__eManager) self.onGunMarkerStateChanged = Event.Event(self.__eManager) self.onChargeMarkerStateUpdated = Event.Event(self.__eManager) self.onGunMarkersSetChanged = Event.Event(self.__eManager) self.onStrategicCameraChanged = Event.Event(self.__eManager) self.onSPGShotsIndicatorStateChanged = Event.Event(self.__eManager) def getControllerID(self): return BATTLE_CTRL_ID.CROSSHAIR def startControl(self, *args): self.settingsCore.interfaceScale.onScaleChanged += self.__onScaleFactorChanged aih_global_binding.subscribe(_BINDING_ID.CTRL_MODE_NAME, self.__onAvatarControlModeChanged) aih_global_binding.subscribe(_BINDING_ID.AIM_OFFSET, self.__onAimOffsetChanged) aih_global_binding.subscribe(_BINDING_ID.CLIENT_GUN_MARKER_STATE, self.__onClientGunMarkerStateChanged) aih_global_binding.subscribe(_BINDING_ID.SERVER_GUN_MARKER_STATE, self.__onServerGunMarkerStateChanged) aih_global_binding.subscribe(_BINDING_ID.CHARGE_MARKER_STATE, self.__onChargeMarkerStateUpdated) aih_global_binding.subscribe(_BINDING_ID.ZOOM_FACTOR, self.__onZoomFactorChanged) aih_global_binding.subscribe(_BINDING_ID.STRATEGIC_CAMERA, self.__onStrategicCameraChanged) aih_global_binding.subscribe(_BINDING_ID.SPG_SHOTS_INDICATOR_STATE, self.__onSPGShotsIndicatorStateChanged) for bindingID in _GUN_MARKERS_SET_IDS: aih_global_binding.subscribe(bindingID, self.__onGunMarkersSetChanged) self.__viewID = getCrosshairViewIDByCtrlMode(self.__ctrlMode) self.__scale = round(self.settingsCore.interfaceScale.get(), 1) self.__calculateSize(notify=False) self.__calculatePosition(notify=False) def stopControl(self): self.__eManager.clear() self.settingsCore.interfaceScale.onScaleChanged -= self.__onScaleFactorChanged aih_global_binding.unsubscribe(_BINDING_ID.SPG_SHOTS_INDICATOR_STATE, self.__onSPGShotsIndicatorStateChanged) aih_global_binding.unsubscribe(_BINDING_ID.CTRL_MODE_NAME, self.__onAvatarControlModeChanged) aih_global_binding.unsubscribe(_BINDING_ID.AIM_OFFSET, self.__onAimOffsetChanged) aih_global_binding.unsubscribe(_BINDING_ID.CLIENT_GUN_MARKER_STATE, self.__onClientGunMarkerStateChanged) aih_global_binding.unsubscribe(_BINDING_ID.SERVER_GUN_MARKER_STATE, self.__onServerGunMarkerStateChanged) aih_global_binding.unsubscribe(_BINDING_ID.ZOOM_FACTOR, self.__onZoomFactorChanged) aih_global_binding.unsubscribe(_BINDING_ID.STRATEGIC_CAMERA, self.__onStrategicCameraChanged) for bindingID in _GUN_MARKERS_SET_IDS: aih_global_binding.unsubscribe(bindingID, self.__onGunMarkersSetChanged) def getViewID(self): return self.__viewID def getSize(self): return (self.__width, self.__height) def getPosition(self): return (self.__positionX, self.__positionY) def getScaledPosition(self): if self.__scale > 1.0: posX = int(self.__positionX / self.__scale) posY = int(self.__positionY / self.__scale) else: posX = int(self.__positionX) posY = int(self.__positionY) return (posX, posY) def getDisaredPosition(self): if self.__ctrlMode == _CTRL_MODE.ARTY: if self.__scale > 1.0: posX = int(0.5 * self.__width / self.__scale) posY = int(0.5 * self.__height / self.__scale) else: posX = int(0.5 * self.__width) posY = int(0.5 * self.__height) return (posX, posY) return self.getScaledPosition() def getScaleFactor(self): return self.__scale def getOffset(self): return (self.__offset.x, self.__offset.y) def getZoomFactor(self): return self.__zoomFactor def getStrategicCameraID(self): return self.__strategicCameraID @staticmethod def getGunMarkersSetInfo(): return GunMarkersSetInfo() def getSPGShotsIndicatorState(self): return self.__spgShotsIndicatorState def __calculateSize(self, notify=True): width, height = GUI.screenResolution()[:2] if self.__width != width or self.__height != height: self.__width = width self.__height = height if notify: self.onCrosshairSizeChanged(self.__width, self.__height) def __calculatePosition(self, notify=True): posX = int(0.5 * self.__width * (1.0 + self.__offset.x)) posY = int(0.5 * self.__height * (1.0 - self.__offset.y)) if self.__positionX != posX or self.__positionY != posY: self.__positionX = posX self.__positionY = posY if notify: self.onCrosshairPositionChanged(posX, posY) def __setGunMarkerState(self, markerType, value): position, direction, collision = value self.onGunMarkerStateChanged(markerType, position, direction, collision) def __onAvatarControlModeChanged(self, ctrlMode): viewID = getCrosshairViewIDByCtrlMode(ctrlMode) if self.__viewID != viewID: self.__viewID = viewID self.onCrosshairViewChanged(viewID) def __onAimOffsetChanged(self, offset): self.onCrosshairOffsetChanged(offset.x, offset.y) self.__calculatePosition() def __onScaleFactorChanged(self, scale): scale = round(scale, 1) if self.__scale != scale: self.__scale = scale self.onCrosshairScaleChanged(scale) self.__calculateSize() self.__calculatePosition() def __onClientGunMarkerStateChanged(self, value): self.__setGunMarkerState(_MARKER_TYPE.CLIENT, value) def __onServerGunMarkerStateChanged(self, value): self.__setGunMarkerState(_MARKER_TYPE.SERVER, value) def __onChargeMarkerStateUpdated(self, value): self.onChargeMarkerStateUpdated(value) def __onZoomFactorChanged(self, zoomFactor): self.onCrosshairZoomFactorChanged(zoomFactor) def __onGunMarkersSetChanged(self, _): self.onGunMarkersSetChanged(self.getGunMarkersSetInfo()) def __onSPGShotsIndicatorStateChanged(self, value): self.onSPGShotsIndicatorStateChanged(value) def __onStrategicCameraChanged(self, camera): if camera in _STRATEGIC_CAMERA_TO_ID: cameraID = _STRATEGIC_CAMERA_TO_ID[camera] else: cameraID = STRATEGIC_CAMERA_ID.UNDEFINED if self.__strategicCameraID != cameraID: self.__strategicCameraID = cameraID self.onStrategicCameraChanged(cameraID)
class CrosshairDataProxy(IBattleController): """This class is proxy of descriptors from aim_global_binding. It listens changes of descriptors, calculates/converts to required values or just transferred values via event.""" __slots__ = ('__width', '__height', '__positionX', '__positionY', '__scale', '__viewID', '__eManager', '__isArenaStarted', '__strategicCameraID', 'onCrosshairViewChanged', 'onCrosshairOffsetChanged', 'onCrosshairSizeChanged', 'onCrosshairPositionChanged', 'onCrosshairScaleChanged', 'onCrosshairZoomFactorChanged', 'onGunMarkerStateChanged', 'onGunMarkersSetChanged', 'onStrategicCameraChanged') settingsCore = dependency.descriptor(ISettingsCore) __ctrlMode = aih_global_binding.bindRO(_BINDING_ID.CTRL_MODE_NAME) __offset = aih_global_binding.bindRO(_BINDING_ID.AIM_OFFSET) __zoomFactor = aih_global_binding.bindRO(_BINDING_ID.ZOOM_FACTOR) def __init__(self): super(CrosshairDataProxy, self).__init__() self.__width = 0 self.__height = 0 self.__positionX = 0 self.__positionY = 0 self.__scale = 1.0 self.__viewID = CROSSHAIR_VIEW_ID.UNDEFINED self.__strategicCameraID = STRATEGIC_CAMERA_ID.UNDEFINED self.__eManager = Event.EventManager() self.onCrosshairViewChanged = Event.Event(self.__eManager) self.onCrosshairOffsetChanged = Event.Event(self.__eManager) self.onCrosshairSizeChanged = Event.Event(self.__eManager) self.onCrosshairPositionChanged = Event.Event(self.__eManager) self.onCrosshairScaleChanged = Event.Event(self.__eManager) self.onCrosshairZoomFactorChanged = Event.Event(self.__eManager) self.onGunMarkerStateChanged = Event.Event(self.__eManager) self.onGunMarkersSetChanged = Event.Event(self.__eManager) self.onStrategicCameraChanged = Event.Event(self.__eManager) def getControllerID(self): """Gets unique ID of controller. :return: integer containing value of BATTLE_CTRL_ID.CROSSHAIR. """ return BATTLE_CTRL_ID.CROSSHAIR def startControl(self, *args): """ Starts to control.""" self.settingsCore.interfaceScale.onScaleChanged += self.__onScaleFactorChanged aih_global_binding.subscribe(_BINDING_ID.CTRL_MODE_NAME, self.__onAvatarControlModeChanged) aih_global_binding.subscribe(_BINDING_ID.AIM_OFFSET, self.__onAimOffsetChanged) aih_global_binding.subscribe(_BINDING_ID.CLIENT_GUN_MARKER_STATE, self.__onClientGunMarkerStateChanged) aih_global_binding.subscribe(_BINDING_ID.SERVER_GUN_MARKER_STATE, self.__onServerGunMarkerStateChanged) aih_global_binding.subscribe(_BINDING_ID.ZOOM_FACTOR, self.__onZoomFactorChanged) aih_global_binding.subscribe(_BINDING_ID.STRATEGIC_CAMERA, self.__onStrategicCameraChanged) for bindingID in _GUN_MARKERS_SET_IDS: aih_global_binding.subscribe(bindingID, self.__onGunMarkersSetChanged) self.__viewID = getCrosshairViewIDByCtrlMode(self.__ctrlMode) self.__scale = round(self.settingsCore.interfaceScale.get(), 1) self.__calculateSize(notify=False) self.__calculatePosition(notify=False) def stopControl(self): """ Stops to control.""" self.__eManager.clear() self.settingsCore.interfaceScale.onScaleChanged -= self.__onScaleFactorChanged aih_global_binding.unsubscribe(_BINDING_ID.CTRL_MODE_NAME, self.__onAvatarControlModeChanged) aih_global_binding.unsubscribe(_BINDING_ID.AIM_OFFSET, self.__onAimOffsetChanged) aih_global_binding.unsubscribe(_BINDING_ID.CLIENT_GUN_MARKER_STATE, self.__onClientGunMarkerStateChanged) aih_global_binding.unsubscribe(_BINDING_ID.SERVER_GUN_MARKER_STATE, self.__onServerGunMarkerStateChanged) aih_global_binding.unsubscribe(_BINDING_ID.ZOOM_FACTOR, self.__onZoomFactorChanged) aih_global_binding.unsubscribe(_BINDING_ID.STRATEGIC_CAMERA, self.__onStrategicCameraChanged) for bindingID in _GUN_MARKERS_SET_IDS: aih_global_binding.unsubscribe(bindingID, self.__onGunMarkersSetChanged) def getViewID(self): """Gets current unique ID of crosshair view. :return: integer containing one of CROSSHAIR_VIEW_ID. """ return self.__viewID def getSize(self): """Gets size of crosshair view. :return: tuple(width, height). """ return (self.__width, self.__height) def getPosition(self): """Gets position of crosshair view. :return: tuple(x, y). """ return (self.__positionX, self.__positionY) def getScaledPosition(self): """Gets position of crosshair view that is divided by the scale. :return: tuple(x, y). """ if self.__scale > 1.0: posX = int(self.__positionX / self.__scale) posY = int(self.__positionY / self.__scale) else: posX = int(self.__positionX) posY = int(self.__positionY) return (posX, posY) def getDisaredPosition(self): """ This method invokes 'getScaledPosition' in usual cases. Special case, when player switches on to arty mode, when camera is moved with interpolation, this method returns center of screen with scale. Because of we do not have mechanics to predict when camera will be in desired position without reducing of performance, see WOTD-83447.""" if self.__ctrlMode == _CTRL_MODE.ARTY: if self.__scale > 1.0: posX = int(0.5 * self.__width / self.__scale) posY = int(0.5 * self.__height / self.__scale) else: posX = int(0.5 * self.__width) posY = int(0.5 * self.__height) return (posX, posY) return self.getScaledPosition() def getScaleFactor(self): """Gets scale of crosshair view. :return: float containing scale factor. """ return self.__scale def getOffset(self): """Gets offset of crosshair view. :return: tuple(x, y). """ return (self.__offset.x, self.__offset.y) def getZoomFactor(self): """Gets zoom factor. :return: float containing zoom factor. """ return self.__zoomFactor def getStrategicCameraID(self): """ Gets current strategic camera id for Strategic mode @return: integer containing one of STRATEGIC_CAMERA_ID. """ return self.__strategicCameraID @staticmethod def getGunMarkersSetInfo(): return GunMarkersSetInfo() def __calculateSize(self, notify=True): width, height = GUI.screenResolution()[:2] if self.__width != width or self.__height != height: self.__width = width self.__height = height if notify: self.onCrosshairSizeChanged(self.__width, self.__height) def __calculatePosition(self, notify=True): """Calculates position of panel's center. Screen size is in pixel. Offset is in clip metric (from -1 to 1, 0 - center of screen). :param notify: bool. """ posX = int(0.5 * self.__width * (1.0 + self.__offset.x)) posY = int(0.5 * self.__height * (1.0 - self.__offset.y)) if self.__positionX != posX or self.__positionY != posY: self.__positionX = posX self.__positionY = posY if notify: self.onCrosshairPositionChanged(posX, posY) def __setGunMarkerState(self, markerType, value): raise len(value) == 3 or AssertionError position, dir, collision = value self.onGunMarkerStateChanged(markerType, position, dir, collision) def __onAvatarControlModeChanged(self, ctrlMode): viewID = getCrosshairViewIDByCtrlMode(ctrlMode) if self.__viewID != viewID: self.__viewID = viewID self.onCrosshairViewChanged(viewID) def __onAimOffsetChanged(self, offset): self.onCrosshairOffsetChanged(offset.x, offset.y) self.__calculatePosition() def __onScaleFactorChanged(self, scale): scale = round(scale, 1) if self.__scale != scale: self.__scale = scale self.onCrosshairScaleChanged(scale) self.__calculateSize() self.__calculatePosition() def __onClientGunMarkerStateChanged(self, value): self.__setGunMarkerState(_MARKER_TYPE.CLIENT, value) def __onServerGunMarkerStateChanged(self, value): self.__setGunMarkerState(_MARKER_TYPE.SERVER, value) def __onZoomFactorChanged(self, zoomFactor): self.onCrosshairZoomFactorChanged(zoomFactor) def __onGunMarkersSetChanged(self, _): self.onGunMarkersSetChanged(self.getGunMarkersSetInfo()) def __onStrategicCameraChanged(self, camera): if camera in _STRATEGIC_CAMERA_TO_ID: cameraID = _STRATEGIC_CAMERA_TO_ID[camera] else: cameraID = STRATEGIC_CAMERA_ID.UNDEFINED if self.__strategicCameraID != cameraID: self.__strategicCameraID = cameraID self.onStrategicCameraChanged(cameraID)
class BattleGameInputMgr(object): __slots__ = ('__consumers', '__keyHandlers') __ctrlModeName = aih_global_binding.bindRO(aih_global_binding.BINDING_ID.CTRL_MODE_NAME) guiSessionProvider = dependency.descriptor(IBattleSessionProvider) def __init__(self): super(BattleGameInputMgr, self).__init__() self.__consumers = [] self.__keyHandlers = [] def start(self): pass def stop(self): del self.__consumers[:] del self.__keyHandlers[:] def enterGuiControlMode(self, consumerID, cursorVisible=True, enableAiming=True): if consumerID not in self.__consumers: if not self.__consumers: avatar_getter.setForcedGuiControlMode(True, cursorVisible=cursorVisible, enableAiming=enableAiming) self.__consumers.append(consumerID) def leaveGuiControlMode(self, consumerID): if consumerID in self.__consumers: self.__consumers.remove(consumerID) if not self.__consumers: avatar_getter.setForcedGuiControlMode(False) def hasGuiControlModeConsumers(self, *consumersIDs): for consumerID in consumersIDs: if consumerID in self.__consumers: return True return False def registerGuiKeyHandler(self, handler): if not isinstance(handler, BattleGUIKeyHandler): raise SoftException('Handler should extends BattleGUIKeyHandler') if handler not in self.__keyHandlers: self.__keyHandlers.append(handler) def unregisterGuiKeyHandler(self, handler): if handler in self.__keyHandlers: self.__keyHandlers.remove(handler) def handleKey(self, isDown, key, mods): isEventBattle = self.guiSessionProvider.arenaVisitor.gui.isEventBattle() if key == Keys.KEY_ESCAPE: if self.__keyHandlers: for handler in self.__keyHandlers[:]: if handler.handleEscKey(isDown): return True if isDown and self.__ctrlModeName != CTRL_MODE_NAME.MAP_CASE: event_dispatcher.showIngameMenu() if isEventBattle: event_dispatcher.toggleEventStats(False) else: event_dispatcher.toggleFullStats(False) return True if isDown and CommandMapping.g_instance.isFired(CommandMapping.CMD_UPGRADE_PANEL_SHOW, key): event_dispatcher.hideBattleVehicleConfigurator() if key in (Keys.KEY_LCONTROL, Keys.KEY_RCONTROL): if not self.__consumers: avatar_getter.setForcedGuiControlMode(isDown, enableAiming=False) return True if key == Keys.KEY_TAB and (mods != Keys.MODIFIER_CTRL or not isDown): if isEventBattle: event_dispatcher.toggleEventStats(isDown) else: event_dispatcher.hideBattleVehicleConfigurator() event_dispatcher.toggleFullStats(isDown) return True if key == Keys.KEY_TAB and mods == Keys.MODIFIER_CTRL and isDown: if not self.__consumers: event_dispatcher.setNextPlayerPanelMode() return True return False
class BattleGameInputMgr(object): __slots__ = ('__consumers', '__keyHandlers') __ctrlModeName = aih_global_binding.bindRO( aih_global_binding.BINDING_ID.CTRL_MODE_NAME) def __init__(self): super(BattleGameInputMgr, self).__init__() self.__consumers = [] self.__keyHandlers = [] def start(self): pass def stop(self): del self.__consumers[:] del self.__keyHandlers[:] def enterGuiControlMode(self, consumerID, cursorVisible=True, enableAiming=True): if consumerID not in self.__consumers: if not self.__consumers: avatar_getter.setForcedGuiControlMode( True, cursorVisible=cursorVisible, enableAiming=enableAiming) self.__consumers.append(consumerID) def leaveGuiControlMode(self, consumerID): if consumerID in self.__consumers: self.__consumers.remove(consumerID) if not self.__consumers: avatar_getter.setForcedGuiControlMode(False) def hasGuiControlModeConsumers(self, *consumersIDs): for consumerID in consumersIDs: if consumerID in self.__consumers: return True return False def registerGuiKeyHandler(self, handler): if not isinstance(handler, BattleGUIKeyHandler): raise AssertionError handler not in self.__keyHandlers and self.__keyHandlers.append( handler) def unregisterGuiKeyHandler(self, handler): if handler in self.__keyHandlers: self.__keyHandlers.remove(handler) def handleKey(self, isDown, key, mods): if key == Keys.KEY_ESCAPE: if self.__keyHandlers: for handler in self.__keyHandlers[:]: if handler.handleEscKey(isDown): return True if isDown and self.__ctrlModeName != CTRL_MODE_NAME.MAP_CASE: event_dispatcher.showIngameMenu() event_dispatcher.toggleFullStats(False) return True if key in (Keys.KEY_LCONTROL, Keys.KEY_RCONTROL): if not self.__consumers: avatar_getter.setForcedGuiControlMode(isDown) return True if key == Keys.KEY_TAB and (mods != Keys.MODIFIER_CTRL or not isDown): event_dispatcher.toggleFullStats(isDown) return True if key == Keys.KEY_TAB and mods == Keys.MODIFIER_CTRL and isDown: if not self.__consumers: event_dispatcher.setNextPlayerPanelMode() return True return False
CLIENT_SPG_GUN_MARKER_FOCUS_DATA_PROVIDER, SERVER_GUN_MARKER_FOCUS_DATA_PROVIDER, SERVER_SPG_GUN_MARKER_FOCUS_DATA_PROVIDER) # gun_marker_ctrl _GunMarkersDPFactory._clientFocusDataProvider = aih_global_binding.bindRW( CLIENT_GUN_MARKER_FOCUS_DATA_PROVIDER) _GunMarkersDPFactory._serverFocusDataProvider = aih_global_binding.bindRW( SERVER_GUN_MARKER_FOCUS_DATA_PROVIDER) _GunMarkersDPFactory._clientSPGFocusDataProvider = aih_global_binding.bindRW( CLIENT_SPG_GUN_MARKER_FOCUS_DATA_PROVIDER) _GunMarkersDPFactory._serverSPGFocusDataProvider = aih_global_binding.bindRW( SERVER_SPG_GUN_MARKER_FOCUS_DATA_PROVIDER) # crosshair_proxy GunMarkersSetInfo.clientMarkerFocusDataProvider = aih_global_binding.bindRO( CLIENT_GUN_MARKER_FOCUS_DATA_PROVIDER) GunMarkersSetInfo.clientSPGMarkerFocusDataProvider = aih_global_binding.bindRO( CLIENT_SPG_GUN_MARKER_FOCUS_DATA_PROVIDER) GunMarkersSetInfo.serverMarkerFocusDataProvider = aih_global_binding.bindRO( SERVER_GUN_MARKER_FOCUS_DATA_PROVIDER) GunMarkersSetInfo.serverSPGMarkerFocusDataProvider = aih_global_binding.bindRO( SERVER_SPG_GUN_MARKER_FOCUS_DATA_PROVIDER) # gun_marker_ctrl @addMethodTo(_GunMarkersDPFactory) def getClientFocusProvider(self): if self._clientFocusDataProvider is None: self._clientFocusDataProvider = self._makeDefaultProvider() return self._clientFocusDataProvider