81 lines
2.3 KiB
C#

using System.Collections;
using System.Collections.Generic;
using Unity.XR.CoreUtils;
using UnityEngine;
public class ElevatorOuter : MonoBehaviour
{
public ElevatorBox box;
public int floor;
public Transform boxPos;
public GameObject leftDoor;
public Transform leftDoorOpenPos;
public Transform leftDoorClosedPos;
public GameObject rightDoor;
public Transform rightDoorOpenPos;
public Transform rightDoorClosedPos;
private float doorOpenTime = 4f;
private float doorCloseTime = 5.6f;
public ElevatorStatusPlate statusPlate;
public AudioSource arrivalBeeper;
private void Start()
{
doorOpenTime = box.doorOpenTime;
doorCloseTime = box.doorCloseTime;
}
private void OnTriggerEnter(Collider other)
{
Debug.Log("Something entered call area");
if (other.GetComponent<XROrigin>() == null && other.GetComponent<KbmController>() == null) return;
StartCoroutine(box.callElevator(floor));
Debug.Log("Player entered call area");
}
private void OnTriggerExit(Collider other)
{
Debug.Log("Something entered call area");
if (other.GetComponent<XROrigin>() == null && other.GetComponent<KbmController>() == null) return;
box.interestExpired();
Debug.Log("Player exited call area");
}
public void CloseDoors()
{
StartCoroutine(MoveDoors(leftDoor, leftDoorClosedPos, rightDoor, rightDoorClosedPos, doorCloseTime));
}
public void OpenDoors()
{
arrivalBeeper.Play();
Debug.Log("Outer Doors opened");
StartCoroutine(MoveDoors(leftDoor, leftDoorOpenPos, rightDoor, rightDoorOpenPos, doorOpenTime));
}
private IEnumerator MoveDoors(GameObject left, Transform targetLeft, GameObject right, Transform targetRight, float moveTime)
{
Vector3 startL = left.transform.position;
Vector3 startR = right.transform.position;
float t = 0;
while (t < 1f)
{
t += Time.deltaTime / moveTime;
float easedT = Mathf.SmoothStep(0f, 1f, t); // ease in/out
left.transform.position = Vector3.Lerp(startL, targetLeft.position, easedT);
right.transform.position = Vector3.Lerp(startR, targetRight.position, easedT);
yield return null;
}
Debug.Log("Outer Doors moved");
}
}