FiE-Game/Assets/Scripts/Fie/Camera/FieUICamera.cs

91 lines
2.5 KiB
C#

using UnityEngine;
namespace Fie.Camera
{
public class FieUICamera : FieCameraBase
{
public delegate void ScreenResizeEvent();
private int _latestWidth;
private int _latestHeight;
private FieGameCamera _gameCamera;
private Vector3 leftTopInWorldPosition;
private Vector3 leftBottomInWorldPosition;
private Vector3 rightTopInWorldPosition;
private Vector3 rightBottomInWorldPosition;
private float _screenHeight;
private float _screenWidth;
private float _uiWorldHeight;
private float _uiWorldWidth;
public event ScreenResizeEvent screenResizeEvent;
protected override void Start()
{
base.Start();
InitializeUICameraResolution();
}
private void LateUpdate()
{
if (Screen.height != _latestHeight || Screen.width != _latestWidth)
{
InitializeUICameraResolution();
}
}
private void InitializeUICameraResolution()
{
_screenHeight = (float)Screen.height;
_screenWidth = (float)Screen.width;
leftBottomInWorldPosition = base.camera.ScreenToWorldPoint(Vector3.zero);
leftTopInWorldPosition = base.camera.ScreenToWorldPoint(new Vector3(0f, _screenHeight));
rightBottomInWorldPosition = base.camera.ScreenToWorldPoint(new Vector3(_screenWidth, 0f));
rightTopInWorldPosition = base.camera.ScreenToWorldPoint(new Vector3(_screenWidth, _screenHeight));
_uiWorldHeight = Vector3.Distance(leftBottomInWorldPosition, leftTopInWorldPosition);
_uiWorldWidth = Vector3.Distance(leftBottomInWorldPosition, rightBottomInWorldPosition);
_latestHeight = Screen.height;
_latestWidth = Screen.width;
if (this.screenResizeEvent != null)
{
this.screenResizeEvent();
}
}
public void setGameCamera(FieGameCamera gameChamera)
{
_gameCamera = gameChamera;
}
public Vector3 getPositionInUICameraWorld(Vector3 inGamePosition)
{
if (_gameCamera == null)
{
Debug.Log("game camera didn't assign to ui camera.");
return Vector3.zero;
}
Vector3 vector = _gameCamera.camera.WorldToScreenPoint(inGamePosition);
return new Vector3(leftBottomInWorldPosition.x + _uiWorldWidth * (vector.x / _screenWidth), leftBottomInWorldPosition.y + _uiWorldHeight * (vector.y / _screenHeight));
}
public bool isOnScreen(Vector3 worldPosition, ref Vector3 screenPosition)
{
screenPosition = _gameCamera.camera.WorldToScreenPoint(worldPosition);
if (screenPosition.x < 0f || screenPosition.x > (float)Screen.width || screenPosition.y < 0f || screenPosition.y > (float)Screen.height)
{
return false;
}
return true;
}
}
}