using UnityEngine; using UnityEngine.UI; namespace DepthsOfGreed.HandbookUI { // Only rendering and input change; all GameObjects and gameplay keep running. public sealed class BasementRoomView : MonoBehaviour { public Canvas roomCanvas; public GraphicRaycaster roomRaycaster; public Camera roomCamera; public RectTransform[] horizontalSurfaces; public RectTransform leftBoundary,rightBoundary; public Vector2 referenceSize=new Vector2(1920,1080); public bool IsVisible {get;private set;} public void SetVisible(bool visible) { IsVisible=visible; roomCanvas.enabled=visible;roomRaycaster.enabled=visible;roomCamera.enabled=visible; Fit(); } void Awake()=>SetVisible(false); void LateUpdate(){if(IsVisible)Fit();} void Fit() { float scale=Mathf.Abs(roomCanvas.transform.lossyScale.y); roomCamera.orthographicSize=Mathf.Max(referenceSize.y*.5f,referenceSize.x*.5f/Mathf.Max(.1f,roomCamera.aspect))*scale; float width=Mathf.Max(referenceSize.x,roomCamera.orthographicSize*2*roomCamera.aspect/Mathf.Max(.00001f,scale)); ((RectTransform)roomCanvas.transform).sizeDelta=new Vector2(width,referenceSize.y); if(horizontalSurfaces!=null)foreach(var surface in horizontalSurfaces)if(surface)surface.sizeDelta=new Vector2(width,surface.sizeDelta.y); if(leftBoundary)leftBoundary.anchoredPosition=new Vector2(-width*.5f+10,leftBoundary.anchoredPosition.y); if(rightBoundary)rightBoundary.anchoredPosition=new Vector2(width*.5f-10,rightBoundary.anchoredPosition.y); } } }