UnityGameProjectsCode / NightwatchGame / DoorUse.cs
DoorUse.cs
Raw
using UnityEngine;

public class DoorUse : MonoBehaviour
{
    private bool insideDoorArea;
    public GameObject openDoor;
    public GameObject closedDoor;
    public GameObject interactionUI;
    public InteractionTextControl textControl;
    private AudioSource doorAudio;
    public AudioClip doorOpen, doorClose, doorLock;
    private bool doorLocked;
    public bool keyNeeded;
    private bool playerHasKey;
    public bool permaLocked;
    public string lockedText = "Seems Locked.";

    private void Awake()
    {
        doorAudio = GetComponent<AudioSource>();

        if (keyNeeded || permaLocked)
            LockDoor(true);
    }

    private void OnTriggerEnter(Collider other)
    {
        insideDoorArea = true;
        interactionUI.SetActive(true);
    }

    private void OnTriggerExit(Collider other)
    {
        insideDoorArea = false;
        interactionUI.SetActive(false);
    }

    private void Update()
    {
        if (!doorLocked)
        {
            if (Input.GetKeyDown(KeyCode.E) && !closedDoor.activeSelf && insideDoorArea)
            {
                CloseDoor();
            }
            else if (Input.GetKeyDown(KeyCode.E) && !openDoor.activeSelf && insideDoorArea)
            {
                //disable door and enable open door object
                openDoor.SetActive(true);
                closedDoor.SetActive(false);
                doorAudio.clip = doorOpen;
                doorAudio.pitch = Random.Range(0.9f, 1.1f);
                doorAudio.Play();
            }
        }
        else
        {
            if (Input.GetKeyDown(KeyCode.E) && insideDoorArea)
            {
                doorAudio.clip = doorLock;
                doorAudio.pitch = Random.Range(0.9f, 1.1f);
                doorAudio.Play();

                if (!keyNeeded)
                    textControl.DisplayText(lockedText);
                else
                    textControl.DisplayText("I need the key.");
            }
        }
    }

    public void CloseDoor()
    {
        openDoor.SetActive(false);
        closedDoor.SetActive(true);
        doorAudio.clip = doorClose;
        doorAudio.pitch = Random.Range(0.9f, 1.1f);
        doorAudio.Play();
    }

    public void LockDoor(bool state)
    {
        doorLocked = state;
    }

    public bool GetDoorLockedState()
    {
        return doorLocked;
    }

    public void SetPlayerHasKey(bool state)
    {
        if (!permaLocked)
            LockDoor(false);
    }
}