/*
文件名:UI_Widget.nut
路径:Core/UI_Class/UI_Widget.nut
创建日期:2024-11-08	14:24
文件用途: 控件基类
*/
//基础UI
class Yosin_CommonUi extends Yosin_BaseWindow {

    ObjectId = null;

    Localtion_X = 0;
    Localtion_Y = 0;
    Width = null;
    Height = null;

    isLBDown = false;
    //是否悬停
    isInRect = false;

    OnClick = null;
    OnClickSound = null;

    Data = null;

    constructor(x, y, width, height) {
        this.Localtion_X = x;
        this.Localtion_Y = y;
        this.Width = width;
        this.Height = height;

        ObjectId = clock();
        base.constructor();
        //构造时第一次同步坐标
        SyncPos(x, y);
    }

    //override
    //鼠标事件回调
    function OnMouseProc(MousePos_X, MousePos_Y) {
        local Pos = GetWorldPosition();
        if (Math.IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, Pos.x, Pos.y, Width, Height)) isInRect = true;
        else isInRect = false;
    }
    //鼠标左键按下回调
    function OnMouseLbDown(MousePos_X, MousePos_Y) {
        local Pos = GetWorldPosition();
        if (Math.IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, Pos.x, Pos.y, Width, Height)) {
            isLBDown = true;
            //如果有配置按键音效
            if (OnClickSound) {
                Sq_PlaySoundEffect(OnClickSound);
            }
        }
    }
    //鼠标左键弹起回调
    function OnMouseLbUp(MousePos_X, MousePos_Y) {
        isLBDown = false;
    }

    //鼠标左键单击回调
    function OnMouseLbClick(MousePos_X, MousePos_Y) {
        local Pos = GetWorldPosition();
        if (Math.IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, Pos.x, Pos.y, Width, Height)) {
            if (OnClick) OnClick(this);
        }
    }

}

//基础按钮
class Yosin_BaseButton extends Yosin_CommonUi {
    //按钮状态
    State = 0;
    DWidth = null;
    Path = null;
    Idx = null;

    Sprite = null;
    SpriteState = -1;
    FrameList = null;


    constructor(X, Y, W, H, Path, Idx) {
        this.DWidth = W;
        this.Path = Path;
        this.Idx = Idx;
        base.constructor(X, Y, W, H);

        FrameList = [];
        Sprite = CL_SpriteObject();
        // Sprite.ShowBorder(true);
        Addchild(Sprite);

        for (local i = 0; i< 4; i++) {
            local Sf = CL_SpriteFrameObject(this.Path, this.Idx + i);
            FrameList.push(Sf);
        }
    }

    function ChangeFrame() {
        //状态更改 刷新精灵帧
        if (State != SpriteState) {
            //如果按下 调整Y坐标向下一个单位
            if (State == 2) {
                Y += 1;
                SyncPos(X, Y);
            } else if (SpriteState == 2) {
                Y -= 1;
                SyncPos(X, Y);
            }
            SpriteState = State;
            Sprite.SetFrame(FrameList[SpriteState]);
            Sprite.SetPosition(0, 0);
        }
    }

    function Proc(Dt) {
        //不可用
        if (State == 3) {

        } else {
            //按下
            if (isLBDown) {
                State = 2;
            }
            //悬停
            else if (isInRect) {
                State = 1;
            }
            //普通
            else {
                State = 0;
            }
        }
        ChangeFrame();
    }
}