using System.Collections; using UnityEngine; public class InteractiveDoor : MonoBehaviour { [Header("Door Movement")] [SerializeField] private Vector3 openOffsetPosition = new Vector3(0, 3.5f, 0); // e.g. sliding up [SerializeField] private Vector3 openRotationEuler = Vector3.zero; // or swinging open [SerializeField] private float transitionSpeed = 3f; [Header("Behavior")] [SerializeField] private bool openOnAreaCleared = true; [SerializeField] private bool openOnTriggerEnter = false; [Header("Audio")] [SerializeField] private AudioClip doorOpenSound; private Vector3 closedPosition; private Quaternion closedRotation; private Vector3 targetPosition; private Quaternion targetRotation; private bool isOpen = false; private void Awake() { closedPosition = transform.position; closedRotation = transform.rotation; targetPosition = closedPosition; targetRotation = closedRotation; } private void Update() { if (openOnAreaCleared && !isOpen && AreaClearanceManager.Instance != null && AreaClearanceManager.Instance.IsAreaCleared) { OpenDoor(); } transform.position = Vector3.Lerp(transform.position, targetPosition, Time.deltaTime * transitionSpeed); transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, Time.deltaTime * transitionSpeed); } private void OnTriggerEnter(Collider other) { if (openOnTriggerEnter && !isOpen && other.CompareTag("Player")) { OpenDoor(); } } public void OpenDoor() { if (isOpen) return; isOpen = true; targetPosition = closedPosition + transform.TransformDirection(openOffsetPosition); if (openRotationEuler != Vector3.zero) { targetRotation = closedRotation * Quaternion.Euler(openRotationEuler); } if (doorOpenSound != null) { AudioSource.PlayClipAtPoint(doorOpenSound, transform.position); } } public void CloseDoor() { isOpen = false; targetPosition = closedPosition; targetRotation = closedRotation; } }