def _setCameraLocation(self, targetPos=None, pivotPos=None, yaw=None, pitch=None, dist=None, camConstraints=None, ignoreConstraints=False, smothiedTransition=True, previewMode=False): from gui.ClientHangarSpace import customizationHangarCFG customCfg = customizationHangarCFG() self.__hangarCameraManager.camera.maxDistHalfLife = customCfg[ 'cam_fluency'] self.__hangarCameraManager.camera.turningHalfLife = customCfg[ 'cam_fluency'] self.__hangarCameraManager.camera.movementHalfLife = customCfg[ 'cam_fluency'] self.__hangarCameraManager.setCameraLocation( targetPos=targetPos, pivotPos=pivotPos, yaw=yaw, pitch=pitch, dist=dist, camConstraints=camConstraints, ignoreConstraints=ignoreConstraints, smothiedTransition=smothiedTransition, previewMode=previewMode, verticalOffset=_VERTICAL_OFFSET) self._startCameraMovement()
def locateCameraToCustomizationPreview(self, forceLocate=False, preserveAngles=False, updateTankCentralPoint=False): if self.__hangarCameraManager is None or self.__hangarCameraManager.camera is None: return else: from gui.ClientHangarSpace import customizationHangarCFG, hangarCFG cfg = customizationHangarCFG() hangarConfig = hangarCFG() self.__rotateTurretAndGun() if self.__tankCentralPoint is None or updateTankCentralPoint: self.__tankCentralPoint = self.__getTankCentralPoint() worldPos = self.__tankCentralPoint if worldPos: pivotPos = Math.Vector3(0, 0, 0) else: worldPos = cfg['cam_start_target_pos'] pivotPos = cfg['cam_pivot_pos'] if preserveAngles: matrix = Math.Matrix(self.__hangarCameraManager.camera.invViewMatrix) previewYaw = matrix.yaw previewPitch = self.__prevPitch or 0.0 else: previewYaw = math.radians(cfg['cam_start_angles'][0]) previewPitch = math.radians(cfg['cam_start_angles'][1]) self._setCameraLocation(targetPos=worldPos, pivotPos=pivotPos, yaw=previewYaw, pitch=previewPitch, dist=cfg['cam_start_dist'], camConstraints=[hangarConfig['cam_pitch_constr'], hangarConfig['cam_yaw_constr'], cfg['cam_dist_constr']], forceLocate=forceLocate) self.__currentMode = C11nCameraModes.PREVIEW self.enableMovementByMouse() self.__prevPitch = None return
def __getDistConstraints(self, position, commonConstraints=None, startingPoint=None): if commonConstraints is None or startingPoint is None: from gui.ClientHangarSpace import customizationHangarCFG cfg = customizationHangarCFG() commonConstraints = commonConstraints or cfg['cam_dist_constr'] startingPoint = startingPoint or cfg['cam_start_target_pos'] return (commonConstraints[0], commonConstraints[1] - (position[1] - startingPoint[1]))
def locateCameraToCustomizationPreview(self): from gui.ClientHangarSpace import customizationHangarCFG, hangarCFG cfg = customizationHangarCFG() hangarConfig = hangarCFG() self.setCameraLocation(targetPos=cfg['cam_start_target_pos'], pivotPos=cfg['cam_pivot_pos'], yaw=math.radians(cfg['cam_start_angles'][0]), pitch=math.radians(cfg['cam_start_angles'][1]), dist=cfg['cam_start_dist'], camConstraints=[ hangarConfig['cam_pitch_constr'], hangarConfig['cam_yaw_constr'], cfg['cam_dist_constr'] ])
def locateCameraToCustomizationPreview(self, preserveAngles=False, forceLocate=False): if self.__hangarCameraManager is None or self.__hangarCameraManager.camera is None: return else: from gui.ClientHangarSpace import customizationHangarCFG, hangarCFG cfg = customizationHangarCFG() hangarConfig = hangarCFG() vEntity = BigWorld.entity( self.__hangarCameraManager.getCurrentEntityId()) from HangarVehicle import HangarVehicle pivotPos = cfg['cam_pivot_pos'] if isinstance(vEntity, HangarVehicle): appearance = vEntity.appearance hullAABB = appearance.collisions.getBoundingBox( TankPartIndexes.HULL) position = Math.Vector3((hullAABB[1].x + hullAABB[0].x) / 2.0, hullAABB[1].y / 2.0, (hullAABB[1].z + hullAABB[0].z) / 2.0) m = Math.Matrix( appearance.compoundModel.node(TankPartNames.HULL)) worldPos = m.applyPoint(position) pivotPos = Math.Vector3(0, 0, 0) else: worldPos = cfg['cam_start_target_pos'] if preserveAngles: matrix = Math.Matrix( self.__hangarCameraManager.camera.invViewMatrix) previewYaw = matrix.yaw previewPitch = self.__prevPitch or 0.0 else: previewYaw = math.radians(cfg['cam_start_angles'][0]) previewPitch = math.radians(cfg['cam_start_angles'][1]) self._setCameraLocation(targetPos=worldPos, pivotPos=pivotPos, yaw=previewYaw, pitch=previewPitch, dist=cfg['cam_start_dist'], camConstraints=[ hangarConfig['cam_pitch_constr'], hangarConfig['cam_yaw_constr'], cfg['cam_dist_constr'] ], smothiedTransition=not forceLocate) self.__prevPitch = None return
def locateCameraToStyleInfoPreview(self, forceLocate=False): if self.__hangarCameraManager is None or self.__hangarCameraManager.camera is None: return else: self.__savePitch() from gui.ClientHangarSpace import customizationHangarCFG, hangarCFG cfg = customizationHangarCFG() hangarConfig = hangarCFG() if self.__tankCentralPoint is None: self.__tankCentralPoint = self.__getTankCentralPoint() dist = cfg['cam_start_dist'] targetPos = copy(self.__tankCentralPoint) distConstraints = copy(cfg['cam_dist_constr']) if self.vEntity is not None and self.vEntity.appearance is not None and self.vEntity.appearance.compoundModel is not None: appearance = self.vEntity.appearance mat = Math.Matrix() mat.setRotateYPR((_STYLE_INFO_YAW, -_STYLE_INFO_PITCH, 0.0)) pivotDir = mat.applyVector(Math.Vector3(1, 0, 0)) pivotDir = Math.Vector3(pivotDir.x, 0, pivotDir.z) pivotDir.normalise() hullAABB = appearance.collisions.getBoundingBox(TankPartIndexes.HULL) width = hullAABB[1].x - hullAABB[0].x length = hullAABB[1].z - hullAABB[0].z height = hullAABB[1].y - hullAABB[0].y hullViewSpaceX = width * abs(math.cos(_STYLE_INFO_YAW)) + length * abs(math.sin(_STYLE_INFO_YAW)) hullViewSpaceZ = width * abs(math.sin(_STYLE_INFO_YAW)) + length * abs(math.cos(_STYLE_INFO_YAW)) aspect = BigWorld.getAspectRatio() halfFOVTan = math.tan(BigWorld.projection().fov * 0.5) distW = hullViewSpaceX / (_STYLE_INFO_MAX_VEHICLE_WIDTH * 2 * halfFOVTan * aspect) distH = height / (_STYLE_INFO_MAX_VEHICLE_HEIGHT * 2 * halfFOVTan) + hullViewSpaceZ * 0.5 dist = max(distH, distW) distConstraints.y = _STYLE_INFO_MAX_CAMERA_DIST halfHeight = dist * halfFOVTan halfWidth = halfHeight * aspect targetPos += pivotDir * halfWidth * _STYLE_INFO_VEHICLE_SCREEN_X_SHIFT futureCamDir = mat.applyVector(Math.Vector3(0, 0, 1)) futureCamPos = targetPos - futureCamDir * dist paramsDOF = None if isRendererPipelineDeferred(): paramsDOF = self.__getStyleInfoDOFParams(futureCamPos) self.__ctx.events.onUpdateStyleInfoDOF(paramsDOF) self._setCameraLocation(targetPos=targetPos, pivotPos=-Math.Vector3(0, 0, 0), yaw=_STYLE_INFO_YAW, pitch=_STYLE_INFO_PITCH, dist=dist, camConstraints=[hangarConfig['cam_pitch_constr'], hangarConfig['cam_yaw_constr'], distConstraints], forceLocate=forceLocate, forceRotate=True) self.__currentMode = C11nCameraModes.STYLE_INFO self.enableMovementByMouse(enableRotation=False, enableZoom=False) return
def moveHangarVehicleToCustomizationRoom(self): from gui.ClientHangarSpace import customizationHangarCFG cfg = customizationHangarCFG() targetPos = cfg['v_start_pos'] yaw = math.radians(cfg['v_start_angles'][0]) pitch = math.radians(cfg['v_start_angles'][1]) roll = math.radians(cfg['v_start_angles'][2]) shadowYOffset = cfg[ 'shadow_forward_y_offset'] if BigWorld.getGraphicsSetting( 'RENDER_PIPELINE') == 1 else cfg['shadow_deferred_y_offset'] g_eventBus.handleEvent(events.HangarCustomizationEvent( events.HangarCustomizationEvent.CHANGE_VEHICLE_MODEL_TRANSFORM, ctx={ 'targetPos': targetPos, 'rotateYPR': (yaw, pitch, roll), 'shadowYOffset': shadowYOffset }), scope=EVENT_BUS_SCOPE.LOBBY)
def __initCameras(self): if self.__hangarCameraManager is None: return else: hangarCamera = self.__hangarCameraManager.camera if hangarCamera is None: return self.__c11nCamera = BigWorld.SphericalTransitionCamera(hangarCamera, _VERTICAL_OFFSET) targetPos = Math.Matrix(hangarCamera.target).translation self.__c11nCamera.moveTo(targetPos, 0.0) BigWorld.camera(self.__c11nCamera) from gui.ClientHangarSpace import customizationHangarCFG customCfg = customizationHangarCFG() hangarCamera.maxDistHalfLife = customCfg['cam_fluency'] hangarCamera.turningHalfLife = customCfg['cam_fluency'] hangarCamera.movementHalfLife = customCfg['cam_fluency'] self.__hangarCameraManager.handleInactiveCamera = True self.__updateScreenSpaceOffset(_VERTICAL_OFFSET) return