36 lines
1.7 KiB
C#
36 lines
1.7 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|