125 lines
3.9 KiB
C#
125 lines
3.9 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
namespace MeshCombineStudio
|
|
{
|
|
public class NavigationCamera : MonoBehaviour
|
|
{
|
|
public static float fov;
|
|
public SO_NavigationCamera data;
|
|
|
|
Quaternion rot;
|
|
Vector3 currentSpeed;
|
|
float tStamp;
|
|
float deltaTime;
|
|
|
|
Vector3 startPosition, position;
|
|
Quaternion startRotation;
|
|
float scrollWheel;
|
|
|
|
void Awake()
|
|
{
|
|
tStamp = Time.realtimeSinceStartup;
|
|
|
|
startPosition = position = transform.position;
|
|
startRotation = rot = transform.rotation;
|
|
}
|
|
|
|
void OnDestroy()
|
|
{
|
|
RestoreCam();
|
|
}
|
|
|
|
void Update()
|
|
{
|
|
scrollWheel = Input.mouseScrollDelta.y * data.mouseScrollWheelMulti;
|
|
}
|
|
|
|
void LateUpdate()
|
|
{
|
|
deltaTime = Time.realtimeSinceStartup - tStamp;
|
|
tStamp = Time.realtimeSinceStartup;
|
|
|
|
Vector2 deltaMouse = new Vector2(Input.GetAxis("Mouse X"), Input.GetAxis("Mouse Y"));
|
|
|
|
if (Input.GetMouseButtonDown(1))
|
|
{
|
|
rot = transform.rotation;
|
|
deltaMouse = Vector2.zero;
|
|
}
|
|
|
|
Vector3 speed = Vector3.zero;
|
|
|
|
if (Input.GetMouseButton(1))
|
|
{
|
|
// rot *= Quaternion.Euler(new Vector3(-deltaMouse.y * data.mouseSensitity * deltaTime * 100, deltaMouse.x * data.mouseSensitity * deltaTime * 100, 0));
|
|
|
|
Quaternion oldRot = transform.rotation;
|
|
transform.Rotate(0, deltaMouse.x * data.mouseSensitity * 1.66f, 0, Space.World);
|
|
transform.Rotate(-deltaMouse.y * data.mouseSensitity * 1.66f, 0, 0, Space.Self);
|
|
rot = transform.rotation;
|
|
transform.rotation = oldRot;
|
|
|
|
if (Input.GetKey(KeyCode.W)) speed.z = 1;
|
|
else if (Input.GetKey(KeyCode.S)) speed.z = -1;
|
|
|
|
if (Input.GetKey(KeyCode.D)) speed.x = 1;
|
|
else if (Input.GetKey(KeyCode.A)) speed.x = -1;
|
|
|
|
if (Input.GetKey(KeyCode.E)) speed.y = 1;
|
|
else if (Input.GetKey(KeyCode.Q)) speed.y = -1;
|
|
|
|
speed *= GetSpeedMulti();
|
|
}
|
|
|
|
if (Input.GetMouseButton(2))
|
|
{
|
|
speed.x = -deltaMouse.x;
|
|
speed.y = -deltaMouse.y;
|
|
|
|
speed *= GetSpeedMulti();
|
|
currentSpeed = speed;
|
|
}
|
|
else Lerp2Way(ref currentSpeed, speed, data.speedUpLerpMulti, data.speedDownLerpMulti);
|
|
|
|
position += transform.TransformDirection(currentSpeed * deltaTime) + (transform.forward * scrollWheel * deltaTime);
|
|
|
|
transform.rotation = rot;
|
|
transform.position = position;
|
|
}
|
|
|
|
public void SetCam()
|
|
{
|
|
transform.rotation = rot;
|
|
transform.position = position;
|
|
}
|
|
|
|
public void RestoreCam()
|
|
{
|
|
transform.position = startPosition;
|
|
transform.rotation = startRotation;
|
|
}
|
|
|
|
float GetSpeedMulti()
|
|
{
|
|
if (Input.GetKey(KeyCode.LeftShift)) return data.speedFast;
|
|
if (Input.GetKey(KeyCode.LeftControl)) return data.speedSlow;
|
|
else return data.speedNormal;
|
|
}
|
|
|
|
void Lerp2Way(ref Vector3 v, Vector3 targetV, float upMulti, float downMulti)
|
|
{
|
|
Lerp2Way(ref v.x, targetV.x, upMulti, downMulti);
|
|
Lerp2Way(ref v.y, targetV.y, upMulti, downMulti);
|
|
Lerp2Way(ref v.z, targetV.z, upMulti, downMulti);
|
|
}
|
|
|
|
void Lerp2Way(ref float v, float targetV, float upMulti, float downMulti)
|
|
{
|
|
float multi;
|
|
if (Mathf.Abs(v) < Mathf.Abs(targetV)) multi = upMulti; else multi = downMulti;
|
|
v = Mathf.Lerp(v, targetV, multi * deltaTime);
|
|
}
|
|
}
|
|
} |