using Unity.VisualScripting; using UnityEngine; using UnityEngine.Rendering; public class Door : MonoBehaviour, IInteractable { [SerializeField] GameObject door; [SerializeField] float openHeight = 3f; [SerializeField] float openTime = 2f; [SerializeField] AudioClip audioClip; [SerializeField] bool autoDoor; [SerializeField] bool locked; [SerializeField] bool isOpen; [SerializeField] bool singleUse; void OnTriggerEnter(Collider other) { if(other.CompareTag("Player") && autoDoor && !locked && !isOpen) { OpenDoor(openHeight); isOpen = true; } else if(other.CompareTag("Player") && autoDoor && locked) { Debug.Log("The door is locked."); } } void OnTriggerExit(Collider other) { if(other.CompareTag("Player") && autoDoor && isOpen) { CloseDoor(openHeight); isOpen = false; } } public void OpenDoor(float height) { door.transform.Translate(0f,-height,0f); } public void CloseDoor(float height) { door.transform.Translate(0f,height,0f); if(singleUse) locked = true; } public void LockDoor() { locked = true; } public void UnlockDoor() { locked = false; } public void Interact(GameObject interactor) { if (!autoDoor) { if (!locked && !isOpen) { OpenDoor(openHeight); isOpen = true; } else if (!locked && isOpen) { CloseDoor(openHeight); isOpen = false; } else if (locked) { Debug.Log("The door is locked."); } } else { return; } } public bool CanInteract(GameObject interactor) { return !locked; } public string GetInteractionPrompt() { if (locked) return "Door is locked"; if(autoDoor) return ""; return isOpen ? "Press [E] to close door" : "Press [E] to open door"; } public void OnHighlight() { // e.g. outline effect } public void OnUnhighlight() { // remove outline } }