trouble-in-terror-town/Assets/Scripts/Player/Character/Controller/CinemachineObjectRotator.cs
Mikolaj 2bbacbea09 did some more work on networking and removed EOS in favor of LRM
did some more work on networking and removed EOS in favor of Light Reflective Mirror
2022-05-31 15:04:31 +02:00

101 lines
4.3 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Cinemachine;
namespace TTTSC.Player.Character.Controller
{
public class CinemachineObjectRotator : MonoBehaviour
{
public bool enableTargetRotation;
CinemachineVirtualCamera _virtualCamera;
PlayerInputReceiver _playerInputReceiver;
public TargetRotationModes rotateWithCameraRotationMode;
public TargetRotationModes hotizontalRotationMode;
public TargetRotationModes verticalRotationMode;
public Transform cameraTransform;
public List<Transform> horizontalRotationTargets, verticalRotationTargets, rotateWithCameraTargets;
CinemachinePOV _cinemachinePOV;
protected void Awake()
{
_virtualCamera = GetComponent<CinemachineVirtualCamera>();
_cinemachinePOV = _virtualCamera.GetCinemachineComponent<CinemachinePOV>();
_playerInputReceiver = FindObjectOfType<PlayerInputReceiver>();
}
public enum TargetRotationModes
{
disabled,
rotateFollowTarget,
rotateLookTarget,
rotateSpecificTargets
}
private void LateUpdate()
{
float rotationX;
float rotationY;
switch (enableTargetRotation)
{
case true:
rotationX = _cinemachinePOV.m_HorizontalAxis.Value;
switch (hotizontalRotationMode)
{
case TargetRotationModes.rotateFollowTarget:
_virtualCamera.Follow.rotation = Quaternion.Euler(_virtualCamera.Follow.up * rotationX);
break;
case TargetRotationModes.rotateLookTarget:
_virtualCamera.LookAt.rotation = Quaternion.Euler(_virtualCamera.LookAt.up * rotationX);
break;
case TargetRotationModes.rotateSpecificTargets:
if (horizontalRotationTargets.Count > 0)
{
for (int i = 0; i < horizontalRotationTargets.Count; i++)
{
if (horizontalRotationTargets[i] != null)
horizontalRotationTargets[i].rotation = Quaternion.Euler(horizontalRotationTargets[i].up * rotationX);
}
}
break;
}
rotationY = _cinemachinePOV.m_VerticalAxis.Value;
switch (verticalRotationMode)
{
case TargetRotationModes.rotateFollowTarget:
_virtualCamera.Follow.rotation = Quaternion.Euler(_virtualCamera.Follow.right * rotationY);
break;
case TargetRotationModes.rotateLookTarget:
_virtualCamera.LookAt.rotation = Quaternion.Euler(_virtualCamera.LookAt.right * rotationY);
break;
case TargetRotationModes.rotateSpecificTargets:
foreach (Transform target in verticalRotationTargets)
{
target.rotation = Quaternion.Euler(target.right * rotationY);
}
break;
}
switch (rotateWithCameraRotationMode)
{
case TargetRotationModes.rotateFollowTarget:
_virtualCamera.Follow.rotation = cameraTransform.rotation;
break;
case TargetRotationModes.rotateLookTarget:
_virtualCamera.LookAt.rotation = cameraTransform.rotation;
break;
case TargetRotationModes.rotateSpecificTargets:
foreach (Transform target in rotateWithCameraTargets)
{
target.rotation = cameraTransform.rotation;
}
break;
}
break;
}
}
}
}