39 lines
1.7 KiB
C#
39 lines
1.7 KiB
C#
using RebootKit.Engine.Foundation;
|
|
using UnityEngine;
|
|
|
|
namespace RealityReboot.jelycho.Player {
|
|
public class CameraSpring : MonoBehaviour {
|
|
[Min(0.01f), SerializeField] float m_HalfLife = 0.075f;
|
|
[SerializeField] float m_Frequency = 10.0f;
|
|
[SerializeField] float m_ForwardAngularDisplacement = 1.0f;
|
|
[SerializeField] float m_SidewaysAngularDisplacement = 1.0f;
|
|
[SerializeField] float m_HeightAngularDisplacement = 2.0f;
|
|
|
|
Vector3 m_SpringPosition;
|
|
Vector3 m_SpringVelocity;
|
|
|
|
public void Initialize() {
|
|
m_SpringPosition = transform.position;
|
|
m_SpringVelocity = Vector3.zero;
|
|
}
|
|
|
|
public void UpdateSpring(float deltaTime, Vector3 up, Vector3 right, Vector3 forward) {
|
|
MathUtility.Spring(ref m_SpringPosition,
|
|
ref m_SpringVelocity,
|
|
transform.position,
|
|
m_HalfLife,
|
|
m_Frequency,
|
|
deltaTime);
|
|
|
|
Vector3 localSpringPosition = m_SpringPosition - transform.position;
|
|
float springHeight = Vector3.Dot(localSpringPosition, up);
|
|
float springForward = Vector3.Dot(localSpringPosition, forward);
|
|
float springSideways = Vector3.Dot(localSpringPosition, right);
|
|
|
|
float pitch = -springHeight * m_HeightAngularDisplacement + -springForward * m_ForwardAngularDisplacement;
|
|
transform.localEulerAngles = new Vector3(pitch,
|
|
0.0f,
|
|
springSideways * m_SidewaysAngularDisplacement);
|
|
}
|
|
}
|
|
} |