using UnityEngine; public class RoomSelectOpenClose : MonoBehaviour { [Header("References")] [SerializeField] private GameObject roomSelectRoot; [SerializeField] private RoomSelectManager roomSelectManager; [SerializeField] private Transform targetCamera; [Header("Open Options")] [SerializeField] private bool openOnStart = false; [SerializeField] private bool placeInFrontOfCameraOnOpen = true; [SerializeField] private bool faceCameraOnOpen = true; [SerializeField] private float distanceFromCamera = 2.2f; [SerializeField] private float verticalOffset = -0.1f; private void Reset() { roomSelectRoot = gameObject; roomSelectManager = GetComponent(); } private void Awake() { if (roomSelectRoot == null) { roomSelectRoot = gameObject; } if (roomSelectManager == null) { roomSelectManager = roomSelectRoot.GetComponent(); } } private void Start() { if (openOnStart) { Open(); } else { Close(); } } public void Open() { if (targetCamera == null && Camera.main != null) { targetCamera = Camera.main.transform; } if (placeInFrontOfCameraOnOpen && targetCamera != null) { Vector3 targetPosition = targetCamera.position + targetCamera.forward * distanceFromCamera; targetPosition.y += verticalOffset; roomSelectRoot.transform.position = targetPosition; } if (faceCameraOnOpen && targetCamera != null) { roomSelectRoot.transform.LookAt(targetCamera); roomSelectRoot.transform.Rotate(0f, 180f, 0f); } roomSelectRoot.SetActive(true); if (roomSelectManager != null) { roomSelectManager.RefreshAll(); } } public void Close() { if (roomSelectRoot != null) { roomSelectRoot.SetActive(false); } } public void Toggle() { if (roomSelectRoot == null) { return; } if (roomSelectRoot.activeSelf) { Close(); } else { Open(); } } }