using UnityEngine; public class SlideDoor : Interactable { bool IsOpen = false; bool opening = false; bool closing = false; float currentDuration; [SerializeField] private GameObject rightDoor; Vector3 rightDoorStart; Vector3 rightDoorEnd; [SerializeField] private GameObject leftDoor; Vector3 leftDoorStart; Vector3 leftDoorEnd; [SerializeField] private float lerpTime; [SerializeField] private AnimationCurve Curve; public Vector3 moveDist; public AudioSource source; public void Start() { rightDoorStart = rightDoor.transform.position; Debug.Log(rightDoorStart); rightDoorEnd = rightDoor.transform.position; rightDoorEnd.x += moveDist.x; rightDoorEnd.y += moveDist.y; rightDoorEnd.z += moveDist.z; Debug.Log(rightDoorEnd); leftDoorStart = leftDoor.transform.position; Debug.Log(leftDoorStart); leftDoorEnd = leftDoor.transform.position; leftDoorEnd.x -= moveDist.x; leftDoorEnd.y -= moveDist.y; leftDoorEnd.z -= moveDist.z; Debug.Log(leftDoorEnd); } void Update() { if (opening) { currentDuration += Time.deltaTime; float t = currentDuration / lerpTime; rightDoor.transform.position = Vector3.Lerp( rightDoorStart, rightDoorEnd, Curve.Evaluate(t) ); leftDoor.transform.position = Vector3.Lerp( leftDoorStart, leftDoorEnd, Curve.Evaluate(t) ); if (currentDuration >= lerpTime) { currentDuration = 0; opening = false; rightDoor.transform.position = rightDoorEnd; leftDoor.transform.position = leftDoorEnd; IsOpen = true; Debug.Log("Door opened"); } } else if (closing) { currentDuration += Time.deltaTime; float t = currentDuration / lerpTime; rightDoor.transform.position = Vector3.Lerp( rightDoorEnd, rightDoorStart, Curve.Evaluate(t) ); leftDoor.transform.position = Vector3.Lerp( leftDoorEnd, leftDoorStart, Curve.Evaluate(t) ); if (currentDuration >= lerpTime) { currentDuration = 0; closing = false; rightDoor.transform.position = rightDoorStart; leftDoor.transform.position = leftDoorStart; IsOpen = false; Debug.Log("Door closed"); } } } public override void Interact() { if ( !closing && !opening && !IsOpen && GameManager.instance.petrolCollected && GameManager.instance.gotGenerator ) { opening = true; source.Play(); } else if (!closing && !opening && IsOpen) { closing = true; } } void OnTriggerExit(Collider other) { if (other.tag == "Player") { GameManager.instance.endGame(); } } }