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
Пример #2
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)
Пример #4
0
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)
Пример #6
0
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)
Пример #7
0
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
Пример #8
0
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
Пример #9
0
                         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