You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

234 lines
7.4 KiB
C#

4 years ago
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using SiegeSong;
namespace SiegeSong
{
public class CameraManager : MonoBehaviour
4 years ago
{
3 years ago
public RuntimeManager RuntimeManager;
4 years ago
public Motor Motor;
4 years ago
public GameObject ActiveCamera;
public bool FirstPersonActive;
public Transform CameraTarget;
3 years ago
public GameObject CameraMountingBracket;
public GameObject CameraExtendingArm;
4 years ago
public Transform ActiveMount;
3 years ago
public Transform MenuMount;
public Transform FirstPersonMount;
public Transform LeftMount;
public Transform RightMount;
public Transform CenterMount;
public List<Transform> AutoMounts;
public List<Transform> StationMounts;
public GameObject[] NonPlayerCameras;
4 years ago
public float CameraX;
public float CameraY;
3 years ago
public float CameraXOffset;
public float CameraYOffset;
public float CameraZoom = 1.0f;
public float speedX = 200.0f;
public float speedY = 100.0f;
public float maxX = 90.0f;
public float maxY = 90.0f;
public float firstPersonMinY = -80.0f;
public float firstPersonMaxY = 90.0f;
3 years ago
public float firstPersonMinX = 90.0f;
public float firstPersonMaxX = 90.0f;
public bool lerping;
public Vector3 lerpStartPosition;
public Vector3 lerpTargetPosition;
public float lerpStartTime;
public float lerpDistance;
public float lerpSpeed = 3.5f;
public float lerpStopDistanceThreshold = 0.01f;
3 years ago
public float focusRadius = 1.0f;
public float focusCentering = 0.5f;
public float focusMaximumDistance = 10.0f;
3 years ago
public float orbitX;
public float orbitY;
3 years ago
public bool rotating;
public bool shouldRealign;
4 years ago
//public CameraMode ActiveMode;
3 years ago
private int activeCameraIndex;
4 years ago
void Start()
{
3 years ago
CameraXOffset = 180;
4 years ago
}
void Update()
{
3 years ago
}
4 years ago
3 years ago
private void LateUpdate()
{
if (focusRadius > 0f)
{
3 years ago
var distance = Vector3.Distance(CameraMountingBracket.transform.position, ActiveMount.transform.position);
if (distance > focusRadius)
{
if (distance < focusMaximumDistance)
{
CameraMountingBracket.transform.position = Vector3.Lerp(
CameraMountingBracket.transform.position, ActiveMount.transform.position, focusRadius / distance
);
CameraExtendingArm.transform.position = CameraMountingBracket.transform.position;
ActiveCamera.transform.position = CameraExtendingArm.transform.position;
ActiveCamera.transform.rotation = Quaternion.Euler(ActiveMount.rotation.y + CameraY, ActiveMount.rotation.x + CameraX + CameraXOffset, ActiveMount.rotation.z);
}
else
{
CameraMountingBracket.transform.rotation = ActiveMount.transform.rotation;
CameraMountingBracket.transform.position = ActiveMount.transform.position;
CameraExtendingArm.transform.rotation = CameraMountingBracket.transform.rotation;
CameraExtendingArm.transform.position = CameraMountingBracket.transform.position;
ActiveCamera.transform.rotation = CameraExtendingArm.transform.rotation;
ActiveCamera.transform.position = CameraExtendingArm.transform.position;
}
}
}
4 years ago
}
public void SwitchActiveCamera(Camera targetCamera)
{
}
public void ZoomIn()
{
3 years ago
4 years ago
}
public void ZoomOut(bool request = true)
{
3 years ago
4 years ago
}
public void ResetCameraPosition()
{
3 years ago
}
3 years ago
public void RotateHorizontal(float amount)
4 years ago
{
3 years ago
if (FirstPersonActive)
4 years ago
{
3 years ago
if ((CameraX > 0 && CameraX <= firstPersonMaxX) || (CameraX < 0 && CameraX >= -firstPersonMaxX) || CameraX == 0)
{
CameraX += amount * Time.deltaTime * speedX;
}
4 years ago
else
3 years ago
{
CameraX = (CameraX > 0 ? 1 : -1) * (firstPersonMaxX - 1);
}
4 years ago
}
else
{
3 years ago
orbitX += amount * Time.unscaledDeltaTime * speedX;
4 years ago
}
3 years ago
//else
//{
// CameraX = (CameraX > 0 ? 1 : -1) * maxX;
// CameraXOffset += amount * Time.deltaTime * speedX;
// if (CameraXOffset > 360)
// CameraXOffset -= 360;
// if (CameraXOffset < -360)
// CameraXOffset += 360;
//}
4 years ago
}
3 years ago
public void RotateVertical(float amount)
4 years ago
{
3 years ago
if (FirstPersonActive)
{
3 years ago
if ((CameraY > 0 && CameraY <= firstPersonMaxY) || (CameraY < 0 && CameraY >= -firstPersonMaxY) || CameraY == 0)
{
3 years ago
CameraY -= amount * Time.deltaTime * speedY;
}
3 years ago
else
{
3 years ago
CameraY = (CameraY > 0 ? 1 : -1) * (firstPersonMaxY - 1);
}
3 years ago
}
else
{
orbitY -= amount * Time.unscaledDeltaTime * speedY;
4 years ago
}
}
public void SwitchCamera()
{
if (activeCameraIndex - 3 == AutoMounts.Count + StationMounts.Count)
activeCameraIndex = 0;
else
activeCameraIndex++;
lerping = true;
lerpStartTime = Time.time;
lerpStartPosition = ActiveCamera.transform.position;
3 years ago
FirstPersonActive = false;
4 years ago
switch (activeCameraIndex)
{
case 0:
FirstPersonActive = true;
lerpTargetPosition = FirstPersonMount.position;
ActiveMount = FirstPersonMount;
4 years ago
break;
case 1:
lerpTargetPosition = RightMount.position;
ActiveMount = RightMount;
4 years ago
break;
case 2:
lerpTargetPosition = CenterMount.position;
ActiveMount = CenterMount;
4 years ago
break;
case 3:
lerpTargetPosition = LeftMount.position;
ActiveMount = LeftMount;
break;
4 years ago
default:
case 4:
if (activeCameraIndex - 3 > AutoMounts.Count)
{
lerpTargetPosition = StationMounts[activeCameraIndex - 3 - AutoMounts.Count].position;
ActiveMount = StationMounts[activeCameraIndex - 3 - AutoMounts.Count];
}
else
{
lerpTargetPosition = StationMounts[activeCameraIndex - 3].position;
ActiveMount = StationMounts[activeCameraIndex - 3];
}
4 years ago
break;
4 years ago
}
lerpDistance = Vector3.Distance(ActiveCamera.transform.position, lerpTargetPosition);
ActiveCamera.transform.SetParent(ActiveMount);
4 years ago
}
}
}