def __updateAim(self):
     if self.getPlaybackSpeedIdx() == 0:
         player = BigWorld.player()
         if isPlayerAvatar():
             if player.inputHandler.aim is not None:
                 player.inputHandler.aim._update()
             BigWorld.callback(0, self.__updateAim)
    def applySettings(self):
        yield self._updateToVersion()
        enableBattleReplay = self._core.options.getSetting(self.GAME.REPLAY_ENABLED)
        enableBattleReplayValue = enableBattleReplay.get()
        from BattleReplay import g_replayCtrl
        g_replayCtrl.enableAutoRecordingBattles(enableBattleReplayValue)
        enablePostMortem = self._core.options.getSetting(self.GAME.ENABLE_POSTMORTEM)
        enablePostMortemValue = enablePostMortem.get()
        from post_processing import g_postProcessing
        g_postProcessing.setSetting('mortem_post_effect', enablePostMortemValue)
        g_postProcessing.refresh()
        enableDynamicCamera = self._core.options.getSetting(self.GAME.DYNAMIC_CAMERA)
        enableDynamicCameraValue = enableDynamicCamera.get()
        enableSniperStabilization = self._core.options.getSetting(self.GAME.SNIPER_MODE_STABILIZATION)
        enableSniperStabilizationValue = enableSniperStabilization.get()
        from AvatarInputHandler import AvatarInputHandler
        AvatarInputHandler.enableDynamicCamera(enableDynamicCameraValue, enableSniperStabilizationValue)
        from messenger.doc_loaders import user_prefs
        from messenger import g_settings as messenger_settings
        user_prefs.loadFromServer(messenger_settings)
        masks = self.SECTIONS[SETTINGS_SECTIONS.GRAPHICS].masks
        offsets = self.SECTIONS[SETTINGS_SECTIONS.GRAPHICS].offsets
        graphicSettingNames = masks.keys() + offsets.keys()
        for setting in graphicSettingNames:
            settingOption = self._core.options.getSetting(setting)
            settingValue = settingOption.get()
            settingOption.setSystemValue(settingValue)

        alternativeVoices = self._core.options.getSetting(self.SOUND.ALT_VOICES)
        alternativeVoicesValue = alternativeVoices.get()
        alternativeVoices.setSystemValue(alternativeVoicesValue)
        self._core.options.getSetting('keyboard').setSystemValue()
        if isPlayerAvatar():
            BigWorld.player().invRotationOnBackMovement = self._core.getSetting('backDraftInvert')
예제 #3
0
 def __isTargetCorrect(self, player):
     import Vehicle
     if self.__currentTarget is not None:
         if isinstance(self.__currentTarget, Vehicle.Vehicle):
             if self.__currentTarget.isAlive():
                 return player is not None and isPlayerAvatar() and True
     return False
예제 #4
0
    def update(self):
        self.__cbID = BigWorld.callback(self.UPDATE_PERIOD, self.update)
        if not self.isActive:
            return
        player = BigWorld.player()
        if not isPlayerAvatar():
            return
        camPos = BigWorld.camera().position
        camDir = BigWorld.camera().direction
        vehicle = BigWorld.entities.get(player.playerVehicleID)
        try:
            for type, (isTwoState, args) in self.__pendingManualTriggers.iteritems():
                params = dict(args)
                params['type'] = type
                for listener in self.__listeners:
                    listener.onTriggerActivated(params)

                if isTwoState:
                    self.__activeManualTriggers[type] = params

            self.__pendingManualTriggers = {}
            for id, params in self.__autoTriggers.iteritems():
                wasActive = id in self.__activeAutoTriggers
                isActive = False
                distance = -1.0
                type = params['type']
                if type == TRIGGER_TYPE.AREA and vehicle is not None:
                    triggerRadius = params['radius']
                    if wasActive:
                        triggerRadius = triggerRadius + params['exitInterval']
                    offset = vehicle.position - Math.Vector3(params['position'])
                    offset.y = 0
                    distance = offset.length
                    isActive = distance < triggerRadius
                if type == TRIGGER_TYPE.AIM:
                    camToTrigger = Math.Vector3(params['position']) - camPos
                    vehicleToTrigger = Math.Vector3(params['position']) - vehicle.position
                    distance = camToTrigger.length
                    if distance <= params['maxDistance'] and vehicleToTrigger.dot(camToTrigger) > 0.0:
                        camToTrigger.normalise()
                        dp = camToTrigger.dot(camDir)
                        if dp > 0.0:
                            sinAngle = math.sqrt(1.0 - dp * dp)
                            isActive = sinAngle * distance < params['radius']
                params['distance'] = distance
                if wasActive != isActive:
                    if isActive:
                        self.__activeAutoTriggers.add(id)
                        for listener in self.__listeners:
                            listener.onTriggerActivated(params)

                    else:
                        self.__activeAutoTriggers.discard(id)
                        for listener in self.__listeners:
                            listener.onTriggerDeactivated(params)

            self.__explodePoints = []
            self.__shotPoints = []
        except:
            LOG_CURRENT_EXCEPTION()
예제 #5
0
 def disable(self):
     self.stopCallback(self.__update)
     BigWorld.projection().fov = self.__defaultFov
     BigWorld.camera(None)
     self.__alignerToLand.disable()
     if isPlayerAvatar():
         BigWorld.player().positionControl.followCamera(False)
     self.__showAim(False)
예제 #6
0
 def __isTargetCorrect(self, player):
     import Vehicle
     if self.__currentTarget is not None and isinstance(self.__currentTarget, Vehicle.Vehicle):
         if self.__currentTarget.isAlive():
             if player is not None and isPlayerAvatar():
                 vInfo = g_sessionProvider.getArenaDP().getVehicleInfo(self.__currentTarget.id)
                 return not vInfo.isActionsDisabled()
     return False
예제 #7
0
 def __toggleView(self):
     if not isPlayerAvatar():
         return
     self.__isModeOverride = not self.__isModeOverride
     if self.__isModeOverride:
         gui_event_dispatcher.overrideCrosshairView(CTRL_MODE_NAME.POSTMORTEM)
     else:
         gui_event_dispatcher.overrideCrosshairView(CTRL_MODE_NAME.VIDEO)
예제 #8
0
 def getPlayerDBID(self):
     p = BigWorld.player()
     if isPlayerAccount():
         return p.databaseID
     elif isPlayerAvatar() and hasattr(p, 'playerVehicleID'):
         return p.arena.vehicles[p.playerVehicleID].get('accountDBID', None)
     else:
         return None
예제 #9
0
 def cursorVisibility(self, callbackId, visible, x = None, y = None, customCall = False, enableAiming = True):
     if visible:
         g_cursorDelegator.syncMousePosition(self, x, y, customCall)
     else:
         g_cursorDelegator.restoreMousePosition()
     if BigWorld.player() is not None and isPlayerAvatar():
         BigWorld.player().setForcedGuiControlMode(visible, False, enableAiming)
     return
 def onControlModeChanged(self, forceControlMode = None):
     player = BigWorld.player()
     if not self.isPlaying or not isPlayerAvatar():
         return
     if not self.isControllingCamera and forceControlMode is None:
         return
     controlMode = self.getControlMode() if forceControlMode is None else forceControlMode
     player.inputHandler.onControlModeChanged(controlMode, camMatrix=BigWorld.camera().matrix, preferredPos=self.getGunRotatorTargetPoint(), saveZoom=False, saveDist=False)
 def onAmmoButtonPressed(self, idx):
     player = BigWorld.player()
     if not isPlayerAvatar():
         return
     if self.isPlaying:
         player.onAmmoButtonPressed(idx)
     elif self.isRecording:
         self.__replayCtrl.onAmmoButtonPressed(idx)
 def onMinimapCellClicked(self, cellIdx):
     player = BigWorld.player()
     if not isPlayerAvatar():
         return
     if self.isRecording:
         self.__replayCtrl.onMinimapCellClicked(cellIdx)
     elif self.isPlaying:
         self.guiWindowManager.battleWindow.minimap.markCell(cellIdx, 3.0)
예제 #13
0
 def onClientReady(self):
     if not (self.isPlaying or self.isRecording):
         return
     elif self.isRecording and BigWorld.player().arena.guiType == constants.ARENA_GUI_TYPE.TUTORIAL:
         self.stop(None, True)
         return
     else:
         self.__replayCtrl.playerVehicleID = BigWorld.player().playerVehicleID
         self.__replayCtrl.onClientReady()
         if self.isPlaying:
             AreaDestructibles.g_destructiblesManager.onAfterReplayTimeWarp()
             if isPlayerAvatar():
                 BigWorld.player().onVehicleEnterWorld += self.__onVehicleEnterWorld
         if self.isRecording:
             player = BigWorld.player()
             arena = player.arena
             arenaName = arena.arenaType.geometry
             i = arenaName.find('/')
             if i != -1:
                 arenaName = arenaName[i + 1:]
             now = datetime.datetime.now()
             now = '%02d.%02d.%04d %02d:%02d:%02d' % (now.day,
              now.month,
              now.year,
              now.hour,
              now.minute,
              now.second)
             vehicleName = BigWorld.entities[player.playerVehicleID].typeDescriptor.name
             vehicleName = vehicleName.replace(':', '-')
             vehicles = self.__getArenaVehiclesInfo()
             gameplayID = player.arenaTypeID >> 16
             clientVersionFromXml = getFullClientVersion()
             clientVersionFromExe = BigWorld.wg_getProductVersion()
             arenaInfo = {'dateTime': now,
              'playerName': player.name,
              'playerID': self.__playerDatabaseID,
              'playerVehicle': vehicleName,
              'mapName': arenaName,
              'mapDisplayName': arena.arenaType.name,
              'gameplayID': ArenaType.getGameplayName(gameplayID) or gameplayID,
              'vehicles': vehicles,
              'battleType': arena.bonusType,
              'clientVersionFromExe': clientVersionFromExe,
              'clientVersionFromXml': clientVersionFromXml,
              'serverName': connectionManager.serverUserName,
              'regionCode': constants.AUTH_REALM,
              'serverSettings': self.__serverSettings}
             self.__replayCtrl.recMapName = arenaName
             self.__replayCtrl.recPlayerVehicleName = vehicleName
             self.__replayCtrl.setArenaInfoStr(json.dumps(arenaInfo))
         else:
             self.__showInfoMessage('replayControlsHelp1')
             self.__showInfoMessage('replayControlsHelp2')
             self.__showInfoMessage('replayControlsHelp3')
             if self.replayTimeout > 0:
                 LOG_DEBUG('replayTimeout set for %.2f' % float(self.replayTimeout))
                 BigWorld.callback(float(self.replayTimeout), BigWorld.quit)
         return
예제 #14
0
 def __checkSpaceBounds(self, startPos, endPos):
     if not isPlayerAvatar():
         return endPos
     moveDir = endPos - startPos
     moveDir.normalise()
     collisionPointWithBorders = BigWorld.player().arena.collideWithSpaceBB(startPos - moveDir, endPos + moveDir)
     if collisionPointWithBorders is not None:
         return collisionPointWithBorders
     return endPos
예제 #15
0
 def handleMouseEvent(self, dx, dy, dz):
     if self.isPlaying:
         if not self.isClientReady:
             return False
         player = BigWorld.player()
         if not isPlayerAvatar():
             return False
         if self.isControllingCamera:
             return dz != 0 and True
     return False
예제 #16
0
 def __showAim(self, show):
     if not isPlayerAvatar():
         return
     if self.__aim is None:
         self.__aim = createAim('postmortem')
         self.__aim.create()
     if show:
         self.__aim.enable()
     else:
         self.__aim.disable()
예제 #17
0
 def __isTargetCorrect(self, player, target):
     import Vehicle
     from gui.battle_control import g_sessionProvider
     from helpers import isPlayerAvatar
     if target is not None and isinstance(target, Vehicle.Vehicle):
         if target.isAlive():
             if player is not None and isPlayerAvatar():
                 vInfo = g_sessionProvider.getArenaDP().getVehicleInfo(target.id)
                 return not vInfo.isActionsDisabled()
     return False
예제 #18
0
 def onControlModeChanged(self, forceControlMode = None):
     player = BigWorld.player()
     if not self.isPlaying or not isPlayerAvatar():
         return
     if not self.isControllingCamera and forceControlMode is None:
         return
     controlMode = self.getControlMode() if forceControlMode is None else forceControlMode
     preferredPos = self.getGunRotatorTargetPoint()
     if controlMode == 'mapcase':
         _, preferredPos, _ = self.getGunMarkerParams(preferredPos, Math.Vector3(0.0, 0.0, 1.0))
     player.inputHandler.onControlModeChanged(controlMode, camMatrix=BigWorld.camera().matrix, preferredPos=preferredPos, saveZoom=False, saveDist=False, equipmentID=self.__equipmentId)
 def handleMouseEvent(self, dx, dy, dz):
     if not (self.isPlaying and self.isClientReady):
         return False
     if self.isTimeWarpInProgress:
         return True
     player = BigWorld.player()
     if not isPlayerAvatar():
         return False
     if self.isControllingCamera:
         if dz != 0:
             return True
     return False
 def onLockTarget(self, lock):
     player = BigWorld.player()
     if not isPlayerAvatar():
         return
     if self.isPlaying:
         if lock == 1:
             player.soundNotifications.play('target_captured')
         elif lock == 0:
             player.soundNotifications.play('target_unlocked')
         else:
             player.soundNotifications.play('target_lost')
     elif self.isRecording:
         self.__replayCtrl.onLockTarget(lock)
def hook_on_lock_target(self, lock):
    if config.enable:
        player = BigWorld.player()
        if not isPlayerAvatar():
            return
        if self.isPlaying:
            if lock == 1:
                player.autoAim(autoaim_extended.find_autoaim_target())
            elif lock == 0:
                player.autoAim(None)
            else:
                player.autoAim(None)
        elif self.isRecording:
            self._BattleReplay__replayCtrl.onLockTarget(lock)
    else:
        hooked_onLockTarget(self, lock)
예제 #22
0
 def __cameraUpdate(self):
     replayCtrl = BattleReplay.g_replayCtrl
     if replayCtrl.isPlaying and replayCtrl.isControllingCamera:
         aimOffset = replayCtrl.getAimClipPosition()
     else:
         aimOffset = self.__calcAimOffset()
         if replayCtrl.isRecording:
             replayCtrl.setAimClipPosition(aimOffset)
     self.__aimOffsetFunc(aimOffset)
     shotDescr = BigWorld.player().vehicleTypeDescriptor.shot
     BigWorld.wg_trajectory_drawer().setParams(shotDescr['maxDistance'], Math.Vector3(0, -shotDescr['gravity'], 0), self.__aimOffsetFunc())
     curTime = BigWorld.time()
     deltaTime = curTime - self.__prevTime
     self.__prevTime = curTime
     if replayCtrl.isPlaying:
         if self.__needReset != 0:
             if self.__needReset > 1:
                 from helpers import isPlayerAvatar
                 player = BigWorld.player()
                 if isPlayerAvatar():
                     if player.inputHandler.ctrl is not None:
                         player.inputHandler.ctrl.resetGunMarkers()
                 self.__needReset = 0
             else:
                 self.__needReset += 1
         if replayCtrl.isControllingCamera:
             self.__aimingSystem.updateTargetPos(replayCtrl.getGunRotatorTargetPoint())
         else:
             self.__aimingSystem.handleMovement(self.__dxdydz.x * self.__curSense, -self.__dxdydz.y * self.__curSense)
             if self.__dxdydz.x != 0 or self.__dxdydz.y != 0 or self.__dxdydz.z != 0:
                 self.__needReset = 2
     else:
         self.__aimingSystem.handleMovement(self.__dxdydz.x * self.__curSense, -self.__dxdydz.y * self.__curSense)
     distRange = self.__cfg['distRange']
     self.__camDist -= self.__dxdydz.z * float(self.__curSense)
     maxPivotHeight = distRange[1] - distRange[0]
     self.__camDist = mathUtils.clamp(0, maxPivotHeight, self.__camDist)
     self.__cfg['camDist'] = self.__camDist
     self.__cam.pivotPosition = Math.Vector3(0.0, self.__camDist, 0.0)
     if self.__dxdydz.z != 0 and self.__onChangeControlMode is not None and mathUtils.almostZero(self.__camDist - maxPivotHeight):
         self.__onChangeControlMode()
     self.__updateOscillator(deltaTime)
     if not self.__autoUpdatePosition:
         self.__dxdydz = Vector3(0, 0, 0)
     return 0.0
예제 #23
0
 def __getArenaSoundEvent(self, eventId):
     soundEventName = None
     if eventId in _BATTLE_RESULT_MUSIC_EVENTS:
         soundEventName = MusicController.__lastBattleResultEventName
     else:
         player = BigWorld.player()
         if not isPlayerAvatar():
             return
         if player.arena is None:
             return
         arenaType = player.arena.arenaType
         if eventId == MUSIC_EVENT_COMBAT:
             soundEventName = arenaType.music
         elif eventId == MUSIC_EVENT_COMBAT_LOADING:
             soundEventName = arenaType.loadingMusic
         elif eventId == AMBIENT_EVENT_COMBAT:
             soundEventName = arenaType.ambientSound
     if soundEventName:
         return SoundGroups.g_instance.getSound2D(soundEventName)
     else:
         return
예제 #24
0
 def enable(self, **args):
     self.measureDeltaTime()
     self.delayCallback(0.0, self.__update)
     camMatrix = args.get('camMatrix', BigWorld.camera().matrix)
     self.__cam.set(camMatrix)
     self.__cam.invViewProvider.a = camMatrix
     self.__cam.invViewProvider.b = mathUtils.createIdentityMatrix()
     BigWorld.camera(self.__cam)
     worldMat = Math.Matrix(self.__cam.invViewMatrix)
     self.__ypr = Math.Vector3(worldMat.yaw, worldMat.pitch, worldMat.roll)
     self.__position = worldMat.translation
     self.__velocity = Math.Vector3()
     self.__yprVelocity = Math.Vector3()
     self.__zoomVelocity = 0.0
     self.__resetSenses()
     self.__basisMProv.bind(None)
     self.__rotateAroundPointEnabled = False
     self.__alignerToLand.disable()
     if isPlayerAvatar() and g_sessionProvider.getCtx().isPlayerObserver():
         BigWorld.player().positionControl.moveTo(self.__position)
         BigWorld.player().positionControl.followCamera(True)
예제 #25
0
 def __getArenaSoundEvent(self, eventId):
     player = BigWorld.player()
     soundEvent = None
     soundEventName = None
     if not isPlayerAvatar():
         return
     elif player.arena is None:
         return
     else:
         arenaType = player.arena.arenaType
         if eventId == MUSIC_EVENT_COMBAT:
             soundEventName = arenaType.music
         elif eventId == MUSIC_EVENT_COMBAT_LOADING:
             soundEventName = arenaType.loadingMusic
         elif eventId == AMBIENT_EVENT_COMBAT:
             soundEventName = arenaType.ambientSound
         if soundEventName is not None:
             soundEvent = FMOD.getSound(soundEventName)
             if soundEvent is not None:
                 soundEvent.stop()
         return soundEvent
예제 #26
0
 def stop(self, rewindToTime = None, delete = False):
     if not self.isPlaying and not self.isRecording:
         return False
     else:
         self.onStopped()
         wasPlaying = self.isPlaying
         isOffline = self.__replayCtrl.isOfflinePlaybackMode
         self.__replayCtrl.stop(delete)
         self.__fileName = None
         if wasPlaying:
             if isPlayerAvatar():
                 BigWorld.player().onVehicleEnterWorld -= self.__onVehicleEnterWorld
             if not isOffline:
                 connectionManager.onDisconnected += self.__showLoginPage
             BigWorld.clearEntitiesAndSpaces()
             BigWorld.disconnect()
             if self.__quitAfterStop:
                 BigWorld.quit()
             elif isOffline:
                 self.__showLoginPage()
         return
예제 #27
0
 def onClientReady(self):
     if not (self.isPlaying or self.isRecording):
         return
     elif self.isRecording and BigWorld.player(
     ).arena.guiType == constants.ARENA_GUI_TYPE.TUTORIAL:
         self.stop(None, True)
         return
     else:
         self.__replayCtrl.playerVehicleID = BigWorld.player(
         ).playerVehicleID
         self.__replayCtrl.onClientReady()
         if self.isPlaying:
             AreaDestructibles.g_destructiblesManager.onAfterReplayTimeWarp(
             )
             if isPlayerAvatar():
                 BigWorld.player(
                 ).onVehicleEnterWorld += self.__onVehicleEnterWorld
         if self.isRecording:
             player = BigWorld.player()
             arena = player.arena
             arenaName = arena.arenaType.geometry
             i = arenaName.find('/')
             if i != -1:
                 arenaName = arenaName[i + 1:]
             now = datetime.datetime.now()
             now = '%02d.%02d.%04d %02d:%02d:%02d' % (
                 now.day, now.month, now.year, now.hour, now.minute,
                 now.second)
             vehicleName = BigWorld.entities[
                 player.playerVehicleID].typeDescriptor.name
             vehicleName = vehicleName.replace(':', '-')
             vehicles = self.__getArenaVehiclesInfo()
             gameplayID = player.arenaTypeID >> 16
             clientVersionFromXml = getFullClientVersion()
             clientVersionFromExe = BigWorld.wg_getProductVersion()
             arenaInfo = {
                 'dateTime': now,
                 'playerName': player.name,
                 'playerID': self.__playerDatabaseID,
                 'playerVehicle': vehicleName,
                 'mapName': arenaName,
                 'mapDisplayName': arena.arenaType.name,
                 'gameplayID': ArenaType.getGameplayName(gameplayID)
                 or gameplayID,
                 'vehicles': vehicles,
                 'battleType': arena.bonusType,
                 'clientVersionFromExe': clientVersionFromExe,
                 'clientVersionFromXml': clientVersionFromXml,
                 'serverName': connectionManager.serverUserName,
                 'regionCode': constants.AUTH_REALM,
                 'serverSettings': self.__serverSettings
             }
             self.__replayCtrl.recMapName = arenaName
             self.__replayCtrl.recPlayerVehicleName = vehicleName
             self.__replayCtrl.setArenaInfoStr(json.dumps(arenaInfo))
         else:
             self.__showInfoMessage('replayControlsHelp1')
             self.__showInfoMessage('replayControlsHelp2')
             self.__showInfoMessage('replayControlsHelp3')
             if self.replayTimeout > 0:
                 LOG_DEBUG('replayTimeout set for %.2f' %
                           float(self.replayTimeout))
                 BigWorld.callback(float(self.replayTimeout), BigWorld.quit)
         return
 def handleKeyEvent(self, isDown, key, mods, isRepeat, event):
     if not self.isPlaying:
         return False
     if self.isTimeWarpInProgress:
         return True
     if key == Keys.KEY_F1:
         return True
     if not self.isClientReady:
         return False
     cmdMap = CommandMapping.g_instance
     player = BigWorld.player()
     if not isPlayerAvatar():
         return
     currReplayTime = self.__replayCtrl.getTimeMark(REPLAY_TIME_MARK_CURRENT_TIME)
     finishReplayTime = self.__replayCtrl.getTimeMark(REPLAY_TIME_MARK_REPLAY_FINISHED)
     if currReplayTime > finishReplayTime:
         currReplayTime = finishReplayTime
     isCursorVisible = gui.Scaleform.CursorDelegator.g_cursorDelegator._CursorDelegator__activated
     fastForwardStep = FAST_FORWARD_STEP * (2.0 if mods == 2 else 1.0)
     if (key == Keys.KEY_LEFTMOUSE or cmdMap.isFired(CommandMapping.CMD_CM_SHOOT, key)) and isDown and not isCursorVisible:
         if self.isControllingCamera:
             controlMode = self.getControlMode()
             self.onControlModeChanged('arcade')
             self.__replayCtrl.isControllingCamera = False
             self.onControlModeChanged(controlMode)
             self.__showInfoMessage('replayFreeCameraActivated')
         else:
             self.__replayCtrl.isControllingCamera = True
             self.onControlModeChanged()
             self.__showInfoMessage('replaySavedCameraActivated')
         return True
     if cmdMap.isFired(CommandMapping.CMD_CM_ALTERNATE_MODE, key) and isDown:
         if self.isControllingCamera:
             return True
     if key == Keys.KEY_SPACE and isDown and not self.__isFinished:
         if self.__playbackSpeedIdx > 0:
             self.setPlaybackSpeedIdx(0)
         else:
             self.setPlaybackSpeedIdx(self.__savedPlaybackSpeedIdx if self.__savedPlaybackSpeedIdx != 0 else self.__playbackSpeedModifiers.index(1.0))
         return True
     if key == Keys.KEY_DOWNARROW and isDown and not self.__isFinished:
         if self.__playbackSpeedIdx > 0:
             self.setPlaybackSpeedIdx(self.__playbackSpeedIdx - 1)
         return True
     if key == Keys.KEY_UPARROW and isDown and not self.__isFinished:
         if self.__playbackSpeedIdx < len(self.__playbackSpeedModifiers) - 1:
             self.setPlaybackSpeedIdx(self.__playbackSpeedIdx + 1)
         return True
     if key == Keys.KEY_RIGHTARROW and isDown and not self.__isFinished:
         self.__timeWarp(currReplayTime + fastForwardStep)
         return True
     if key == Keys.KEY_LEFTARROW:
         self.__timeWarp(currReplayTime - fastForwardStep)
         return True
     if key == Keys.KEY_HOME and isDown:
         self.__timeWarp(0.0)
         return True
     if key == Keys.KEY_END and isDown and not self.__isFinished:
         self.__timeWarp(finishReplayTime)
         return True
     if key == Keys.KEY_C and isDown:
         self.__isChatPlaybackEnabled = not self.__isChatPlaybackEnabled
     playerControlMode = player.inputHandler.ctrl
     from AvatarInputHandler.control_modes import VideoCameraControlMode
     isVideoCamera = isinstance(playerControlMode, VideoCameraControlMode)
     suppressCommand = False
     if cmdMap.isFiredList(xrange(CommandMapping.CMD_AMMO_CHOICE_1, CommandMapping.CMD_AMMO_CHOICE_0 + 1), key) and isDown:
         suppressCommand = True
     elif cmdMap.isFiredList((CommandMapping.CMD_CM_LOCK_TARGET,
      CommandMapping.CMD_CM_LOCK_TARGET_OFF,
      CommandMapping.CMD_USE_HORN,
      CommandMapping.CMD_STOP_UNTIL_FIRE,
      CommandMapping.CMD_INCREMENT_CRUISE_MODE,
      CommandMapping.CMD_DECREMENT_CRUISE_MODE,
      CommandMapping.CMD_MOVE_FORWARD,
      CommandMapping.CMD_MOVE_FORWARD_SPEC,
      CommandMapping.CMD_MOVE_BACKWARD,
      CommandMapping.CMD_CM_POSTMORTEM_NEXT_VEHICLE,
      CommandMapping.CMD_CM_POSTMORTEM_SELF_VEHICLE,
      CommandMapping.CMD_RADIAL_MENU_SHOW,
      CommandMapping.CMD_RELOAD_PARTIAL_CLIP), key) and isDown and not isCursorVisible:
         suppressCommand = True
     elif (key == Keys.KEY_RETURN or key == Keys.KEY_NUMPADENTER) and isDown and mods != 4:
         suppressCommand = True
     if suppressCommand:
         if isVideoCamera:
             playerControlMode.handleKeyEvent(isDown, key, mods, event)
         return True
     return False
예제 #29
0
 def setPlayerVehicleID(self, vehicleID):
     if vehicleID == 0 and isPlayerAvatar():
         vehicleID = BigWorld.player().playerVehicleID
     self.__replayCtrl.playerVehicleID = vehicleID
예제 #30
0
def isTargetCorrect(player, target):
    if target is not None and isinstance(target, Vehicle) and target.isAlive() and player is not None and isPlayerAvatar():
        return not g_sessionProvider.getArenaDP().getVehicleInfo(target.id).isActionsDisabled()
    return False
예제 #31
0
 def handleKeyEvent(self, isDown, key, mods, isRepeat, event):
     if not self.isPlaying:
         return False
     elif self.isTimeWarpInProgress:
         return True
     elif key == Keys.KEY_F1:
         return True
     elif not self.isClientReady:
         return False
     cmdMap = CommandMapping.g_instance
     player = BigWorld.player()
     if not isPlayerAvatar():
         return False
     if key == Keys.KEY_ESCAPE:
         if isDown and not player.isForcedGuiControlMode():
             self.__isMenuShowed = True
             return False
     if not player.isForcedGuiControlMode():
         self.__isMenuShowed = False
     if self.__isMenuShowed:
         return False
     currReplayTime = self.__replayCtrl.getTimeMark(
         REPLAY_TIME_MARK_CURRENT_TIME)
     finishReplayTime = self.__replayCtrl.getTimeMark(
         REPLAY_TIME_MARK_REPLAY_FINISHED)
     if currReplayTime > finishReplayTime:
         currReplayTime = finishReplayTime
     app = g_appLoader.getDefBattleApp()
     if app is not None:
         isCursorVisible = app.ctrlModeFlags & GUI_CTRL_MODE_FLAG.CURSOR_ATTACHED > 0
     else:
         isCursorVisible = False
     fastForwardStep = FAST_FORWARD_STEP * (2.0 if mods == 2 else 1.0)
     if (key == Keys.KEY_LEFTMOUSE
             or cmdMap.isFired(CommandMapping.CMD_CM_SHOOT,
                               key)) and isDown and not isCursorVisible:
         if self.isControllingCamera:
             controlMode = self.getControlMode()
             self.onControlModeChanged('arcade')
             self.__replayCtrl.isControllingCamera = False
             self.onControlModeChanged(controlMode)
             self.__showInfoMessage('replayFreeCameraActivated')
         else:
             self.__replayCtrl.isControllingCamera = True
             self.onControlModeChanged()
             self.__showInfoMessage('replaySavedCameraActivated')
         return True
     if cmdMap.isFired(CommandMapping.CMD_CM_ALTERNATE_MODE,
                       key) and isDown:
         if self.isControllingCamera:
             return True
     if key == Keys.KEY_SPACE and isDown and not self.__isFinished:
         if self.__playbackSpeedIdx > 0:
             self.setPlaybackSpeedIdx(0)
         else:
             self.setPlaybackSpeedIdx(self.__savedPlaybackSpeedIdx if self.
                                      __savedPlaybackSpeedIdx != 0 else self
                                      .__playbackSpeedModifiers.index(1.0))
         return True
     elif key == Keys.KEY_DOWNARROW and isDown and not self.__isFinished:
         if self.__playbackSpeedIdx > 0:
             self.setPlaybackSpeedIdx(self.__playbackSpeedIdx - 1)
         return True
     elif key == Keys.KEY_UPARROW and isDown and not self.__isFinished:
         if self.__playbackSpeedIdx < len(
                 self.__playbackSpeedModifiers) - 1:
             self.setPlaybackSpeedIdx(self.__playbackSpeedIdx + 1)
         return True
     elif key == Keys.KEY_RIGHTARROW and isDown and not self.__isFinished:
         self.__timeWarp(currReplayTime + fastForwardStep)
         return True
     elif key == Keys.KEY_LEFTARROW:
         self.__timeWarp(currReplayTime - fastForwardStep)
         return True
     elif key == Keys.KEY_HOME and isDown:
         self.__timeWarp(0.0)
         return True
     elif key == Keys.KEY_END and isDown and not self.__isFinished:
         self.__timeWarp(finishReplayTime)
         return True
     if key == Keys.KEY_C and isDown:
         self.__isChatPlaybackEnabled = not self.__isChatPlaybackEnabled
     playerControlMode = player.inputHandler.ctrl
     isVideoCamera = _isVideoCameraCtrl(playerControlMode) or _isCatCtrl(
         playerControlMode)
     suppressCommand = False
     if cmdMap.isFiredList(
             xrange(CommandMapping.CMD_AMMO_CHOICE_1,
                    CommandMapping.CMD_AMMO_CHOICE_0 + 1), key) and isDown:
         suppressCommand = True
     elif cmdMap.isFiredList((CommandMapping.CMD_CM_LOCK_TARGET,
                              CommandMapping.CMD_CM_LOCK_TARGET_OFF,
                              CommandMapping.CMD_CM_POSTMORTEM_NEXT_VEHICLE,
                              CommandMapping.CMD_CM_POSTMORTEM_SELF_VEHICLE,
                              CommandMapping.CMD_RADIAL_MENU_SHOW,
                              CommandMapping.CMD_RELOAD_PARTIAL_CLIP),
                             key) and isDown and not isCursorVisible:
         suppressCommand = True
     elif cmdMap.isFiredList(
         (CommandMapping.CMD_USE_HORN, CommandMapping.CMD_STOP_UNTIL_FIRE,
          CommandMapping.CMD_INCREMENT_CRUISE_MODE,
          CommandMapping.CMD_DECREMENT_CRUISE_MODE,
          CommandMapping.CMD_MOVE_FORWARD,
          CommandMapping.CMD_MOVE_FORWARD_SPEC,
          CommandMapping.CMD_MOVE_BACKWARD, CommandMapping.CMD_ROTATE_LEFT,
          CommandMapping.CMD_ROTATE_RIGHT), key):
         suppressCommand = True
     if suppressCommand:
         if isVideoCamera:
             playerControlMode.handleKeyEvent(isDown, key, mods, event)
         return True
     else:
         return False
예제 #32
0
 def getPlayerDBID(self):
     p = BigWorld.player()
     if isPlayerAccount():
         return p.databaseID
     if isPlayerAvatar() and hasattr(p, 'playerVehicleID'):
         return p.arena.vehicles[p.playerVehicleID].get('accountDBID', None)
예제 #33
0
 def onClientReady(self):
     if not (self.isPlaying or self.isRecording):
         return
     elif self.isRecording and BigWorld.player(
     ).arena.guiType == constants.ARENA_GUI_TYPE.TUTORIAL:
         self.stop(None, True)
         return
     else:
         self.__replayCtrl.playerVehicleID = BigWorld.player(
         ).playerVehicleID
         self.__replayCtrl.onClientReady()
         if self.isPlaying:
             if not BigWorld.IS_CONSUMER_CLIENT_BUILD:
                 self.__logSVNInfo()
             AreaDestructibles.g_destructiblesManager.onAfterReplayTimeWarp(
             )
             if isPlayerAvatar():
                 BigWorld.player(
                 ).onVehicleEnterWorld += self.__onVehicleEnterWorld
             self.appLoader.attachCursor(
                 settings.APP_NAME_SPACE.SF_BATTLE,
                 flags=GUI_CTRL_MODE_FLAG.CURSOR_ATTACHED)
         if self.isRecording:
             player = BigWorld.player()
             arena = player.arena
             arenaName = arena.arenaType.geometry
             i = arenaName.find('/')
             if i != -1:
                 arenaName = arenaName[i + 1:]
             now = datetime.datetime.now()
             now = '%02d.%02d.%04d %02d:%02d:%02d' % (
                 now.day, now.month, now.year, now.hour, now.minute,
                 now.second)
             vehicleName = BigWorld.entities[
                 player.playerVehicleID].typeDescriptor.name
             vehicleName = vehicleName.replace(':', '-')
             vehicles = self.__getArenaVehiclesInfo()
             gameplayID = player.arenaTypeID >> 16
             clientVersionFromXml = getFullClientVersion()
             clientVersionFromExe = BigWorld.wg_getProductVersion()
             arenaInfo = {
                 'dateTime': now,
                 'playerName': player.name,
                 'playerID': self.__playerDatabaseID,
                 'playerVehicle': vehicleName,
                 'mapName': arenaName,
                 'mapDisplayName': arena.arenaType.name,
                 'gameplayID': ArenaType.getGameplayName(gameplayID)
                 or gameplayID,
                 'vehicles': vehicles,
                 'battleType': arena.bonusType,
                 'clientVersionFromExe': clientVersionFromExe,
                 'clientVersionFromXml': clientVersionFromXml,
                 'serverName': self.connectionMgr.serverUserName,
                 'regionCode': constants.AUTH_REALM,
                 'serverSettings': self.__serverSettings,
                 'hasMods': self.__replayCtrl.hasMods
             }
             if not BigWorld.IS_CONSUMER_CLIENT_BUILD:
                 arenaInfo['branchURL'], arenaInfo[
                     'lastChangedRevision'] = self.__getBranchAndRevision()
             if BigWorld.player(
             ).arena.guiType == constants.ARENA_GUI_TYPE.BOOTCAMP:
                 from bootcamp.Bootcamp import g_bootcamp
                 arenaInfo['lessonId'] = g_bootcamp.getLessonNum()
                 arenaInfo['bootcampCtx'] = g_bootcamp.serializeContext()
             self.__replayCtrl.recMapName = arenaName
             self.__replayCtrl.recPlayerVehicleName = vehicleName
             self.__replayCtrl.setArenaInfoStr(
                 json.dumps(_JSON_Encode(arenaInfo)))
         else:
             self.__showInfoMessages()
             if self.replayTimeout > 0:
                 LOG_DEBUG('replayTimeout set for %.2f' %
                           float(self.replayTimeout))
                 BigWorld.callback(float(self.replayTimeout), BigWorld.quit)
         return
 def enable(self, **args):
     super(EpicVideoCamera, self).enable(**args)
     self._alignerToLand.enableWithFixedHeight(self.__heightAboveTerrain)
     if isPlayerAvatar():
         BigWorld.player().positionControl.moveTo(self._cam.position)
         BigWorld.player().positionControl.followCamera(True)
예제 #35
0
 def selectPlayer(self, _, vehId):
     player = BigWorld.player()
     if isPlayerAvatar():
         player.selectPlayer(int(vehId))
예제 #36
0
 def __cameraUpdate(self):
     replayCtrl = BattleReplay.g_replayCtrl
     if replayCtrl.isPlaying and replayCtrl.isControllingCamera:
         aimOffset = replayCtrl.getAimClipPosition()
     else:
         aimOffset = self.__calcAimOffset()
         if replayCtrl.isRecording:
             replayCtrl.setAimClipPosition(aimOffset)
     self.__aimOffset = aimOffset
     self.__updateCameraYaw()
     shotDescr = BigWorld.player().getVehicleDescriptor().shot
     BigWorld.wg_trajectory_drawer().setParams(shotDescr.maxDistance, Math.Vector3(0, -shotDescr.gravity, 0), aimOffset)
     curTime = BigWorld.time()
     deltaTime = curTime - self.__prevTime
     self.__prevTime = curTime
     self.__aimingSystem.update(deltaTime)
     if replayCtrl.isPlaying:
         if self.__needReset != 0:
             if self.__needReset > 1:
                 from helpers import isPlayerAvatar
                 player = BigWorld.player()
                 if isPlayerAvatar():
                     if player.inputHandler.ctrl is not None:
                         player.inputHandler.ctrl.resetGunMarkers()
                 self.__needReset = 0
             else:
                 self.__needReset += 1
         if replayCtrl.isControllingCamera:
             self.__aimingSystem.updateTargetPos(replayCtrl.getGunRotatorTargetPoint())
         else:
             self.__aimingSystem.handleMovement(self.__dxdydz.x * self.__curSense, -self.__dxdydz.y * self.__curSense)
             if self.__dxdydz.x != 0 or self.__dxdydz.y != 0 or self.__dxdydz.z != 0:
                 self.__needReset = 2
     else:
         self.__aimingSystem.handleMovement(self.__dxdydz.x * self.__curSense, -self.__dxdydz.y * self.__curSense)
     self.__calcSmoothingPivotDelta(deltaTime)
     self.__camDist -= self.__dxdydz.z * float(self.__curSense)
     self.__camDist = self.__aimingSystem.overrideCamDist(self.__camDist)
     distRange = self.__getDistRange()
     maxPivotHeight = distRange[1] - distRange[0]
     transitionDist = self._cfg['transitionDist'] - distRange[0]
     if self.__switchers.isEnabled():
         self.__camDist = math_utils.clamp(transitionDist, maxPivotHeight, self.__camDist)
         scrollLimits = (transitionDist, maxPivotHeight)
     else:
         self.__camDist = math_utils.clamp(0, maxPivotHeight, self.__camDist)
         scrollLimits = (0, maxPivotHeight)
     if self.__saveDist:
         self._cfg['camDist'] = self.__camDist
     self.__scrollSmoother.moveTo(self.__camDist, scrollLimits)
     currentCamDist = self.__scrollSmoother.update(deltaTime)
     camDistWithSmoothing = currentCamDist + self.__smoothingPivotDelta - self.__aimingSystem.heightFromPlane
     self.__cam.pivotPosition = Math.Vector3(0.0, camDistWithSmoothing, 0.0)
     if self.__onChangeControlMode is not None and self.__switchers.needToSwitch(self.__dxdydz.z, self.__camDist, 0, maxPivotHeight, transitionDist):
         self.__onChangeControlMode(*self.__switchers.getSwitchParams())
     if not self.__transitionEnabled and self.__camDist + TRANSITION_DIST_HYSTERESIS >= transitionDist:
         self.__transitionEnabled = True
         self.__enableSwitchers(False)
     self.__updateOscillator(deltaTime)
     if not self.__autoUpdatePosition:
         self.__dxdydz = Vector3(0, 0, 0)
     return 0.0
예제 #37
0
 def activate(self):
     super(AvatarRelatedComponent, self).activate()
     if isPlayerAvatar():
         self._initialize()
     else:
         g_playerEvents.onAvatarBecomePlayer += self._initialize
 def setPlayerVehicleID(self, vehicleID):
     if vehicleID == 0 and isPlayerAvatar():
         vehicleID = BigWorld.player().playerVehicleID
     self.__replayCtrl.playerVehicleID = vehicleID
예제 #39
0
 def __updateIdle(self):
     if isPlayerAvatar(
     ) and BigWorld.player().arena.period > ARENA_PERIOD.IDLE:
         self.__updateFunc = self.__updatePrebattle
         self.__updateFunc()
예제 #40
0
 def selectPlayer(self, cid, vehId):
     player = BigWorld.player()
     if isPlayerAvatar():
         player.selectPlayer(int(vehId))
 def showGUI(self, appFactory, appNS, appState):
     isValidAvatar = isPlayerAvatar(
     ) and not g_playerEvents.isPlayerEntityChanging
     if appState == ApplicationStateID.INITIALIZED and isValidAvatar:
         appFactory.loadBattlePage(appNS, arenaGuiType=self._arenaGuiType)
예제 #42
0
 def handleKeyEvent(self, isDown, key, mods, isRepeat, event):
     if not self.isPlaying:
         return False
     if self.isBattleSimulation:
         return False
     if self.isTimeWarpInProgress:
         return True
     if key == Keys.KEY_F1:
         if not isRepeat and not isDown:
             self.__showInfoMessages()
         return True
     if not self.isClientReady:
         return False
     cmdMap = CommandMapping.g_instance
     player = BigWorld.player()
     if not isPlayerAvatar():
         return False
     isCursorVisible = player.isForcedGuiControlMode()
     if key == Keys.KEY_ESCAPE:
         if isDown and not isCursorVisible:
             self.__isMenuShowed = True
             return False
     if not player.isForcedGuiControlMode():
         self.__isMenuShowed = False
     if self.__isMenuShowed:
         return False
     currReplayTime = self.__replayCtrl.getTimeMark(
         REPLAY_TIME_MARK_CURRENT_TIME)
     finishReplayTime = self.__replayCtrl.getTimeMark(
         REPLAY_TIME_MARK_REPLAY_FINISHED)
     if currReplayTime > finishReplayTime:
         currReplayTime = finishReplayTime
     fastForwardStep = FAST_FORWARD_STEP * (2.0 if mods == 2 else 1.0)
     if key == Keys.KEY_F11 and isDown:
         if self.isPlaying:
             self.__replayCtrl.onPutScreenshotMark()
             return True
     if (key == Keys.KEY_LEFTMOUSE
             or cmdMap.isFired(CommandMapping.CMD_CM_SHOOT,
                               key)) and isDown and not isCursorVisible:
         if self.isControllingCamera:
             self.appLoader.detachCursor(settings.APP_NAME_SPACE.SF_BATTLE)
             controlMode = self.getControlMode()
             if controlMode not in _POSTMORTEM_CTRL_MODES:
                 self.onControlModeChanged('arcade')
             self.__replayCtrl.isControllingCamera = False
             self.onControlModeChanged(controlMode)
             self.__showInfoMessage('replayFreeCameraActivated')
         else:
             self.__replayCtrl.isControllingCamera = True
             self.onControlModeChanged()
             self.__showInfoMessage('replaySavedCameraActivated')
         return True
     if cmdMap.isFired(CommandMapping.CMD_CM_ALTERNATE_MODE,
                       key) and isDown:
         if self.isControllingCamera:
             return True
     if key == Keys.KEY_SPACE and isDown and not self.__isFinished:
         if self.__playbackSpeedIdx > 0:
             self.setPlaybackSpeedIdx(0)
         else:
             self.setPlaybackSpeedIdx(self.__savedPlaybackSpeedIdx if self.
                                      __savedPlaybackSpeedIdx != 0 else self
                                      .__playbackSpeedModifiers.index(1.0))
         return True
     if key == Keys.KEY_DOWNARROW and isDown and not self.__isFinished:
         if self.__playbackSpeedIdx > 0:
             self.setPlaybackSpeedIdx(self.__playbackSpeedIdx - 1)
         return True
     if key == Keys.KEY_UPARROW and isDown and not self.__isFinished:
         if self.__playbackSpeedIdx < len(
                 self.__playbackSpeedModifiers) - 1:
             self.setPlaybackSpeedIdx(self.__playbackSpeedIdx + 1)
         return True
     if key == Keys.KEY_RIGHTARROW and isDown and not self.__isFinished:
         self.__timeWarp(currReplayTime + fastForwardStep)
         return True
     if key == Keys.KEY_LEFTARROW:
         self.__timeWarp(currReplayTime - fastForwardStep)
         return True
     if key == Keys.KEY_HOME and isDown:
         self.__timeWarp(0.0)
         return True
     if key == Keys.KEY_END and isDown and not self.__isFinished:
         self.__timeWarp(finishReplayTime)
         return True
     if key == Keys.KEY_C and isDown:
         self.__isChatPlaybackEnabled = not self.__isChatPlaybackEnabled
     suppressCommand = False
     if cmdMap.isFiredList(
             xrange(CommandMapping.CMD_AMMO_CHOICE_1,
                    CommandMapping.CMD_AMMO_CHOICE_0 + 1), key) and isDown:
         suppressCommand = True
     elif cmdMap.isFiredList((CommandMapping.CMD_CM_LOCK_TARGET,
                              CommandMapping.CMD_CM_LOCK_TARGET_OFF,
                              CommandMapping.CMD_CM_POSTMORTEM_NEXT_VEHICLE,
                              CommandMapping.CMD_CM_POSTMORTEM_SELF_VEHICLE,
                              CommandMapping.CMD_RADIAL_MENU_SHOW,
                              CommandMapping.CMD_RELOAD_PARTIAL_CLIP),
                             key) and isDown and not isCursorVisible:
         suppressCommand = True
     elif cmdMap.isFiredList(
         (CommandMapping.CMD_STOP_UNTIL_FIRE,
          CommandMapping.CMD_INCREMENT_CRUISE_MODE,
          CommandMapping.CMD_DECREMENT_CRUISE_MODE,
          CommandMapping.CMD_MOVE_FORWARD,
          CommandMapping.CMD_MOVE_FORWARD_SPEC,
          CommandMapping.CMD_MOVE_BACKWARD, CommandMapping.CMD_ROTATE_LEFT,
          CommandMapping.CMD_ROTATE_RIGHT,
          CommandMapping.CMD_CM_VEHICLE_SWITCH_AUTOROTATION), key):
         suppressCommand = True
     if suppressCommand:
         playerControlModeName = player.inputHandler.ctrlModeName
         isForwardInputToCtrlMode = playerControlModeName in _FORWARD_INPUT_CTRL_MODES
         if isForwardInputToCtrlMode:
             player.inputHandler.ctrl.handleKeyEvent(
                 isDown, key, mods, event)
         return True
     return False
예제 #43
0
 def setAmmoSetting(self, idx):
     if not isPlayerAvatar():
         return
     if self.isRecording:
         self.__replayCtrl.onAmmoButtonPressed(idx)
예제 #44
0
 def setAmmoSetting(self, idx):
     if not isPlayerAvatar():
         return
     if self.isRecording:
         self.__replayCtrl.onAmmoButtonPressed(idx)