using System; using System.Collections; using System.Collections.Generic; using Cinemachine; using UnityEngine; using UnityEngine.AI; using UnityEngine.UI; public sealed class HouseEntrance : MonoBehaviour { private NavMeshAgent agent; [SerializeField] private Camera externalCamera; [SerializeField] private Camera interiorCamera; [SerializeField] private Camera storageCamera; [SerializeField] private Camera patientCamera; [SerializeField] private GameObject enterButton; [SerializeField] private GameObject interiorSpawnPoint; [SerializeField] private GameObject houseEntrance; [SerializeField] private GameObject exitButton; [SerializeField] private GameObject patientButton; [SerializeField] private GameObject storageButton; [SerializeField] private GameObject storageSpawnPoint; [SerializeField] private GameObject patientSpawnPoint; [SerializeField] private Canvas exteriorWorldSpaceCanvas; [SerializeField] private Canvas interiorWorldSpaceCanvas; [SerializeField] private SimpleMovement simpleMovement; [SerializeField] private GameObject canvasForInterior; private void Start() { agent = GetComponent<NavMeshAgent>(); canvasForInterior.SetActive(false); } private void Teleport(Vector3 destination, Camera activeCamera) { agent.Warp(destination); externalCamera.gameObject.SetActive(false); interiorCamera.gameObject.SetActive(false); storageCamera.gameObject.SetActive(false); patientCamera.gameObject.SetActive(false); activeCamera.gameObject.SetActive(true); exteriorWorldSpaceCanvas.worldCamera = activeCamera; interiorWorldSpaceCanvas.worldCamera = activeCamera; simpleMovement.SetCamera(activeCamera); HideInteriorUI(); } public void TeleportToInterior() => Teleport(interiorSpawnPoint.transform.position, interiorCamera); public void TeleportToExterior() => Teleport(houseEntrance.transform.position, externalCamera); public void TeleportToStorage() => Teleport(storageSpawnPoint.transform.position, storageCamera); public void TeleportToPatient() => Teleport(patientSpawnPoint.transform.position, patientCamera); public void ShowInteriorUI() => canvasForInterior.SetActive(true); public void HideInteriorUI() { canvasForInterior.SetActive(false); enterButton.SetActive(false); exitButton.SetActive(false); patientButton.SetActive(false); storageButton.SetActive(false); } private void OnTriggerEnter(Collider other) { if (other.gameObject == houseEntrance) enterButton.SetActive(true); else if (other.gameObject == interiorSpawnPoint) exitButton.SetActive(true); else if (other.gameObject == storageSpawnPoint) storageButton.SetActive(true); else if (other.gameObject == patientSpawnPoint) patientButton.SetActive(true); } private void OnTriggerExit(Collider other) { if (other.gameObject == houseEntrance) enterButton.SetActive(false); else if (other.gameObject == interiorSpawnPoint) exitButton.SetActive(false); else if (other.gameObject == storageSpawnPoint) storageButton.SetActive(false); else if (other.gameObject == patientSpawnPoint) patientButton.SetActive(false); } }