Example #1
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()
 def __destroy(self):
     LOG_DEBUG('Hangar successfully destroyed.')
     if self.__cam == BigWorld.camera():
         self.__cam.spaceID = 0
         BigWorld.camera(None)
         BigWorld.worldDrawEnabled(False)
     self.__cam = None
     self.__loadingStatus = 0.0
     if self.__vAppearance is not None:
         self.__vAppearance.destroy()
         self.__vAppearance = None
     self.__onLoadedCallback = None
     self.__boundingRadius = None
     entity = None if self.__vEntityId is None else BigWorld.entity(self.__vEntityId)
     BigWorld.SetDrawInflux(False)
     MapActivities.g_mapActivities.stop()
     if self.__spaceId is not None and BigWorld.isClientSpace(self.__spaceId):
         if self.__spaceMappingId is not None:
             BigWorld.delSpaceGeometryMapping(self.__spaceId, self.__spaceMappingId)
         BigWorld.clearSpace(self.__spaceId)
         BigWorld.releaseSpace(self.__spaceId)
     self.__spaceMappingId = None
     self.__spaceId = None
     if entity is None or not entity.inWorld:
         return
     else:
         BigWorld.destroyEntity(self.__vEntityId)
         self.__vEntityId = None
         BigWorld.wg_disableSpecialFPSMode()
         if hasattr(BigWorld.player(), 'inputHandler') and self.__savedInputHandler is not None:
             BigWorld.player().inputHandler = self.__savedInputHandler
             g_hangarInputHandler.hangarSpace = None
             self.__savedInputHandler = None
         return
Example #3
0
def exhibit(tankNames = None, pivotPoint = None, shift = Vector3(0, 0, 10), assembler = assembleCompoundModel2):
    if pivotPoint is None:
        p = Vector3(BigWorld.camera().position)
        d = BigWorld.camera().direction
        spaceID = BigWorld.player().spaceID if BigWorld.player() is not None else BigWorld.camera().spaceID
        collRes = BigWorld.wg_collideSegment(spaceID, p, p + d * 1000, 18, 8)
        if collRes is None:
            pivotPoint = Vector3(0, 0, 0)
        else:
            strikePos = collRes[0]
            pivotPoint = strikePos
    if tankNames is None:
        tankNames = [ vehicles.g_cache.vehicle(0, x).name for x in xrange(EXAMPLE_COUNT) ]
    totalTanks = len(tankNames)
    shift_new = Vector3(d)
    shift_new.y = 0.0
    up = Vector3(0.0, 1.0, 0.0)
    right = up * shift_new
    shift_new.normalise()
    right.normalise()
    offset = 6.0
    shift_new = shift_new * offset
    right = right * offset
    for idx, tankName in enumerate(tankNames):
        desc = vehicles.VehicleDescr(typeName=tankName)
        if idx < totalTanks / 2:
            creationPosition = pivotPoint + shift_new * idx
        else:
            creationPosition = pivotPoint + shift_new * (idx - totalTanks / 2) + right
        assembler(getModelNames(desc), creationPosition, desc)

    return
Example #4
0
 def disable(self):
     BigWorld.camera(None)
     BigWorld.player().positionControl.followCamera(False)
     if self.__autoUpdateCallbackId is not None:
         BigWorld.cancelCallback(self.__autoUpdateCallbackId)
         self.__autoUpdateCallbackId = None
     return
 def __destroy(self):
     LOG_DEBUG('Hangar successfully destroyed.')
     MusicController.g_musicController.unloadCustomSounds()
     if self.__cam == BigWorld.camera():
         self.__cam.spaceID = 0
         BigWorld.camera(None)
         BigWorld.worldDrawEnabled(False)
     self.__cam = None
     self.__loadingStatus = 0.0
     if self.__vAppearance is not None:
         self.__vAppearance.destroy()
         self.__vAppearance = None
     self.__onLoadedCallback = None
     self.__boundingRadius = None
     if self.__waitCallback is not None:
         BigWorld.cancelCallback(self.__waitCallback)
         self.__waitCallback = None
     g_keyEventHandlers.remove(self.handleKeyEvent)
     g_mouseEventHandlers.remove(self.handleMouseEventGlobal)
     BigWorld.SetDrawInflux(False)
     MapActivities.g_mapActivities.stop()
     if self.__spaceId is not None and BigWorld.isClientSpace(self.__spaceId):
         if self.__spaceMappingId is not None:
             BigWorld.delSpaceGeometryMapping(self.__spaceId, self.__spaceMappingId)
         BigWorld.clearSpace(self.__spaceId)
         BigWorld.releaseSpace(self.__spaceId)
     self.__spaceMappingId = None
     self.__spaceId = None
     self.__vEntityId = None
     BigWorld.wg_disableSpecialFPSMode()
     g_postProcessing.disable()
     FovExtended.instance().resetFov()
     return
 def __destroy(self):
     LOG_DEBUG('Hangar successfully destroyed.')
     if self.__cam == BigWorld.camera():
         self.__cam.spaceID = 0
         BigWorld.camera(None)
         BigWorld.worldDrawEnabled(False)
     self.__cam = None
     self.__loadingStatus = 0.0
     if self.__vAppearance is not None:
         self.__vAppearance.destroy()
         self.__vAppearance = None
     self.__onLoadedCallback = None
     self.__boundingRadius = None
     g_keyEventHandlers.remove(self.handleKeyEvent)
     g_mouseEventHandlers.remove(self.handleMouseEventGlobal)
     entity = None if self.__vEntityId is None else BigWorld.entity(self.__vEntityId)
     BigWorld.SetDrawInflux(False)
     MapActivities.g_mapActivities.stop()
     if self.__spaceId is not None and BigWorld.isClientSpace(self.__spaceId):
         if self.__spaceMappingId is not None:
             BigWorld.delSpaceGeometryMapping(self.__spaceId, self.__spaceMappingId)
         BigWorld.clearSpace(self.__spaceId)
         BigWorld.releaseSpace(self.__spaceId)
     self.__spaceMappingId = None
     self.__spaceId = None
     if entity is None or not entity.inWorld:
         return
     BigWorld.destroyEntity(self.__vEntityId)
     self.__vEntityId = None
     BigWorld.wg_disableSpecialFPSMode()
     g_postProcessing.disable()
Example #7
0
def launch(spaceName):
    global g_enablePostProcessing
    global g_offlineModeEnabled
    print 'Entering offline space', spaceName
    BigWorld.clearAllSpaces()
    BigWorld.worldDrawEnabled(False)
    _displayGUI(spaceName)
    spaceID = BigWorld.createSpace()
    BigWorld.addSpaceGeometryMapping(spaceID, None, spaceName)
    _loadCameraTransforms()
    camera = BigWorld.FreeCamera()
    camera.spaceID = spaceID
    BigWorld.camera(camera)
    _setCameraTransform(g_curCameraTransform)
    BigWorld.camera().fixed = True
    BigWorld.projection().fov = math.radians(75.0)
    BigWorld.setWatcher('Client Settings/Strafe Rate', 175.0)
    BigWorld.setWatcher('Client Settings/Camera Mass', 5.0)
    BigWorld.setCursor(GUI.mcursor())
    GUI.mcursor().visible = True
    GUI.mcursor().clipped = False
    g_offlineModeEnabled = True
    BigWorld.callback(1.0, _offlineLoadCheck)
    g_postProcessing.init()
    _enablePostProcessing(g_enablePostProcessing, 'arcade')
    return
Example #8
0
 def disable(self):
     self.stopCallback(self.__update)
     BigWorld.projection().fov = self.__defaultFov
     BigWorld.camera(None)
     self.__alignerToLand.disable()
     BigWorld.player().positionControl.followCamera(False)
     return
	def change_game_state(self, **state):
		import BigWorld, Avatar, Account
		assert self.mod_tessumod, "Mod must be loaded first before changing game state"

		if state["mode"] == "battle":
			BigWorld.player(Avatar.Avatar())
			if "players" in state:
				for player in state["players"]:
					vehicle_id = random.randint(0, 1000000)
					dbid = random.randint(0, 1000000)
					BigWorld.player().arena.vehicles[vehicle_id] = {
						"accountDBID": dbid,
						"name":        player["name"],
						"isAlive":     True
					}
					if vehicle_id not in BigWorld.entities:
						BigWorld.entities[vehicle_id] = BigWorld.Entity()
					if "position" in player:
						BigWorld.player().arena.positions[vehicle_id] = player["position"]
						BigWorld.entities[vehicle_id].position = BigWorld.Vector(*player["position"])
			if "camera" in state:
				if "position" in state["camera"]:
					BigWorld.camera().position = BigWorld.Vector(*state["camera"]["position"])
				if "direction" in state["camera"]:
					BigWorld.camera().direction = BigWorld.Vector(*state["camera"]["direction"])
		elif state["mode"] == "lobby":
			BigWorld.player(Account.PlayerAccount())
			if "players" in state:
				for id, player in enumerate(state["players"]):
					BigWorld.player().prebattle.rosters[0][id] = {
						"name": player["name"],
						"dbID": random.randint(0, 1000000)
					}
Example #10
0
def testWindow():
    BigWorld.camera(BigWorld.CursorCamera())
    BigWorld.setCursor(GUI.mcursor())
    GUI.mcursor().visible = True
    clear()
    w = GUI.load('gui/tests/window.gui')
    GUI.addRoot(w)
    return w
Example #11
0
 def destroy(self):
     if self.__videoCamera is None:
         return
     self.__videoCamera.destroy()
     BigWorld.camera(self.__overriddenCamera)
     InputHandler.g_instance.onKeyDown -= self.handleKeyEvent
     InputHandler.g_instance.onKeyUp -= self.handleKeyEvent
     g_mouseEventHandlers.discard(self.handleMouseEvent)
Example #12
0
 def disable(self):
     self.__aimingSystem.disable()
     self.stopCallback(self.__cameraUpdate)
     BigWorld.camera(None)
     BigWorld.player().positionControl.followCamera(False)
     self.__positionOscillator.reset()
     FovExtended.instance().resetFov()
     FovExtended.instance().enabled = True
Example #13
0
def handleKeyEvent(event):
    global g_enablePostProcessing
    global g_curCameraTransform
    global g_enableTAA
    if not g_offlineModeEnabled or not BigWorld.camera():
        return False
    BigWorld.camera().handleKeyEvent(event)
    if not event.isKeyDown():
        return False
    if event.key in MOUSE_TOGGLE_KEYS:
        GUI.mcursor().visible = not GUI.mcursor().visible
    elif event.key == Keys.KEY_ADD:
        adjustSpeed(+MOVE_SPEED_ADJUST)
    elif event.key == Keys.KEY_NUMPADMINUS:
        adjustSpeed(-MOVE_SPEED_ADJUST)
    elif event.key == Keys.KEY_F:
        newFixed = not BigWorld.camera().fixed
        BigWorld.camera().fixed = newFixed
        GUI.mcursor().visible = newFixed
        GUI.mcursor().clipped = not newFixed
    elif event.key == Keys.KEY_1:
        _setCameraTransform(0)
    elif event.key == Keys.KEY_2:
        _setCameraTransform(1)
    elif event.key == Keys.KEY_3:
        _setCameraTransform(2)
    elif event.key == Keys.KEY_4:
        _setCameraTransform(3)
    elif event.key == Keys.KEY_5:
        _setCameraTransform(4)
    elif event.key == Keys.KEY_6:
        _setCameraTransform(5)
    elif event.key == Keys.KEY_7:
        _setCameraTransform(6)
    elif event.key == Keys.KEY_8:
        _setCameraTransform(7)
    elif event.key == Keys.KEY_M:
        g_curCameraTransform = _clampCameraTransformIdx(g_curCameraTransform + 1)
        _setCameraTransform(g_curCameraTransform)
    elif event.key == Keys.KEY_N:
        g_curCameraTransform = _clampCameraTransformIdx(g_curCameraTransform - 1)
        _setCameraTransform(g_curCameraTransform)
    elif event.key == Keys.KEY_R:
        _addCameraTransform()
        _saveCameraTransforms()
    elif event.key == Keys.KEY_P:
        g_enablePostProcessing = not g_enablePostProcessing
        _enablePostProcessing(g_enablePostProcessing, 'arcade')
    elif event.key == Keys.KEY_C:
        g_enableCinematicPostProcessing = not g_enableCinematicPostProcessing
        _enablePostProcessing(g_enableCinematicPostProcessing, 'cinematic')
    elif event.key == Keys.KEY_T:
        g_enableTAA = not g_enableTAA
        modeAA = 0
        if g_enableTAA:
            modeAA = 3
        BigWorld.setCustomAAMode(modeAA)
    return True
Example #14
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.__isModeOverride = False
     return
Example #15
0
 def create(self, model, list, args):
     if BigWorld.player() is not None and BigWorld.player().vehicle is None:
         return
     else:
         if args.get('showShockWave', True):
             dir = BigWorld.camera().direction.scale(self._scale)
             shake = getattr(BigWorld.camera(), 'shake', None)
             if shake is not None:
                 shake(self._duration, dir)
         return
Example #16
0
def handleMouseEvent(event):
    if not g_offlineModeEnabled or not BigWorld.camera():
        return False
    if GUI.mcursor().visible:
        return False
    if event.dz > 0:
        adjustFOV(-FOV_ADJUST)
    elif event.dz < 0:
        adjustFOV(+FOV_ADJUST)
    return BigWorld.camera().handleMouseEvent(event)
Example #17
0
    def enable(self, doEnable):
        if self.__isEnabled == doEnable:
            return
        from cameras import FovExtended
        if not doEnable:
            self.__isEnabled = False
            BigWorld.camera(self.__savedCamera)
            BigWorld.wg_enableSuperShot(False, False)
            for k, v in self.__savedWatchers.iteritems():
                BigWorld.setWatcher(k, v)

            FovExtended.instance().enabled = True
            LOG_DEBUG('Vertical screenshot camera is disabled')
            return
        self.__isEnabled = True
        self.__savedCamera = BigWorld.camera()
        FovExtended.instance().enabled = False
        arenaBB = BigWorld.wg_getSpaceBounds()
        centerXZ = Math.Vector2(0.5 * (arenaBB[0] + arenaBB[2]), 0.5 * (arenaBB[1] + arenaBB[3]))
        halfSizesXZ = Math.Vector2(0.5 * (arenaBB[2] - arenaBB[0]), 0.5 * (arenaBB[3] - arenaBB[1]))
        camFov = math.radians(15.0)
        camPos = Math.Vector3(centerXZ.x, 0, centerXZ.z)
        aspectRatio = 1.0
        if not BigWorld.isVideoWindowed():
            aspectRatio = BigWorld.getFullScreenAspectRatio()
        else:
            aspectRatio = BigWorld.screenWidth() / BigWorld.screenHeight()
        camPos.y = max(halfSizesXZ.x / math.sin(0.5 * camFov * aspectRatio), halfSizesXZ.y / math.sin(0.5 * camFov))
        camMatr = Math.Matrix()
        camMatr.setRotateYPR(Math.Vector3(0.0, math.pi * 0.5, 0.0))
        camMatr.translation = camPos
        camMatr.invert()
        self.__cam = BigWorld.FreeCamera()
        self.__cam.set(camMatr)
        BigWorld.camera(self.__cam)
        BigWorld.wg_enableSuperShot(True, False)
        self.__savedWatchers = {}
        for name in self.__watcherNames:
            try:
                self.__savedWatchers[name] = BigWorld.getWatcher(name)
                if name.startswith('Visibility'):
                    BigWorld.setWatcher(name, False)
            except TypeError:
                LOG_WARNING('Failed to get/set watcher', name)

        BigWorld.setWatcher('Client Settings/std fog/enabled', False)
        BigWorld.projection().fov = camFov
        BigWorld.setWatcher('Render/Fov', camFov)
        BigWorld.setWatcher('Render/Near Plane', max(0.1, camPos.y - 1000.0))
        BigWorld.setWatcher('Render/Far Plane', camPos.y + 1000.0)
        BigWorld.setWatcher('Render/Objects Far Plane/Enabled', False)
        BigWorld.setWatcher('Render/Shadows/qualityPreset', 7)
        BigWorld.setWatcher('Client Settings/Script tick', False)
        LOG_DEBUG('Vertical screenshot camera is enabled')
Example #18
0
def isInAngle(vehiclePos):
	camToVeh = (vehiclePos - BigWorld.camera().position)
	camToVeh.normalise()
	
	angle = camToVeh.dot(BigWorld.camera().direction)
	if angle < -1.0 or angle > 1.0:
		return False
	
	angle = math.acos(angle)
	
	return angle < g_modSetting['dirAngleToBlur']
Example #19
0
 def disable(self):
     BigWorld.camera(None)
     if self.__autoUpdateCallbackId is not None:
         BigWorld.cancelCallback(self.__autoUpdateCallbackId)
         self.__autoUpdateCallbackId = None
     if self.__waitVehicleCallbackId is not None:
         BigWorld.cancelCallback(self.__waitVehicleCallbackId)
         self.__waitVehicleCallbackId = None
     self.__applyFOV(self.__fov)
     self.__showVehicle(True)
     return
Example #20
0
 def testArtyStrike(self, id = 33, offset = Vector3(0, 0, 0)):
     if not IS_DEVELOPMENT:
         return
     p = Vector3(BigWorld.camera().position)
     d = BigWorld.camera().direction
     collRes = BigWorld.wg_collideSegment(BigWorld.player().spaceID, p, p + d * 1000, 18, lambda matKind, collFlags, itemId, chunkId: collFlags & 8)
     if collRes is None:
         return
     strikePos = collRes[0]
     vDir = Vector2(d.x, d.z)
     vDir.normalise()
     self.setEquipmentApplicationPoint(id, strikePos + offset, vDir)
Example #21
0
 def disable(self):
     self.__cam.wg_setModelsToCollideWith([])
     self.__cam.sptHiding = False
     BigWorld.camera(None)
     if self.__autoUpdateCallbackId is not None:
         BigWorld.cancelCallback(self.__autoUpdateCallbackId)
         self.__autoUpdateCallbackId = None
     if self.__cameraUpdateCallbackId is not None:
         BigWorld.cancelCallback(self.__cameraUpdateCallbackId)
         self.__cameraUpdateCallbackId = None
     if self.__shiftKeySensor is not None:
         self.__shiftKeySensor.reset(Math.Vector3())
     return
Example #22
0
 def disable(self):
     BigWorld.camera(None)
     if self.__waitVehicleCallbackId is not None:
         BigWorld.cancelCallback(self.__waitVehicleCallbackId)
         self.__waitVehicleCallbackId = None
     self.__showVehicle(True)
     self.stopCallback(self.__cameraUpdate)
     self.__aimingSystem.disable()
     self.__movementOscillator.reset()
     self.__impulseOscillator.reset()
     self.__noiseOscillator.reset()
     self.__accelerationSmoother.reset()
     self.__autoUpdateDxDyDz.set(0)
     FovExtended.instance().resetFov()
Example #23
0
 def handleKeyEvent(self, event):
     if self.__videoCamera is None:
         return
     if BigWorld.isKeyDown(Keys.KEY_CAPSLOCK) and event.isKeyDown() and event.key == Keys.KEY_F3:
         self.__enabled = not self.__enabled
         if self.__enabled:
             self.__overriddenCamera = BigWorld.camera()
             self.__videoCamera.enable()
         else:
             self.__videoCamera.disable()
             BigWorld.camera(self.__overriddenCamera)
     if self.__enabled:
         return self.__videoCamera.handleKeyEvent(event.key, event.isKeyDown())
     return False
Example #24
0
def shake(targetModel, maxDist = 100, energy = 0.1):
    dist = Vector3(targetModel.position - BigWorld.player().position).length
    if dist < maxDist:
        normDist = dist / maxDist
        try:
            BigWorld.rumble((maxDist - dist) / maxDist, 0.0)
            BigWorld.callback(0.1, lambda : BigWorld.rumble(0, 0))
        except:
            pass

        shDist = energy - normDist * energy
        try:
            BigWorld.camera().shake(1.0 - normDist, (shDist, shDist, shDist / 2))
        except:
            pass
Example #25
0
def shake(targetModel):
    dist = Vector3(targetModel.position - BigWorld.player().position).length
    if dist < 100:
        BigWorld.player()
        try:
            BigWorld.rumble(100 - dist, 0)
            BigWorld.callback(0.1, partial(BigWorld.rumble, 0, 0))
        except:
            pass

        shDist = 0.25 - dist / 250
        try:
            BigWorld.camera().shake(0.1, (shDist, shDist, shDist / 2))
        except:
            pass
Example #26
0
    def __setupHangarShadowMap(self):
        if self.__smRemoveCb is not None:
            BigWorld.cancelCallback(self.__smRemoveCb)
            self.__smRemoveCb = None
        if BigWorld.spaceLoadStatus() < 1.0:
            self.__smCb = BigWorld.callback(0, self.__setupHangarShadowMap)
            return
        else:
            self.__smCb = None
            if 'observer' in self.__vDesc.type.tags:
                self.__removeHangarShadowMap()
                return
            vehiclePath = self.__vDesc.chassis['models']['undamaged']
            vehiclePath = vehiclePath[:vehiclePath.rfind('/normal')]
            dsVehicle = ResMgr.openSection(vehiclePath)
            shadowMapTexFileName = _CFG['fakeShadowMapDefaultTexName']
            if dsVehicle is not None:
                for fileName, _ in dsVehicle.items():
                    if fileName.lower().find('_hangarshadowmap.dds') != -1:
                        shadowMapTexFileName = vehiclePath + '/' + fileName

            BigWorld.wg_setChunkModelTexture(BigWorld.camera().spaceID, 0, 0,
                                             _CFG['fakeShadowMapModelName'],
                                             'diffuseMap',
                                             shadowMapTexFileName)
            return
Example #27
0
def makePostmortemCameraMatrix():
    matrix = Math.WGCombinedMP()
    translationSrc = Math.WGTranslationOnlyMP()
    translationSrc.source = BigWorld.player().consistentMatrices.attachedVehicleMatrix
    matrix.translationSrc = translationSrc
    matrix.rotationSrc = BigWorld.camera().invViewMatrix
    return matrix
    def __breakWithDirection(self, vehicle, isLeftTrackBroken):
        cameraDirection = Math.Vector3(BigWorld.camera().direction)
        cameraDirection.y = 0
        vehicleMatrix = Math.Matrix(vehicle.matrix)
        vehicleMatrix.setElement(3, 0, 0)
        vehicleMatrix.setElement(3, 1, 0)
        vehicleMatrix.setElement(3, 2, 0)
        vehicleMatrix.invert()
        cameraDirection = vehicleMatrix.applyVector(cameraDirection)
        brokenTrackAngle = 0
        if isLeftTrackBroken:
            brokenTrackAngle = math.pi
        dirAngleRelative = math.atan2(cameraDirection.z, cameraDirection.x)
        minDirDelta = math.pi * 2
        vibrationToPlay = ''
        for angleVibration in TrackBreakingController.__ANGLES_VIBRATIONS:
            curAngle = angleVibration[0]
            curAngle += dirAngleRelative
            if curAngle > math.pi * 2:
                curAngle -= math.pi * 2
            if curAngle < 0:
                curAngle += math.pi * 2
            curDirDelta = abs(curAngle - brokenTrackAngle)
            if curDirDelta > math.pi:
                curDirDelta = math.pi * 2 - curDirDelta
            if curDirDelta < minDirDelta:
                minDirDelta = curDirDelta
                vibrationToPlay = angleVibration[1]

        OnceController(vibrationToPlay)
 def __updateSound(self, angleDiff):
     if self.__manualSound is None:
         return
     else:
         if self.__gearSound is not None and angleDiff >= _PlayerTurretRotationSoundEffect.__MIN_ANGLE_TO_ENABLE_GEAR:
             if self.__currentSpeedState != self.__SPEED_FAST and self.__currentSpeedState != self.__SPEED_PRE_FAST:
                 nextSpeedState = self.__SPEED_PRE_FAST
             else:
                 nextSpeedState = self.__currentSpeedState
         elif angleDiff >= _PlayerTurretRotationSoundEffect.__MIN_ANGLE_TO_ENABLE_MANUAL:
             nextSpeedState = self.__SPEED_SLOW
         else:
             nextSpeedState = self.__SPEED_IDLE
         stateFn = self.__stateTable[self.__currentSpeedState][nextSpeedState]
         if stateFn is not None:
             stateFn()
         self.__currentSpeedState = nextSpeedState
         if g__attachToCam:
             __p = BigWorld.camera().position
         else:
             __p = BigWorld.player().position
         isTurretAlive = BigWorld.player().deviceStates.get('turretRotator', None) is None
         if self.__gearDamagedParam is not None:
             self.__gearDamagedParam.value = 0.0 if isTurretAlive else 1.0
         if self.__manGearDamagedParam is not None:
             self.__manGearDamagedParam.value = 0.0 if isTurretAlive else 1.0
         if self.__manualSound is not None:
             self.__manualSound.position = __p
         if self.__gearSound is not None:
             self.__gearSound.position = __p
         return
Example #30
0
 def __timeWarp(self, time):
     if not self.isPlaying or not self.__enableTimeWarp:
         return
     else:
         BigWorld.wg_enableGUIBackground(True, False)
         if self.__isFinished:
             self.setPlaybackSpeedIdx(self.__savedPlaybackSpeedIdx)
         self.__isFinished = False
         self.__warpTime = time
         self.__rewind = time < self.__replayCtrl.getTimeMark(REPLAY_TIME_MARK_CURRENT_TIME)
         AreaDestructibles.g_destructiblesManager.onBeforeReplayTimeWarp(self.__rewind)
         self.__updateGunOnTimeWarp = True
         EffectsList.EffectsListPlayer.clear()
         if self.__rewind:
             playerControlMode = BigWorld.player().inputHandler.ctrl
             self.__wasVideoBeforeRewind = _isVideoCameraCtrl(playerControlMode)
             self.__videoCameraMatrix.set(BigWorld.camera().matrix)
             g_replayEvents.onMuteSound(True)
             BigWorld.PyGroundEffectManager().stopAll()
         self.__enableInGameEffects(False)
         if not self.__replayCtrl.beginTimeWarp(time):
             self.__cleanupAfterTimeWarp()
             return
         if self.__timeWarpCleanupCb is None:
             self.__timeWarpCleanupCb = BigWorld.callback(0.0, self.__cleanupAfterTimeWarp)
         g_replayEvents.onTimeWarpStart()
         g_replayEvents.onMuteSound(True)
         return
Example #31
0
 def __updateSound(self, angleDiff):
     if self.__manualSound is None:
         return
     else:
         if self.__gearSound is not None and angleDiff >= _PlayerTurretRotationSoundEffect.__MIN_ANGLE_TO_ENABLE_GEAR:
             if self.__currentSpeedState != self.__SPEED_FAST and self.__currentSpeedState != self.__SPEED_PRE_FAST:
                 nextSpeedState = self.__SPEED_PRE_FAST
             else:
                 nextSpeedState = self.__currentSpeedState
         elif angleDiff >= _PlayerTurretRotationSoundEffect.__MIN_ANGLE_TO_ENABLE_MANUAL:
             nextSpeedState = self.__SPEED_SLOW
         else:
             nextSpeedState = self.__SPEED_IDLE
         stateFn = self.__stateTable[
             self.__currentSpeedState][nextSpeedState]
         if stateFn is not None:
             stateFn()
         self.__currentSpeedState = nextSpeedState
         if g__attachToCam:
             __p = BigWorld.camera().position
         else:
             __p = BigWorld.player().position
         isTurretAlive = BigWorld.player().deviceStates.get(
             'turretRotator', None) is None
         if self.__gearDamagedParam is not None:
             self.__gearDamagedParam.value = 0.0 if isTurretAlive else 1.0
         if self.__manGearDamagedParam is not None:
             self.__manGearDamagedParam.value = 0.0 if isTurretAlive else 1.0
         if self.__manualSound is not None:
             self.__manualSound.position = __p
         if self.__gearSound is not None:
             self.__gearSound.position = __p
         return
 def __setupCamera(self):
     self.__cam = BigWorld.CursorCamera()
     self.__cam.spaceID = self.__spaceId
     self.__cam.pivotMaxDist = _CFG['cam_start_dist']
     self.__cam.pivotMinDist = 0.0
     self.__cam.maxDistHalfLife = _CFG['cam_fluency']
     self.__cam.turningHalfLife = _CFG['cam_fluency']
     self.__cam.movementHalfLife = 0.0
     self.__cam.pivotPosition = _CFG['cam_pivot_pos']
     mat = Math.Matrix()
     mat.setRotateYPR((math.radians(_CFG['cam_start_angles'][0]), math.radians(_CFG['cam_start_angles'][1]), 0.0))
     self.__cam.source = mat
     mat = Math.Matrix()
     mat.setTranslate(_CFG['cam_start_target_pos'])
     self.__cam.target = mat
     BigWorld.camera(self.__cam)
Example #33
0
    def matchState(self):
        '''
            >>> p.getCurrentVisibilityDistances()
            (244.4397548224926, 121.99988086102009)
            p.getCurrentVisionDist() -> 624.999375

            p.getCurrentMaxMainShootRange()
            p.getTorpedoesShootRange()
            p.getCurrentAirDefenceDistance()
        '''
        camera = BigWorld.camera()
        player = BigWorld.player()

        if player:
            seaVisible, airVisible = player.getCurrentVisibilityDistances()
            ranges = {
                'seaVisible': seaVisible,
                'airVisible': airVisible,
                'vision': player.getCurrentVisionDist(),
                'gun': player.getCurrentMaxMainShootRange(),
                'torpedo': player.getTorpedoesShootRange(),
                'airdefense': player.getCurrentAirDefenceDistance(),
            }
        else:
            ranges = None

        return {
            'ranges': ranges,
            'camera': {
                'dir': tuple(camera.direction),
                'fov': camera.fov,
            },
            'players': [player.state() for player in self.players]
        }
 def __updateCameraByMouseMove(self, dx, dy, dz):
     if self.__cam is not BigWorld.camera():
         return
     sourceMat = Math.Matrix(self.__cam.source)
     yaw = sourceMat.yaw
     pitch = sourceMat.pitch
     dist = self.__cam.pivotMaxDist
     currentMatrix = Math.Matrix(self.__cam.invViewMatrix)
     currentYaw = currentMatrix.yaw
     yaw = self.__yawCameraFilter.getNextYaw(currentYaw, yaw, dx)
     from gui.ClientHangarSpace import hangarCFG
     cfg = hangarCFG()
     pitch -= dy * cfg['cam_sens']
     dist -= dz * cfg['cam_dist_sens']
     camPitchConstr = self.__camConstraints[0]
     startPitch, endPitch = camPitchConstr
     pitch = mathUtils.clamp(math.radians(startPitch), math.radians(endPitch), pitch)
     distConstr = cfg['preview_cam_dist_constr'] if self.__selectedEmblemInfo else self.__camConstraints[2]
     minDist, maxDist = distConstr
     dist = mathUtils.clamp(minDist, maxDist, dist)
     self.__locatedOnEmbelem = False
     mat = Math.Matrix()
     mat.setRotateYPR((yaw, pitch, 0.0))
     self.__cam.source = mat
     self.__cam.pivotMaxDist = dist
     if self.settingsCore.getSetting('dynamicFov') and abs(distConstr[1] - distConstr[0]) > 0.001:
         relativeDist = (dist - distConstr[0]) / (distConstr[1] - distConstr[0])
         _, minFov, maxFov = self.settingsCore.getSetting('fov')
         fov = mathUtils.lerp(minFov, maxFov, relativeDist)
         BigWorld.callback(0, partial(FovExtended.instance().setFovByAbsoluteValue, math.radians(fov), 0.1))
Example #35
0
 def onControlModeChanged(self, forceControlMode=None):
     player = BigWorld.player()
     if not self.isPlaying or not isPlayerAvatar():
         return
     else:
         entity = BigWorld.entities.get(self.playerVehicleID)
         if (entity is None
                 or not entity.isStarted) and forceControlMode is None:
             controlMode = self.getControlMode()
             if controlMode == CTRL_MODE_NAME.SNIPER:
                 return
         controlMode = self.getControlMode(
         ) if forceControlMode is None else forceControlMode
         if forceControlMode is None and not self.isControllingCamera and controlMode in _IGNORED_SWITCHING_CTRL_MODES:
             return
         if self.__equipmentId is None and controlMode == CTRL_MODE_NAME.MAP_CASE_ARCADE:
             return
         preferredPos = self.getGunRotatorTargetPoint()
         if controlMode == CTRL_MODE_NAME.MAP_CASE:
             _, 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,
             curVehicleID=self.__replayCtrl.playerVehicleID)
         return
Example #36
0
 def enable(self, targetPos, saveDist):
     self.__prevTime = 0.0
     self.__aimingSystem.enable(targetPos)
     self.__positionHysteresis.update(Vector3(0.0, 0.0, 0.0))
     self.__timeHysteresis.update(BigWorld.timeExact())
     camTarget = MatrixProduct()
     self.__cam.target = camTarget
     self.__cam.source = self.__sourceMatrix
     self.__cam.wg_applyParams()
     BigWorld.camera(self.__cam)
     BigWorld.player().positionControl.moveTo(self.__aimingSystem.hitPoint)
     BigWorld.player().positionControl.followCamera(False)
     self.__rotation = 0.0
     self.__cameraUpdate()
     self.delayCallback(0.0, self.__cameraUpdate)
     self.__needReset = 1
def minimapResetCamera(cam):
    minimap = g_windowsManager.battleWindow.minimap
    if minimap is None:
        return

    if minimap._Minimap__cameraHandle is not None:
        minimap._Minimap__ownUI.delEntry(minimap._Minimap__cameraHandle)

    global gSPGSniperEnabled
    if gSPGSniperEnabled:
        #m = Math.WGStrategicAreaViewMP()
        #m.source = cam._StrategicCamera__aimingSystem._matrix
        #m.baseScale = (1.0, 1.0)
        m = cam._StrategicCamera__aimingSystem._matrix
    else:
        m = Math.WGStrategicAreaViewMP()
        m.source = BigWorld.camera().invViewMatrix
        m.baseScale = (1.0, 1.0)

    minimap._Minimap__cameraHandle = minimap._Minimap__ownUI.addEntry(
        m, minimap.zIndexManager.getIndexByName(Minimap.CAMERA_STRATEGIC))
    minimap._Minimap__ownUI.entryInvoke(
        minimap._Minimap__cameraHandle,
        ('gotoAndStop', [Minimap.CURSOR_STRATEGIC]))
    minimap._Minimap__parentUI.call('minimap.entryInited', [])
Example #38
0
 def __timeWarp(self, time):
     if not self.isPlaying or not self.__enableTimeWarp:
         return
     g_replayEvents.onTimeWarpStart()
     if self.__isFinished:
         self.setPlaybackSpeedIdx(self.__savedPlaybackSpeedIdx)
     self.__isFinished = False
     self.__warpTime = time
     self.__rewind = time < self.__replayCtrl.getTimeMark(
         REPLAY_TIME_MARK_CURRENT_TIME)
     AreaDestructibles.g_destructiblesManager.onBeforeReplayTimeWarp(
         self.__rewind)
     self.__updateGunOnTimeWarp = True
     EffectsList.EffectsListPlayer.clear()
     if self.__rewind:
         playerControlModeName = BigWorld.player().inputHandler.ctrlModeName
         self.__wasVideoBeforeRewind = playerControlModeName == CTRL_MODE_NAME.VIDEO
         self.__videoCameraMatrix.set(BigWorld.camera().matrix)
         BigWorld.PyGroundEffectManager().stopAll()
         BigWorld.wg_clearDecals()
     g_replayEvents.onMuteSound(True)
     self.__enableInGameEffects(False)
     if self.__rewind:
         self.gameplay.postStateEvent(ReplayEventID.REPLAY_REWIND)
     if not self.__replayCtrl.beginTimeWarp(time):
         self.__cleanupAfterTimeWarp()
         return
     self.__rewind = False
 def restartCameraTransition(self, duration):
     if self.__cam is not None and not self.__cameraTransition.isInTransition(
     ):
         self.__isCamInTransition = True
         self.__cameraTransition.start(BigWorld.camera().matrix, self.__cam,
                                       duration)
     return
def makePostmortemCameraMatrix():
    matrix = Math.WGCombinedMP()
    translationSrc = Math.WGTranslationOnlyMP()
    translationSrc.source = BigWorld.player(
    ).consistentMatrices.attachedVehicleMatrix
    matrix.translationSrc = translationSrc
    matrix.rotationSrc = BigWorld.camera().invViewMatrix
    return matrix
Example #41
0
 def disable(self):
     from gui import g_guiResetters
     if self.__onRecreateDevice in g_guiResetters:
         g_guiResetters.remove(self.__onRecreateDevice)
     self.__setModelsToCollideWith([])
     self.__cam.speedTreeTarget = None
     BigWorld.camera(None)
     if self.__shiftKeySensor is not None:
         self.__shiftKeySensor.reset(Math.Vector3())
     self.stopCallback(self.__cameraUpdate)
     self.__movementOscillator.reset()
     self.__impulseOscillator.reset()
     self.__noiseOscillator.reset()
     self.__accelerationSmoother.reset()
     self.__autoUpdateDxDyDz.set(0)
     self.__inputInertia.teleport(self.__calcRelativeDist())
     FovExtended.instance().resetFov()
Example #42
0
def ModCallBack():
	player = BigWorld.player()
	if hasattr(player, 'isOnArena') and player.isOnArena:
		validControlMode = False
		for controlMode in player.inputHandler.ctrls:
			if controlMode in g_modSetting['controlModes'] and player.inputHandler.ctrl == player.inputHandler.ctrls[controlMode]:
				validControlMode = True
				break
		
		for vehicle in player.vehicles:	
			if not vehicle.isAlive():
				continue
			
			isFriend = player.team == vehicle.publicInfo['team']
			if isFriend:
				if not g_modSetting['isFriendBlur'] or player.playerVehicleID == vehicle.id:
					continue
			else:
				if not g_modSetting['isEnemyBlur']:
					continue
			
			isTarget = BigWorld.target() and BigWorld.target().id == vehicle.id
			if isTarget:
				vehicle.removeEdge()
				vehicle.drawEdge(2 if isFriend else 1, 0)
				continue
			
			if not validControlMode:
				vehicle.removeEdge()
				continue
			
			distToVeh = (BigWorld.camera().position - vehicle.position).length
			if distToVeh > g_modSetting['distanceToBlur']:
				if not isInAngle(vehicle.position) or distToVeh > g_modSetting['disAngleToBlur']:
					vehicle.removeEdge()
					continue
			
			if g_modSetting['isFullBlur'] and isRayAtVehicle(BigWorld.camera().position, vehicle.appearance.modelsDesc['gun']['model'].position):
				vehicle.removeEdge()
				continue
			
			vehicle.drawEdge(3 if g_modSetting['isCustomColors'] else 0, 0 if g_modSetting['isFullBlur'] else 1)
			
	BigWorld.callback(0.1, ModCallBack)
	
	return
Example #43
0
 def enable(self,
            targetPos,
            saveDist,
            switchToPos=None,
            switchToPlace=None):
     BigWorld.wg_trajectory_drawer().setStrategicMode(False)
     self.__prevTime = 0.0
     if switchToPlace == SwitchToPlaces.TO_TRANSITION_DIST:
         self.__camDist = math_utils.clamp(self._cfg['distRange'][0],
                                           self._cfg['distRange'][1],
                                           self._cfg['transitionDist'])
     elif switchToPlace == SwitchToPlaces.TO_RELATIVE_POS and switchToPos is not None:
         minDist, maxDist = self._cfg['distRange']
         self.__camDist = (maxDist - minDist) * switchToPos + minDist
     elif switchToPlace == SwitchToPlaces.TO_NEAR_POS and switchToPos is not None:
         minDist, maxDist = self._cfg['distRange']
         self.__camDist = math_utils.clamp(minDist, maxDist, switchToPos)
     elif self.settingsCore.getSetting(SPGAim.AUTO_CHANGE_AIM_MODE):
         self.__camDist = math_utils.clamp(self._cfg['distRange'][0],
                                           self._cfg['transitionDist'],
                                           self.__camDist)
     self.__desiredCamDist = self.__camDist
     self.__scrollSmoother.start(self.__desiredCamDist)
     self.__enableSwitchers()
     self.__aimingSystem.enable(targetPos)
     self.__positionHysteresis.update(Vector3(0.0, 0.0, 0.0))
     self.__timeHysteresis.update(BigWorld.timeExact())
     camTarget = MatrixProduct()
     self.__rotation = max(self.__aimingSystem.direction.pitch,
                           self._cfg['minimalPitch'])
     cameraDirection = self.__getCameraDirection()
     self.__targetMatrix.translation = self.aimingSystem.aimPoint - cameraDirection.scale(
         self.__camDist)
     self.__cam.target = camTarget
     self.__cam.target.b = self.__targetMatrix
     self.__sourceMatrix = math_utils.createRotationMatrix(
         (cameraDirection.yaw, -cameraDirection.pitch, 0.0))
     self.__cam.source = self.__sourceMatrix
     self.__cam.forceUpdate()
     BigWorld.camera(self.__cam)
     BigWorld.player().positionControl.moveTo(self.__aimingSystem.hitPoint)
     BigWorld.player().positionControl.followCamera(False)
     self.__cameraUpdate()
     self.delayCallback(0.01, self.__cameraUpdate)
     self.__needReset = 1
     return
Example #44
0
 def __onSettingsChanged(self, diff):
     if 'increasedZoom' in diff:
         self.__cfg['increasedZoom'] = diff['increasedZoom']
         if not self.__cfg['increasedZoom']:
             self.__cfg['zoom'] = self.__zoom = self.__cfg['zooms'][:3][-1]
             self.delayCallback(0.0, self.__applyZoom, self.__cfg['zoom'])
     if 'fov' in diff and self.camera is BigWorld.camera():
         self.delayCallback(0.01, self.__applyZoom, self.__cfg['zoom'])
Example #45
0
 def enable(self, targetPos, saveZoom):
     player = BigWorld.player()
     if not saveZoom:
         self.__zoom = self.__cfg['zoom']
     self.__fov = BigWorld.projection().fov
     self.__dxdydz = [0, 0, 0]
     self.__applyFOV(self.__fov / self.__zoom)
     self.__setupCamera(targetPos)
     vehicle = BigWorld.entity(player.playerVehicleID)
     if vehicle is None:
         self.__whiteVehicleCallbackId = BigWorld.callback(
             0.1, self.__waitVehicle)
     else:
         self.__showVehicle(False)
     BigWorld.camera(self.__cam)
     self.__cameraUpdate()
     return
Example #46
0
def testAllocate(spaceID):
    import items.vehicles
    vehicleDesc = items.vehicles.VehicleDescr(
        typeName=items.vehicles.g_cache.vehicle(0, 1).name)
    entityId = BigWorld.createEntity('OfflineEntity', spaceID, 0,
                                     BigWorld.camera().position, (0, 0, 0),
                                     dict())
    return CrashedTrackController(vehicleDesc, BigWorld.entity(entityId))
 def __destroyCameras(self):
     if self.__c11nCamera is not None:
         self.__c11nCamera.stop()
     if self.__hangarCameraManager is not None and self.__hangarCameraManager.camera is not None:
         hangarCamera = self.__hangarCameraManager.camera
         from gui.ClientHangarSpace import hangarCFG
         cfg = hangarCFG()
         hangarCamera.maxDistHalfLife = cfg['cam_fluency']
         hangarCamera.turningHalfLife = cfg['cam_fluency']
         hangarCamera.movementHalfLife = cfg['cam_fluency']
         BigWorld.camera(hangarCamera)
     if self.__hangarCameraManager is not None:
         self.__hangarCameraManager.setC11nDistMode(False)
         self.__hangarCameraManager.handleInactiveCamera = False
     self.__c11nCamera = None
     self.__hangarCameraManager = None
     return
Example #48
0
 def enable(self,
            preferredPos=None,
            closesDist=False,
            postmortemParams=None,
            turretYaw=None,
            gunPitch=None,
            isRemoteCamera=False):
     replayCtrl = BattleReplay.g_replayCtrl
     if replayCtrl.isRecording:
         replayCtrl.setAimClipPosition(self.__aimOffset)
     self.measureDeltaTime()
     camDist = None
     vehicle = BigWorld.player().getVehicleAttached()
     initialVehicleMatrix = BigWorld.player().getOwnVehicleMatrix(
     ) if vehicle is None else vehicle.matrix
     vehicleMProv = initialVehicleMatrix
     if not self.__postmortemMode:
         if closesDist:
             camDist = self.__cfg['distRange'][0]
     elif postmortemParams is not None:
         self.__aimingSystem.yaw = postmortemParams[0][0]
         self.__aimingSystem.pitch = postmortemParams[0][1]
         camDist = postmortemParams[1]
     else:
         camDist = self.__cfg['distRange'][1]
     replayCtrl = BattleReplay.g_replayCtrl
     if replayCtrl.isPlaying:
         camDist = None
         vehicle = BigWorld.entity(replayCtrl.playerVehicleID)
         if vehicle is not None:
             vehicleMProv = vehicle.matrix
     if camDist is not None:
         self.setCameraDistance(camDist)
     else:
         self.__inputInertia.teleport(self.__calcRelativeDist())
     self.vehicleMProv = vehicleMProv
     self.__setModelsToCollideWith(self.__vehiclesToCollideWith)
     self.__isRemoteCamera = isRemoteCamera
     BigWorld.camera(self.__cam)
     self.__aimingSystem.enable(preferredPos, turretYaw, gunPitch)
     self.__aimingSystem.aimMatrix = self.__calcAimMatrix()
     self.__cameraUpdate()
     self.delayCallback(0.0, self.__cameraUpdate)
     from gui import g_guiResetters
     g_guiResetters.add(self.__onRecreateDevice)
     return
Example #49
0
 def handleKeyEvent(self, event):
     if self.__videoCamera is None:
         return
     else:
         if BigWorld.isKeyDown(Keys.KEY_CAPSLOCK) and event.isKeyDown(
         ) and event.key == Keys.KEY_F3:
             self.__enabled = not self.__enabled
             if self.__enabled:
                 self.__overriddenCamera = BigWorld.camera()
                 self.__videoCamera.enable()
             else:
                 self.__videoCamera.disable()
                 BigWorld.camera(self.__overriddenCamera)
         if self.__enabled:
             return self.__videoCamera.handleKeyEvent(
                 event.key, event.isKeyDown())
         return False
def handleKeyEvent(event):
    global g_curCameraTransform
    if not g_offlineModeEnabled or not BigWorld.camera():
        return False
    BigWorld.camera().handleKeyEvent(event)
    if not event.isKeyDown():
        return False
    if event.key in MOUSE_TOGGLE_KEYS:
        GUI.mcursor().visible = not GUI.mcursor().visible
    elif event.key == Keys.KEY_ADD:
        adjustFOV(+FOV_ADJUST)
    elif event.key == Keys.KEY_NUMPADMINUS:
        adjustFOV(-FOV_ADJUST)
    elif event.key == Keys.KEY_F:
        newFixed = not BigWorld.camera().fixed
        BigWorld.camera().fixed = newFixed
        GUI.mcursor().visible = newFixed
        GUI.mcursor().clipped = not newFixed
    elif event.key == Keys.KEY_1:
        _setCameraTransform(0)
    elif event.key == Keys.KEY_2:
        _setCameraTransform(1)
    elif event.key == Keys.KEY_3:
        _setCameraTransform(2)
    elif event.key == Keys.KEY_4:
        _setCameraTransform(3)
    elif event.key == Keys.KEY_5:
        _setCameraTransform(4)
    elif event.key == Keys.KEY_6:
        _setCameraTransform(5)
    elif event.key == Keys.KEY_7:
        _setCameraTransform(6)
    elif event.key == Keys.KEY_8:
        _setCameraTransform(7)
    elif event.key == Keys.KEY_M:
        g_curCameraTransform = _clampCameraTransformIdx(g_curCameraTransform +
                                                        1)
        _setCameraTransform(g_curCameraTransform)
    elif event.key == Keys.KEY_N:
        g_curCameraTransform = _clampCameraTransformIdx(g_curCameraTransform -
                                                        1)
        _setCameraTransform(g_curCameraTransform)
    elif event.key == Keys.KEY_R:
        _addCameraTransform()
    return True
Example #51
0
    def enable(self, doEnable):
        if self.__isEnabled == doEnable:
            return
        if not doEnable:
            self.__isEnabled = False
            BigWorld.camera(self.__savedCamera)
            BigWorld.wg_enableSuperShot(False, False)
            for k, v in self.__savedWatchers.iteritems():
                BigWorld.setWatcher(k, v)

            LOG_DEBUG('Vertical screenshot camera is disabled')
            return
        self.__isEnabled = True
        self.__savedCamera = BigWorld.camera()
        arenaBB = BigWorld.wg_getSpaceBounds()
        centerXZ = Math.Vector2(0.5 * (arenaBB[0] + arenaBB[2]), 0.5 * (arenaBB[1] + arenaBB[3]))
        halfSizesXZ = Math.Vector2(0.5 * (arenaBB[2] - arenaBB[0]), 0.5 * (arenaBB[3] - arenaBB[1]))
        camFov = math.radians(15.0)
        camPos = Math.Vector3(centerXZ.x, 0, centerXZ.z)
        aspectRatio = 1.0
        if not BigWorld.isVideoWindowed():
            aspectRatio = BigWorld.getFullScreenAspectRatio()
        else:
            aspectRatio = BigWorld.screenWidth() / BigWorld.screenHeight()
        camPos.y = max(halfSizesXZ.x / math.sin(0.5 * camFov * aspectRatio), halfSizesXZ.y / math.sin(0.5 * camFov))
        camMatr = Math.Matrix()
        camMatr.setRotateYPR(Math.Vector3(0.0, math.pi * 0.5, 0.0))
        camMatr.translation = camPos
        camMatr.invert()
        self.__cam = BigWorld.FreeCamera()
        self.__cam.set(camMatr)
        BigWorld.camera(self.__cam)
        BigWorld.wg_enableSuperShot(True, False)
        self.__savedWatchers = {}
        for name in self.__watcherNames:
            self.__savedWatchers[name] = BigWorld.getWatcher(name)
            if name.startswith('Visibility'):
                BigWorld.setWatcher(name, False)

        BigWorld.setWatcher('Client Settings/std fog/enabled', False)
        BigWorld.setWatcher('Render/Fov', camFov)
        BigWorld.setWatcher('Render/Near Plane', max(0.1, camPos.y - 1000.0))
        BigWorld.setWatcher('Render/Far Plane', camPos.y + 1000.0)
        BigWorld.setWatcher('Client Settings/Script tick', False)
        LOG_DEBUG('Vertical screenshot camera is enabled')
 def _onInput(self, enable):
     global isFreeHangarCamera
     global hangarCameraOldMatrix
     if IS_CLIENT:
         if g_hangarSpace is not None:
             clientHangarSpace = g_hangarSpace.space
             if clientHangarSpace:
                 if enable and not isFreeHangarCamera:
                     hangarCameraOldMatrix = BigWorld.camera().parentMatrix
                     clientHangarSpace.hangarCamera.setState(
                         CameraState.SuperFree)
                     isFreeHangarCamera = True
                 if not enable and isFreeHangarCamera:
                     BigWorld.camera().parentMatrix = hangarCameraOldMatrix
                     clientHangarSpace.hangarCamera.setDirectAngle(0, 0)
                     clientHangarSpace.hangarCamera.leaveState()
                     isFreeHangarCamera = False
     return 'out'
Example #53
0
def assembleCompoundModel2(models, position, vehicleDesc):
    worldMatrix = mathUtils.createTranslationMatrix(position)
    chassisFashion = BigWorld.WGVehicleFashion()
    VehicleAppearance.setupTracksFashion(chassisFashion, vehicleDesc)
    fashions.append(chassisFashion)
    gunFashion = BigWorld.WGGunRecoil('G')
    fashions.append(gunFashion)
    assembler = prepareCompoundAssembler(vehicleDesc, ModelStates.UNDAMAGED, BigWorld.camera().spaceID if BigWorld.player().spaceID == 0 else BigWorld.player().spaceID)
    BigWorld.loadResourceListBG((assembler,), functools.partial(setupTank, chassisFashion, gunFashion, vehicleDesc, worldMatrix))
Example #54
0
def getAimedAtPositionWithinBorders(aimOffsetX, aimOffsetY):
    ray, _ = getWorldRayAndPoint(aimOffsetX, aimOffsetY)
    player = BigWorld.player()
    staticHitPoint = BigWorld.wg_collideSegment(
        player.spaceID,
        BigWorld.camera().position,
        BigWorld.camera().position + ray * 100000, 128)
    if staticHitPoint is not None:
        staticHitPoint = staticHitPoint.closestPoint
        boundingBox = player.arena.arenaType.boundingBox
        if not boundingBox[0][0] <= staticHitPoint.x <= boundingBox[1][
                0] or not boundingBox[0][1] <= staticHitPoint.z <= boundingBox[
                    1][1]:
            return
        return staticHitPoint
    else:
        return
        return
Example #55
0
    def removeVehicleToCollideWith(self, vehicleAppearance):
        modelsDesc = vehicleAppearance.modelsDesc
        for model in (modelsDesc['hull']['model'], modelsDesc['turret']['model']):
            for existingModel in self.__modelsToCollideWith:
                if existingModel is model:
                    self.__modelsToCollideWith.remove(model)

        if BigWorld.camera() == self.__cam:
            self.__setModelsToCollideWith(self.__modelsToCollideWith)
Example #56
0
def _makeWorldMatrix(positionMatrix):
    sr = GUI.screenResolution()
    aspect = sr[0] / sr[1]
    proj = BigWorld.projection()
    worldMatrix = Math.Matrix()
    worldMatrix.perspectiveProjection(proj.fov, aspect, proj.nearPlane, proj.farPlane)
    worldMatrix.preMultiply(BigWorld.camera().matrix)
    worldMatrix.preMultiply(positionMatrix)
    return worldMatrix
def _calcScale(worldMatrix, size):
    """Calculate scaling in clip space
    :param worldMatrix: result of function _makeWorldMatrix.
    :param size: size of gun marker.
    :return: float containing scale in clip space.
    """
    pointMat = Math.Matrix()
    pointMat.set(BigWorld.camera().matrix)
    transl = Math.Matrix()
    transl.setTranslate(Math.Vector3(size, 0, 0))
    pointMat.postMultiply(transl)
    pointMat.postMultiply(BigWorld.camera().invViewMatrix)
    p = pointMat.applyToOrigin()
    pV4 = worldMatrix.applyV4Point(Math.Vector4(p[0], p[1], p[2], 1))
    oV4 = worldMatrix.applyV4Point(Math.Vector4(0, 0, 0, 1))
    pV3 = Math.Vector3(pV4[0], pV4[1], pV4[2]).scale(1.0 / pV4[3])
    oV3 = Math.Vector3(oV4[0], oV4[1], oV4[2]).scale(1.0 / oV4[3])
    return math.fabs(pV3[0] - oV3[0]) + math.fabs(pV3[1] - oV3[1])
Example #58
0
 def enable(self,
            preferredPos=None,
            closesDist=False,
            postmortemParams=None):
     camSource = None
     camDist = None
     camTarget = BigWorld.player().getOwnVehicleMatrix()
     camTargetTransOnly = Math.WGTranslationOnlyMP()
     camTargetTransOnly.source = camTarget
     camTarget = Math.MatrixProduct()
     shift = Math.Matrix()
     shift.setIdentity()
     camTarget.a = shift
     camTarget.b = camTargetTransOnly
     if not self.__postmortemMode:
         if preferredPos is not None:
             self.__calcStartAngles(camTarget, preferredPos)
         if closesDist:
             camDist = self.__cfg['distRange'][0]
     elif postmortemParams is not None:
         self.__yaw = postmortemParams[0][0]
         self.__pitch = postmortemParams[0][1]
         camDist = postmortemParams[1]
         camSource = Math.Matrix()
         camSource.setRotateYPR((self.__yaw, self.__pitch, 0))
     else:
         camDist = self.__cfg['distRange'][1]
     replayCtrl = BattleReplay.g_replayCtrl
     if replayCtrl.isPlaying:
         camDist = None
         vehicle = BigWorld.entity(replayCtrl.playerVehicleID)
         if vehicle is not None:
             camTarget = vehicle.matrix
     if camDist is not None:
         self.__camDist = camDist
         self.__cam.pivotMaxDist = camDist
     if camSource is not None:
         self.__cam.source = camSource
     self.__cam.target = camTarget
     self.__cam.sptHiding = True
     self.__cam.wg_setModelsToCollideWith(self.__modelsToCollideWith)
     BigWorld.camera(self.__cam)
     self.__cameraUpdate()
     return
 def _onInput(self, position, targetPos):
     localPos = targetPos - position
     localPos.normalise()
     yawOnTarget = math.atan2(localPos.x, localPos.z)
     pitchOnTarget = -math.asin(clamp(-1.0, localPos.y, 1.0))
     if self.prevYaw:
         alternativeYaw = yawOnTarget - math.pi if yawOnTarget > 0 else yawOnTarget + math.pi
         if math.fabs(alternativeYaw -
                      self.prevYaw) < math.fabs(yawOnTarget - self.prevYaw):
             yawOnTarget = alternativeYaw
             pitchOnTarget = math.pi - pitchOnTarget if pitchOnTarget > 0 else -math.pi - pitchOnTarget
     self.prevYaw = yawOnTarget
     self._matrix.setRotateYPR((yawOnTarget, pitchOnTarget, 0))
     self._matrix.translation = position
     if self.prevMatrixYaw:
         if math.fabs(self.prevMatrixYaw - self._matrix.yaw) > 0.1:
             self.skipFrames = SetCameraPosAndTarget.FRAMES_TO_SKIP
         elif math.fabs(self.prevMatrixPitch - self._matrix.pitch) > 0.1:
             self.skipFrames = SetCameraPosAndTarget.FRAMES_TO_SKIP
         elif math.fabs(self.prevMatrixRoll - self._matrix.roll) > 0.1:
             self.skipFrames = SetCameraPosAndTarget.FRAMES_TO_SKIP
     else:
         self.prevMatrixYaw = self._matrix.yaw
         self.prevMatrixPitch = self._matrix.pitch
         self.prevMatrixRoll = self._matrix.roll
     if self.skipFrames > 0:
         self.skipFrames = self.skipFrames - 1
         self._parent.translation = self._matrix.translation
     else:
         self._parent.set(self._matrix)
         if math.fabs(
                 math.fabs(self.prevMatrixYaw) -
                 math.fabs(self._matrix.yaw)) < 0.05 and math.fabs(
                     math.fabs(self.prevMatrixPitch) -
                     math.fabs(self._matrix.pitch)) < 0.05:
             self.prevMatrixYaw = self._matrix.yaw
             self.prevMatrixPitch = self._matrix.pitch
             self.prevMatrixRoll = self._matrix.roll
     if IS_CLIENT:
         if g_hangarSpace is not None:
             clientHangarSpace = g_hangarSpace.space
             if clientHangarSpace:
                 strategy = clientHangarSpace.hangarCamera.getStateStrategy(
                 )
                 if strategy and isinstance(
                         strategy, BigWorld.CameraStrategySuperFree):
                     strategy.parentProvider = self._parent
                     BigWorld.camera().parentMatrix = self._parent
                     clientHangarSpace.hangarCamera.setDirectAngle(
                         yawOnTarget, pitchOnTarget)
     else:
         import WorldEditor
         self._inverted.set(self._parent)
         self._inverted.invert()
         WorldEditor.camera(0).view = self._inverted
     return 'out'
Example #60
0
def onBulletExplosion(effectId, startPos, end):
    MAX_DIST_TO_CAMERA = 300
    distToCamera = BigWorld.camera().position.distTo(end)
    if distToCamera < MAX_DIST_TO_CAMERA:
        bulletDir = end - startPos
        EffectManager.g_instance.createWorldEffect(
            effectId, end, {
                'variant': 'OTHER',
                'rotation': Math.Vector3(bulletDir.yaw, bulletDir.pitch, 0)
            })