using UnityEngine; using UnityEngine.Experimental.Rendering.Universal; public class DoorControl : MonoBehaviour { public Light2D doorStatusLight; public float doorOpenSpeed, xMovement, yMovement; private Vector3 moveTarget, startingPos; private bool doorOpened, movementComplete, moveStarted; private float startTime, journeyLength; private AudioSource aSource; public int doorID; private void Awake() { aSource = GetComponent<AudioSource>(); moveTarget = new Vector3(transform.position.x + xMovement, transform.position.y + yMovement, transform.position.z); startingPos = transform.position; } private void Update() { if (!movementComplete) { if (doorOpened) { OpenDoor(); } } } public void OpenDoor() { if (!moveStarted) { startTime = Time.time; journeyLength = Vector3.Distance(startingPos, moveTarget); aSource.Play(); moveStarted = true; } float distCovered = (Time.time - startTime) * doorOpenSpeed; float fracJourney = distCovered / journeyLength; transform.position = Vector3.Lerp(transform.position, moveTarget, fracJourney); if (transform.position == moveTarget) { movementComplete = true; doorStatusLight.color = Color.green; } } public void SetDoorOpenState(bool state) { doorOpened = state; } public int GetDoorID() { return doorID; } }