115 lines
3.1 KiB
Plaintext
115 lines
3.1 KiB
Plaintext
/*
|
|
文件名:Drag_Button.nut
|
|
路径:User/UI/Widget/Drag_Button.nut
|
|
创建日期:2024-12-14 09:40
|
|
文件用途:拖动按钮
|
|
*/
|
|
class Yosin_DragButton extends Yosin_CommonUi {
|
|
//路径
|
|
Path = "";
|
|
//索引
|
|
Idx = 0;
|
|
//方向
|
|
Direction = true;
|
|
|
|
//按钮
|
|
Button = null;
|
|
|
|
//变动位置回调函数
|
|
OnChange = null;
|
|
|
|
//鼠标相对位置
|
|
M_Xpos = null;
|
|
M_Ypos = null;
|
|
//未移动时的初始坐标
|
|
BasePos = null;
|
|
//移动Flag
|
|
MoveFlag = false;
|
|
//最大移动值
|
|
Max_Move_Value = 0;
|
|
//移动值
|
|
Move_Value = 0;
|
|
//侦测值
|
|
Detect_Value = 0;
|
|
|
|
constructor(X, Y, W, H, Path, Idx, Direction = true, UnavailableFlag = true, IsTwoImg = false) {
|
|
this.Path = Path;
|
|
this.Idx = Idx;
|
|
this.Direction = Direction;
|
|
base.constructor(X, Y, W, H);
|
|
|
|
Button = Yosin_SplicingButton(0, 0, W, H, Path, Idx, Direction, UnavailableFlag, IsTwoImg);
|
|
Button.DownSimulateOffset = false;
|
|
AddUIChild(Button);
|
|
|
|
BasePos = {
|
|
x = X,
|
|
y = Y
|
|
}
|
|
|
|
}
|
|
|
|
//override
|
|
//鼠标左键按下回调
|
|
function OnMouseLbDown(MousePos_X, MousePos_Y, WindowInteractiveFlag) {
|
|
base.OnMouseLbDown(MousePos_X, MousePos_Y, WindowInteractiveFlag);
|
|
|
|
if (isInRect) {
|
|
MoveFlag = true;
|
|
M_Xpos = MousePos_X; //原始鼠标位置数据
|
|
M_Ypos = MousePos_Y;
|
|
B_X = X; //原始窗口位置
|
|
B_Y = Y;
|
|
}
|
|
}
|
|
|
|
//override
|
|
function OnMouseProc(MousePos_X, MousePos_Y, WindowInteractiveFlag) {
|
|
//调用原生方法
|
|
base.OnMouseProc(MousePos_X, MousePos_Y, WindowInteractiveFlag);
|
|
|
|
//移动
|
|
if (MoveFlag) {
|
|
//左键拖动
|
|
if (Direction) {
|
|
Move_Value = B_X + (MousePos_X - M_Xpos);
|
|
if (!(Move_Value >= (0 + BasePos.x) && Move_Value <= (Max_Move_Value - Width + BasePos.x))) {
|
|
X = Move_Value;
|
|
DragLogic((Move_Value - Localtion_X).tofloat() / (Max_Move_Value - Width + BasePos.x - Localtion_X).tofloat());
|
|
}
|
|
} else {
|
|
Move_Value = B_Y + (MousePos_Y - M_Ypos);
|
|
if (Move_Value >= (0 + BasePos.y) && Move_Value <= (Max_Move_Value - Height + BasePos.y)) {
|
|
Y = (Move_Value);
|
|
DragLogic((Move_Value - Localtion_Y).tofloat() / (Max_Move_Value - Height + BasePos.y - Localtion_Y).tofloat());
|
|
}
|
|
}
|
|
|
|
SyncPos(X, Y);
|
|
}
|
|
}
|
|
|
|
//拖动逻辑
|
|
function DragLogic(Value) {
|
|
Detect_Value = Value;
|
|
if (OnChange) OnChange(Value);
|
|
}
|
|
|
|
//设置位置
|
|
function SetPos(gX, gY) {
|
|
X = gX;
|
|
Y = gY;
|
|
SyncPos(X, Y);
|
|
}
|
|
|
|
//鼠标左键弹起回调
|
|
function OnMouseLbUp(MousePos_X, MousePos_Y, WindowInteractiveFlag) {
|
|
base.OnMouseLbUp(MousePos_X, MousePos_Y, WindowInteractiveFlag);
|
|
MoveFlag = false;
|
|
}
|
|
|
|
//设置最大移动值
|
|
function SetMaxMoveValue(Value) {
|
|
Max_Move_Value = Value;
|
|
}
|
|
} |