Heroes_of_Hiis/Assets/Project Files/Scripts/Helar/ThirdPersonTeleportControll...

98 lines
2.8 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using Unity.XR.CoreUtils;
using UnityEngine;
using UnityEngine.XR.Interaction.Toolkit;
[RequireComponent(
typeof(ActionBasedContinuousMoveProvider),
typeof(ActionBasedContinuousTurnProvider),
typeof(ActionBasedSnapTurnProvider))]
public class ThirdPersonTeleportController : MonoBehaviour
{
public XROrigin xrOrigin;
private ActionBasedContinuousMoveProvider _continuousMoveProvider;
private ActionBasedContinuousTurnProvider _continuousTurnProvider;
private ActionBasedSnapTurnProvider _snapTurnProvider;
public GameObject cameraContainer;
public bool switchToContinuous;
private bool _lastControllerMoveStatus;
private void Awake()
{
_continuousMoveProvider = GetComponent<ActionBasedContinuousMoveProvider>();
_continuousTurnProvider = GetComponent<ActionBasedContinuousTurnProvider>();
_snapTurnProvider = GetComponent<ActionBasedSnapTurnProvider>();
}
void Update()
{
if (StartedMoving())
{
Debug.Log("Started Moving");
cameraContainer.transform.parent = null;
cameraContainer.transform.position = xrOrigin.transform.position;
//Switch to continuous turn while remote controlling.
if (switchToContinuous)
{
_continuousTurnProvider.enabled = true;
_snapTurnProvider.enabled = false;
}
}
if (StoppedMoving())
{
Debug.Log("Stopped Moving");
cameraContainer.transform.SetParent(xrOrigin.transform);
var originTransform = xrOrigin.transform;
cameraContainer.transform.position = originTransform.position;
cameraContainer.transform.rotation = originTransform.rotation;
if (switchToContinuous)
{
_continuousTurnProvider.enabled = false;
_snapTurnProvider.enabled = true;
}
}
}
private bool StartedMoving()
{
var controllerStatus = GetControllerStatus();
if (controllerStatus && _lastControllerMoveStatus == false)
{
_lastControllerMoveStatus = true;
return true;
}
return false;
}
private bool StoppedMoving()
{
var controllerStatus = GetControllerStatus();
if (_lastControllerMoveStatus && controllerStatus == false)
{
_lastControllerMoveStatus = false;
return true;
}
_lastControllerMoveStatus = controllerStatus;
return false;
}
private bool GetControllerStatus()
{
return _continuousMoveProvider.leftHandMoveAction.action.inProgress ||
_continuousMoveProvider.rightHandMoveAction.action.inProgress;
}
}