Files
dungeons/Assets/HurricaneVR/TechDemo/Scripts/DemoSlidingDoor.cs

67 lines
2.0 KiB
C#

using System.Collections;
using HurricaneVR.Framework.Core.Utils;
using UnityEngine;
namespace HurricaneVR.TechDemo.Scripts
{
public class DemoSlidingDoor : MonoBehaviour
{
public Rigidbody LeftDoor;
public Rigidbody RightDoor;
public Transform Lock;
public float LockRotateTime = 1;
public float LockRotateAngles = 360;
public float OpenOffset = .5f;
public float Speed = 1f;
public AudioClip OpenedClip;
private bool _opened;
public void Start()
{
//this.ExecuteAfterSeconds(OpenDoors, 1);
}
public void OpenDoors()
{
if (_opened)
return;
_opened = true;
if(SFXPlayer.Instance) SFXPlayer.Instance.PlaySFX(OpenedClip, transform.position);
StartCoroutine(OpenDoorRoutine());
}
private IEnumerator OpenDoorRoutine()
{
var elapsed = 0f;
var LockRotateSpeed = LockRotateAngles / LockRotateTime * Time.deltaTime;
while (elapsed < LockRotateTime)
{
Lock.localRotation *= Quaternion.Euler(0f, 0f, LockRotateSpeed);
yield return null;
elapsed += Time.deltaTime;
}
elapsed = 0f;
var time = OpenOffset / Speed + (2 * Time.fixedDeltaTime);
while (elapsed < time)
{
yield return new WaitForFixedUpdate();
var next = Vector3.MoveTowards(LeftDoor.transform.position, LeftDoor.transform.parent.TransformPoint(new Vector3(-OpenOffset, 0f, 0f)), Speed * Time.fixedDeltaTime);
LeftDoor.MovePosition(next);
next = Vector3.MoveTowards(RightDoor.transform.position, RightDoor.transform.parent.TransformPoint(new Vector3(OpenOffset, 0f, 0f)), Speed * Time.fixedDeltaTime);
RightDoor.MovePosition(next);
elapsed += Time.fixedDeltaTime;
}
}
}
}