using UnityEngine;

/// <summary>
/// 适配2D相机
/// </summary>
[RequireComponent(typeof(Camera))] //必须要有相机组件
public class AdaptationCamera2D : AdaptationBase //继承AdaptationBase实现OnScreenResize
{
    private Camera camera; //获取到相机组件

    /*需要适配的宽度
     *（每个颜色块的大小为1.28个Unity计数单位，按照最多9行来适配，再加1个单位的偏移，留出两边的空白区域）
     * 当然你也可以动态来获取
    */
    public float width = 1f * 9 + 1;
    public float height = 1f * 9 + 1; //与宽同理，因为棋盘的最大宽高其实是相等的，所以这个值没啥作用

    protected override void Awake()
    {
        base.Awake(); //必须要调用父类的Awake方法

        camera = GetComponent<Camera>(); //获取到相机组件
        OnScreenResize();
    }

    private float cameraSize;
    public float getCameraSize
    {
        get { return cameraSize; }
    }
    /// <summary>
    /// 具体的实现逻辑
    /// </summary>
    protected override void OnScreenResize()
    {
        //竖屏时
        if (!AdaptationManager.Instance.wideMode)
        {
            //实际宽高比小于设计宽高比（长屏）
            if (AdaptationManager.Instance.actualRatio < AdaptationManager.Instance.defaultRatio)
            {
                //按照屏幕宽度适配相机大小
                //计算出实际需要适配的高度，相机的Size等于高度的一半
                camera.orthographicSize = width / AdaptationManager.Instance.actualRatio / 2f;
                cameraSize = camera.orthographicSize;
            }
            //宽屏（PAD）
            else
            {
                //按照实际宽高比重新计算宽度
                // width * (AdaptationManager.Instance.actualRatio / AdaptationManager.Instance.defaultRatio)：适配宽度*宽高比倍数=实际的宽度
                // /AdaptationManager.Instance.actualRatio / 2f：实际的宽度再除以真实的宽高比得出实际的高度，然后再除以2计算出相机的Size
                camera.orthographicSize =
                    width * (AdaptationManager.Instance.actualRatio / AdaptationManager.Instance.defaultRatio) /
                    AdaptationManager.Instance.actualRatio / 2f;
                cameraSize = camera.orthographicSize;
            }
        }
        //横屏时,让显示效果和竖屏时保持一样的大小，相当于竖屏旋转了90度的样子
        else
        {
            //横屏时，宽高比实际是高除以宽，因为我们的设计分辨率为720:1280,9:16的竖屏模式
            float tempRatio = Screen.height * 1.0f / Screen.width;
            //实际比例小于设计比例
            if (tempRatio < AdaptationManager.Instance.defaultRatio)
            {
                //适配宽度作为高度进行适配
                camera.orthographicSize = width / 2f;
                cameraSize = camera.orthographicSize;
            }
            else
            {
                //宽度作为高度适配
                //width * (tempRatio / AdaptationManager.Instance.defaultRatio) / 2f：适配宽度/（实际宽高比/设计宽高比）/2；
                camera.orthographicSize = width * (tempRatio / AdaptationManager.Instance.defaultRatio) / 2f;
                cameraSize = camera.orthographicSize;
            }
        }
    }
}