using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityStandardAssets.Characters.FirstPerson;
namespace UnityCommon
{
///
/// µÚÒ»È˳Æ
///
public class FPState : CameraState
{
MyFirstPersonController fpsController;
CharacterController characterController;
private Vector3 initPosition;
private Vector3 initRotation;
Transform tfCameraPosition;
private float rotation_y;
public FPState(Camera camera, Vector3 position, Quaternion rotation, MyFirstPersonController controller) : base(camera)
{
fpsController = controller;
characterController = fpsController.GetComponent();
initPosition = position;
initRotation = rotation.eulerAngles;
tfCameraPosition = fpsController.transform.Find("CameraPosition");
rotation_y = rotation.eulerAngles.y;
//fpsController.transform.rotation = rotation;
//fpsController.MouseLookInit();
//initRotation = new Vector3(m_camera.transform.rotation.eulerAngles.x, m_camera.transform.rotation.eulerAngles.y, 0);
//fpsController?.MouseLookInit();
}
private float oldfarClipPlane = 5000;
public override void Enter()
{
base.Enter();
EnableFPS = false;
//Vector3 oldPosition = m_camera.transform.position;
//Quaternion oldRotation = m_camera.transform.rotation;
//Transform oldParent = m_camera.transform.parent;
m_camera.transform.SetParent(null);
fpsController.transform.position = initPosition;
fpsController.transform.rotation = Quaternion.Euler(0, rotation_y, 0);
//m_camera.transform.SetParent(oldParent);
m_camera.transform.SetParent(tfCameraPosition.parent);
//m_camera.transform.position = oldPosition;
//m_camera.transform.rotation = oldRotation;
oldfarClipPlane = m_camera.farClipPlane;
m_camera.farClipPlane = 500;
//cameraCtrl.cameraMain.farClipPlane = 500;
//initRotation = new Vector3(cameraCtrl.tfCameraMain.rotation.eulerAngles.x, cameraCtrl.tfFPSController.rotation.eulerAngles.y, 0);
//SetCameraPosition(tfCameraPosition.position, Quaternion.Euler(initRotation), () =>
//{
// EnableFPS = true;
// fpsController.MouseLookInit();
//});
SetCameraPosition(tfCameraPosition.position, tfCameraPosition.rotation, () =>
{
EnableFPS = true;
fpsController.MouseLookInit();
});
}
private bool EnableFPS
{
set
{
fpsController.enabled = value;
characterController.enabled = value;
}
get { return fpsController.enabled; }
}
public override void Exit()
{
base.Exit();
EnableFPS = false;
m_camera.farClipPlane = oldfarClipPlane;
}
public override void Update()
{
base.Update();
initPosition = fpsController.transform.position;
initRotation = new Vector3(m_camera.transform.rotation.eulerAngles.x, fpsController.transform.rotation.eulerAngles.y, 0);
}
}
}