using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using VRTK;
|
|
|
|
|
|
public class RingTeleportation : VRTK_HeightAdjustTeleport
|
|
{
|
|
#region Read-Only Fields
|
|
/// <summary>
|
|
/// Direction from Centre of ship to CameraRig
|
|
/// </summary>
|
|
public Vector3 DownDirection => m_ring.getDownDirection(playArea.position);
|
|
#endregion Read-Only Fields
|
|
|
|
|
|
#region Inspector Fields
|
|
[Header("Ring Settings")]
|
|
[SerializeField, Tooltip("Reference to the Ship which is being teleported on. If left empty will try and find one in scene")]
|
|
private RotationController m_ring;
|
|
#endregion Inspector Fields
|
|
|
|
|
|
protected override void OnEnable()
|
|
{
|
|
base.OnEnable();
|
|
if (m_ring == null)
|
|
m_ring = FindObjectOfType<RotationController>();
|
|
}
|
|
|
|
protected override Vector3 GetNewPosition(Vector3 tipPosition, Transform target, bool returnOriginalPosition)
|
|
{
|
|
Vector3 basePosition = base.GetNewPosition(tipPosition, target, true);
|
|
|
|
return basePosition;
|
|
}
|
|
|
|
|
|
protected override Quaternion SetNewRotation(Quaternion? rotation)
|
|
{
|
|
Debug.Log("Setting new rotation");
|
|
return Quaternion.FromToRotation(Vector3.down, DownDirection);
|
|
}
|
|
|
|
protected override void ProcessOrientation(object sender, DestinationMarkerEventArgs e, Vector3 targetPosition, Quaternion targetRotation)
|
|
{
|
|
base.ProcessOrientation(sender, e, targetPosition, targetRotation);
|
|
|
|
Quaternion newRotation = Quaternion.FromToRotation(Vector3.down, m_ring.getDownDirection(targetPosition));
|
|
|
|
playArea.rotation = newRotation;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|