81 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			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");
 | |
|     }
 | |
| 
 | |
| 
 | |
| }
 | |
| 
 |