Beispiel #1
0
 private static void OnControllerCreate(CameraForge.CameraController c)
 {
     if (c.camera == Camera.main)
     {
         camc = c;
         Start();
     }
 }
Beispiel #2
0
 private static void OnControllerDestroy(CameraForge.CameraController c)
 {
     if (c.camera == Camera.main)
     {
         UserVarManager.ResetAllGlobalVars();
         camc = null;
     }
 }
Beispiel #3
0
    private static void AfterControllerPlay(CameraForge.CameraController c)
    {
        SyncNearCamera();
        if (UISightingTelescope.Instance != null)
        {
//			UISightingTelescope.Instance.isShow = c.pose.lockCursor;
            UISightingTelescope.Instance.UpdateType();
        }

        if (null != Pathea.MainPlayerCmpt.gMainPlayer)
        {
            Pathea.MainPlayerCmpt.gMainPlayer.UpdateCamDirection(c.transform.forward);
        }
    }
Beispiel #4
0
    public static void SetFreeCameraMode()
    {
        if (SceneMan.self == null)
        {
            Debug.LogError("[SetFreeCameraMode]Invalid scene");
            return;
        }
        _freeCameraMode = !_freeCameraMode;
        if (_freeCameraMode)
        {
            CameraForge.CameraController camCtrlr = Camera.main.GetComponent <CameraForge.CameraController> ();
            if (camCtrlr != null)
            {
                camCtrlr.enabled = false;
            }
            FreeCamera freeCam = Camera.main.GetComponent <FreeCamera> ();
            if (freeCam != null)
            {
                camCtrlr.enabled = true;
            }
            else
            {
                Camera.main.gameObject.AddComponent <FreeCamera> ();
            }
        }
        else
        {
            FreeCamera freeCam = Camera.main.GetComponent <FreeCamera> ();
            if (freeCam != null)
            {
                GameObject.Destroy(freeCam);
            }

            CameraForge.CameraController camCtrlr = Camera.main.GetComponent <CameraForge.CameraController> ();
            if (camCtrlr != null)
            {
                camCtrlr.enabled = true;
            }
        }
        Debug.LogError("[SetFreeCameraMode]FreeCameraMode:" + _freeCameraMode);
        return;
    }
Beispiel #5
0
    static void AfterCamera(CameraForge.CameraController camc)
    {
        if (Nova != null)
        {
            #region UNDERWATER

            // 先用voxel粗略判断是否在水中
            Vector3 camPos     = camc.pose.position;
            bool    underwater = false;
            if ((camPos.x < 0 || camPos.z < 0) && Pathea.PeGameMgr.IsStory)
            {
                underwater = false;
            }
            else if (camPos.y < 0 && camPos.y > -100)
            {
                underwater = true;
            }
            else
            {
                underwater = PETools.PEUtil.CheckPositionUnderWater(camPos);
            }

            // 设置一个underwater的目标值, 等于0则不在水中,值越大则越深
            // 若在水中,初值设为50米。(若检测不到水面碰撞,就按50米处理了)
            float uw_target = underwater ? 50f : 0f;

            // 检测水面碰撞,计算摄像机在水中的深度
            RaycastHit rch_water;
            RaycastHit rch_water_up;
            if (Physics.Raycast(new Ray(camc.pose.position + Vector3.up * 200f, Vector3.down), out rch_water, 200f, 1 << Pathea.Layer.Water))
            {
                // 反向查询水的下边缘,不能查到,查到则不在水中
                if (!Physics.Raycast(new Ray(camc.pose.position, Vector3.up), out rch_water_up, 200f, 1 << Pathea.Layer.Water))
                {
                    // 特殊处理 ?
                    if (Pathea.PeGameMgr.IsMultiStory && PlayerNetwork.mainPlayer != null && (PlayerNetwork.mainPlayer._curSceneId != -1 && PlayerNetwork.mainPlayer._curSceneId != (int)Pathea.SingleGameStory.StoryScene.MainLand))
                    {
                        ;
                    }
                    else
                    {
                        uw_target = 200f - rch_water.distance;
                    }
                }
            }

            // 若粗测显示不在水中,而水深大于2米,则矛盾,置为0
            if (!underwater && uw_target > 2f)
            {
                uw_target = 0;
            }

            // 应用水下效果
            if ((Nova.Underwater > 0f) != underwater)
            {
                if (!underwater)
                {
                    Nova.Underwater = 0f;
                }
                else
                {
                    Nova.Underwater = 0.01f;
                }
                Nova.Output.Apply();
            }
            Nova.Underwater = Mathf.Lerp(Nova.Underwater, uw_target, 0.2f);

            #endregion
        }
    }