106 lines
2.6 KiB
C#
106 lines
2.6 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
public class DoorOpener : MonoBehaviour
|
|
{
|
|
public GameObject EndPosition;
|
|
public GameObject StartPosition;
|
|
private AudioSource source;
|
|
private bool oneShot;
|
|
|
|
private void OnEnable()
|
|
{
|
|
EnterPyramidTrigger.OnEnterPyramid += StartClosing;
|
|
}
|
|
|
|
private void OnDisable()
|
|
{
|
|
EnterPyramidTrigger.OnEnterPyramid -= StartClosing;
|
|
}
|
|
|
|
// Start is called before the first frame update
|
|
void Start()
|
|
{
|
|
source = GetComponent<AudioSource>();
|
|
}
|
|
|
|
// Update is called once per frame
|
|
void Update()
|
|
{
|
|
if (!oneShot && Input.GetKeyDown("space"))
|
|
{
|
|
oneShot = true;
|
|
StartCoroutine("OpenDoor");
|
|
}
|
|
}
|
|
|
|
private IEnumerator OpenDoor()
|
|
{
|
|
source.Play();
|
|
|
|
float timeSinceStarted = 0f;
|
|
while (true)
|
|
{
|
|
timeSinceStarted += Time.deltaTime / 100;
|
|
transform.position = Vector3.Lerp(transform.position, EndPosition.transform.position, timeSinceStarted);
|
|
|
|
// If the object has arrived, stop the coroutine
|
|
if (transform.position == EndPosition.transform.position)
|
|
{
|
|
yield break;
|
|
}
|
|
|
|
// Otherwise, continue next frame
|
|
yield return null;
|
|
}
|
|
}
|
|
|
|
private void StartClosing()
|
|
{
|
|
StopAllCoroutines();
|
|
StartCoroutine("CloseDoor");
|
|
}
|
|
|
|
private IEnumerator CloseDoor()
|
|
{
|
|
source.Play();
|
|
|
|
float timeSinceStarted = 0f;
|
|
while (true)
|
|
{
|
|
timeSinceStarted += Time.deltaTime / 100;
|
|
transform.position = Vector3.Lerp(transform.position, StartPosition.transform.position, timeSinceStarted);
|
|
|
|
// If the object has arrived, stop the coroutine
|
|
if (transform.position == StartPosition.transform.position)
|
|
{
|
|
yield break;
|
|
}
|
|
|
|
// Otherwise, continue next frame
|
|
yield return null;
|
|
}
|
|
}
|
|
|
|
private IEnumerator MoveFunction()
|
|
{
|
|
source.Play();
|
|
|
|
float timeSinceStarted = 0f;
|
|
while (true)
|
|
{
|
|
timeSinceStarted += Time.deltaTime / 100;
|
|
transform.position = Vector3.Lerp(transform.position, EndPosition.transform.position, timeSinceStarted);
|
|
|
|
// If the object has arrived, stop the coroutine
|
|
if (transform.position == EndPosition.transform.position)
|
|
{
|
|
yield break;
|
|
}
|
|
|
|
// Otherwise, continue next frame
|
|
yield return null;
|
|
}
|
|
}
|
|
}
|