using UnityEngine;
using UnityEngine.UI;

/// <summary>
/// 屏幕改变时适配UICanvas组件
/// </summary>
[RequireComponent(typeof(CanvasScaler))] //要有CanvasScaler才能绑定次脚本
public class AdaptationCanvas : AdaptationBase
{
    private CanvasScaler canvasScaler; //获取到CanvasScaler组件

    protected override void Awake()
    {
        base.Awake(); //注意注意注意！！！这里一定要调base，因为我们在基类里实现了方法的注册

        Init();
    }

    /// <summary>
    /// 初始化数据
    /// </summary>
    private void Init()
    {
        canvasScaler = GetComponent<CanvasScaler>();

        //为CanvasScaler赋初值（仅仅是以防万一，在Inspector已经赋值，以下步骤可以略过）

        //缩放模式为按照屏幕尺寸缩放
        canvasScaler.uiScaleMode = CanvasScaler.ScaleMode.ScaleWithScreenSize;
        //默认分辨率为默认的设计分辨率
        canvasScaler.referenceResolution = new Vector2(AdaptationManager.Instance.defaultWidth,
            AdaptationManager.Instance.defaultHeight);
        //适配模式为按照屏幕宽高适配
        canvasScaler.screenMatchMode = CanvasScaler.ScreenMatchMode.MatchWidthOrHeight;
        //默认按照宽度适配
        canvasScaler.matchWidthOrHeight = 0;
    }

    /// <summary>
    /// 实现适配的具体逻辑
    /// </summary>
    protected override void OnScreenResize()
    {
        //注意：我设置的默认宽高为720:1280，是9:16的竖屏模式，需要根据实际情况动态调整代码判断的逻辑
        if (AdaptationManager.Instance.wideMode)
        {
            //TODO 横屏模式的适配暂时先不考虑（如果你是在开发横屏游戏，那么逻辑就写在这里，先不考虑竖屏模式）
        }
        else
        {
            //宽高比大于默认宽高比,Pad模式（按照高度来适配）
            if (AdaptationManager.Instance.actualRatio > AdaptationManager.Instance.defaultRatio)
            {
                canvasScaler.matchWidthOrHeight = 1;
            }
            //宽高比小于等于默认宽高比，手机模式（按照宽度来适配）
            else
            {
                canvasScaler.matchWidthOrHeight = 0;
            }
        }
    }
}
