Files
GameDevTVTutFPS/Assets/Scripts/Door.cs

105 lines
2.2 KiB
C#

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
}
}