summaryrefslogtreecommitdiffhomepage
path: root/Assets/Scripts/OrbitCamera.cs
diff options
context:
space:
mode:
authorrealtradam <[email protected]>2022-12-11 02:54:14 -0500
committerrealtradam <[email protected]>2022-12-11 02:54:14 -0500
commit4e32bf914903b88a766e7d6166faf34cb4ba4620 (patch)
tree7479dc98bdd6c90433b3286b188d1e9b861bad78 /Assets/Scripts/OrbitCamera.cs
parent1b7c9c7fc27541bb9420b91b3cd68f3a726e435c (diff)
downloadMagnet-Run-3D-4e32bf914903b88a766e7d6166faf34cb4ba4620.tar.gz
Magnet-Run-3D-4e32bf914903b88a766e7d6166faf34cb4ba4620.zip
single planet gravity
Diffstat (limited to 'Assets/Scripts/OrbitCamera.cs')
-rw-r--r--Assets/Scripts/OrbitCamera.cs22
1 files changed, 15 insertions, 7 deletions
diff --git a/Assets/Scripts/OrbitCamera.cs b/Assets/Scripts/OrbitCamera.cs
index 81a6941..c0c84a7 100644
--- a/Assets/Scripts/OrbitCamera.cs
+++ b/Assets/Scripts/OrbitCamera.cs
@@ -41,6 +41,9 @@ public class OrbitCamera : MonoBehaviour
Vector3 orbitAngles = new Vector2(45f, 0f);
+ Quaternion gravityAlignment = Quaternion.identity;
+ Quaternion orbitRotation;
+
[SerializeField]
LayerMask obstructionMask = -1;
@@ -48,20 +51,23 @@ public class OrbitCamera : MonoBehaviour
{
regularCamera = GetComponent<Camera>();
focusPoint = focus.position;
- transform.localRotation = Quaternion.Euler(orbitAngles);
+ transform.localRotation = orbitRotation = Quaternion.Euler(orbitAngles);
+ OnValidate();
}
void LateUpdate()
{
+ gravityAlignment = Quaternion.FromToRotation(
+ gravityAlignment * Vector3.up,
+ CustomGravity.GetUpAxis(focusPoint)
+ ) * gravityAlignment;
UpdateFocusPoint();
- Quaternion lookRotation;
if(ManualRotation() || AutomaticRotation())
{
ConstrainAngles();
- lookRotation = Quaternion.Euler(orbitAngles);
+ orbitRotation = Quaternion.Euler(orbitAngles);
}
- else
- lookRotation = transform.localRotation;
+ Quaternion lookRotation = gravityAlignment * orbitRotation;
Vector3 lookDirection = lookRotation * Vector3.forward;
Vector3 lookPosition = focusPoint - lookDirection * distance;
@@ -153,9 +159,11 @@ public class OrbitCamera : MonoBehaviour
if(Time.unscaledTime - lastManualRotationTime < alignDelay)
return false;
+ Vector3 alignedDelta = Quaternion.Inverse(gravityAlignment) *
+ (focusPoint - previousFocusPoint);
Vector2 movement = new Vector2(
- focusPoint.x - previousFocusPoint.x,
- focusPoint.z - previousFocusPoint.z
+ alignedDelta.x,
+ alignedDelta.z
);
float movementDeltaSqr = movement.sqrMagnitude;
if(movementDeltaSqr < 0.0001f)