74 lines
2.0 KiB
C#
74 lines
2.0 KiB
C#
using System.Collections;
|
|
using UnityEngine;
|
|
using UnityEngine.Events;
|
|
|
|
namespace HurricaneVR.Framework.Weapons
|
|
{
|
|
public class HVRBolt : MonoBehaviour
|
|
{
|
|
public UnityEvent BoltForward = new UnityEvent();
|
|
|
|
public Transform BackPosition;
|
|
|
|
public float ForwardSpeed;
|
|
|
|
private Vector3 _startingPosition;
|
|
private Coroutine _forwardRoutine;
|
|
private float _backDistance;
|
|
|
|
public bool IsPushedBack { get; set; }
|
|
|
|
|
|
private void Awake()
|
|
{
|
|
_startingPosition = transform.localPosition;
|
|
_backDistance = Vector3.Distance(_startingPosition, BackPosition.localPosition);
|
|
}
|
|
|
|
public void Move(float percent)
|
|
{
|
|
transform.localPosition = Vector3.Lerp(_startingPosition, BackPosition.localPosition, percent);
|
|
}
|
|
|
|
public void PushBack()
|
|
{
|
|
if (BackPosition)
|
|
{
|
|
transform.localPosition = BackPosition.localPosition;
|
|
if (_forwardRoutine != null)
|
|
{
|
|
StopCoroutine(_forwardRoutine);
|
|
}
|
|
}
|
|
|
|
IsPushedBack = true;
|
|
}
|
|
|
|
public void Close()
|
|
{
|
|
if (_forwardRoutine != null)
|
|
return;
|
|
StartCoroutine(ForwardRoutine());
|
|
}
|
|
|
|
private IEnumerator ForwardRoutine()
|
|
{
|
|
while (true)
|
|
{
|
|
var distance = Vector3.Distance(transform.localPosition, _startingPosition);
|
|
var travel = ForwardSpeed * Time.deltaTime;
|
|
if (distance < travel)
|
|
{
|
|
transform.localPosition = _startingPosition;
|
|
break;
|
|
}
|
|
|
|
transform.localPosition = Vector3.MoveTowards(transform.localPosition, _startingPosition, travel);
|
|
yield return null;
|
|
}
|
|
|
|
_forwardRoutine = null;
|
|
IsPushedBack = false;
|
|
}
|
|
}
|
|
} |