772 lines
21 KiB
Plaintext
772 lines
21 KiB
Plaintext
/*
|
|
文件名: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;
|
|
|
|
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;
|
|
base.OnMouseProc(MousePos_X, MousePos_Y);
|
|
}
|
|
//鼠标左键按下回调
|
|
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;
|
|
}
|
|
base.OnMouseLbDown(MousePos_X, MousePos_Y);
|
|
}
|
|
//鼠标左键弹起回调
|
|
function OnMouseLbUp(MousePos_X, MousePos_Y) {
|
|
isLBDown = false;
|
|
base.OnMouseLbUp(MousePos_X, MousePos_Y);
|
|
}
|
|
|
|
//鼠标左键单击回调
|
|
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);
|
|
//如果有配置按键音效
|
|
if (OnClickSound) {
|
|
Sq_PlaySoundEffect(OnClickSound);
|
|
}
|
|
}
|
|
base.OnMouseLbClick(MousePos_X, MousePos_Y);
|
|
}
|
|
|
|
}
|
|
|
|
//基础按钮
|
|
class Yosin_BaseButton extends Yosin_CommonUi {
|
|
//按钮状态
|
|
State = 0;
|
|
Path = null;
|
|
Idx = null;
|
|
|
|
Sprite = null;
|
|
SpriteState = -1;
|
|
FrameList = null;
|
|
|
|
//按下时的模拟偏移
|
|
DownSimulateOffset = true;
|
|
|
|
constructor(X, Y, W, H, Path, Idx) {
|
|
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) {
|
|
//按下时模拟偏移的Flag 如果按下 调整Y坐标向下一个单位
|
|
if (DownSimulateOffset) {
|
|
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();
|
|
}
|
|
}
|
|
|
|
//三分法拉伸
|
|
class Yosin_EmeStretch extends Yosin_CommonUi {
|
|
|
|
Path = null;
|
|
Idx = null;
|
|
//按钮状态
|
|
SpriteList = null;
|
|
|
|
constructor(X, Y, W, H, Path, Idx, Direction = true) {
|
|
this.Path = Path;
|
|
this.Idx = Idx;
|
|
base.constructor(X, Y, W, H);
|
|
|
|
// 创建画布
|
|
local Canvas = CL_CanvasObject();
|
|
// 重设大小并清空
|
|
Canvas.ResizeAndClear(W, H);
|
|
// 开始绘制
|
|
Canvas.BeginDraw();
|
|
|
|
SpriteList = [];
|
|
SpriteList.push(CL_SpriteObject(Path, Idx));
|
|
SpriteList.push(CL_SpriteObject(Path, Idx + 1));
|
|
SpriteList.push(CL_SpriteObject(Path, Idx + 2));
|
|
|
|
//横向
|
|
if (Direction) {
|
|
local ScaleW = (W - SpriteList[0].GetSize().w - SpriteList[2].GetSize().w);
|
|
local ScaleRate = ScaleW / SpriteList[1].GetSize().w;
|
|
|
|
SpriteList[1].SetPosition(SpriteList[0].GetSize().w, 0.0);
|
|
SpriteList[1].SetScale(ScaleRate, 1.0);
|
|
SpriteList[2].SetPosition(SpriteList[0].GetSize().w + ScaleW, 0.0);
|
|
}
|
|
//纵向
|
|
else {
|
|
local ScaleH = (H - SpriteList[0].GetSize().h - SpriteList[2].GetSize().h);
|
|
local ScaleRate = ScaleH / SpriteList[1].GetSize().h;
|
|
|
|
SpriteList[1].SetPosition(0, SpriteList[0].GetSize().h);
|
|
SpriteList[1].SetScale(1.0, ScaleRate);
|
|
SpriteList[2].SetPosition(0, SpriteList[0].GetSize().h + ScaleH);
|
|
}
|
|
|
|
foreach(Child in SpriteList) {
|
|
// Addchild(Child);
|
|
Canvas.DrawSprite(Child);
|
|
}
|
|
|
|
// 结束绘制
|
|
Canvas.EndDraw();
|
|
// 添加画布
|
|
Addchild(Canvas);
|
|
|
|
}
|
|
}
|
|
|
|
|
|
// 九宫格拉伸
|
|
function Yosin_NineBoxStretch(X, Y, width, height, path, imgId) {
|
|
|
|
|
|
// 创建画布
|
|
local Canvas = CL_CanvasObject();
|
|
Canvas.SetPosition(X, Y);
|
|
// 重设大小并清空
|
|
Canvas.ResizeAndClear(width, height);
|
|
// 开始绘制
|
|
Canvas.BeginDraw();
|
|
|
|
// 左上角
|
|
// local backgroundTopLeft = CL_SpriteObject(path, imgId);
|
|
local backgroundTopLeft = CL_SpriteObject(path, imgId);
|
|
// 上边
|
|
local backgroundTop = CL_SpriteObject(path, imgId + 1);
|
|
// 右上角
|
|
local backgroundTopRight = CL_SpriteObject(path, imgId + 2);
|
|
// 左边
|
|
local backgroundLeft = CL_SpriteObject(path, imgId + 3);
|
|
// 中间
|
|
local backgroundCenter = CL_SpriteObject(path, imgId + 4);
|
|
// 右边
|
|
local backgroundRight = CL_SpriteObject(path, imgId + 5);
|
|
// 左下角
|
|
local backgroundBottomLeft = CL_SpriteObject(path, imgId + 6);
|
|
// 下边
|
|
local backgroundBottom = CL_SpriteObject(path, imgId + 7);
|
|
// 右下角
|
|
local backgroundBottomRight = CL_SpriteObject(path, imgId + 8);
|
|
|
|
|
|
// 左上角
|
|
Canvas.DrawSprite(backgroundTopLeft);
|
|
|
|
local TopLeftSize = backgroundTopLeft.GetSize();
|
|
local TopLeftBottom = TopLeftSize.h;
|
|
local TopLeftRight = TopLeftSize.w;
|
|
|
|
// 中间图片大小
|
|
local centerImgSize = backgroundCenter.GetSize();
|
|
local centerImgWidth = centerImgSize.w;
|
|
local centerImgHeight = centerImgSize.h;
|
|
|
|
local centerWidth = width - backgroundTopLeft.GetSize().w - backgroundTopRight.GetSize().w;
|
|
local centerHeight = height - backgroundTopLeft.GetSize().h - backgroundBottomLeft.GetSize().h;
|
|
|
|
|
|
local scaleW = (centerWidth - 1).tofloat() / centerImgWidth.tofloat();
|
|
local scaleH = (centerHeight - 1).tofloat() / centerImgHeight.tofloat();
|
|
|
|
// 上边
|
|
backgroundTop.SetScale(scaleW, 1);
|
|
backgroundTop.SetPosition(TopLeftRight, 0);
|
|
Canvas.DrawSprite(backgroundTop);
|
|
|
|
// 右上角
|
|
backgroundTopRight.SetPosition(width - backgroundTopRight.GetSize().w - 1, 0);
|
|
Canvas.DrawSprite(backgroundTopRight);
|
|
|
|
// 左边
|
|
backgroundLeft.SetScale(1, scaleH);
|
|
backgroundLeft.SetPosition(0, TopLeftBottom);
|
|
Canvas.DrawSprite(backgroundLeft);
|
|
|
|
// 中间
|
|
backgroundCenter.SetScale(scaleW, scaleH);
|
|
// Addchild(backgroundCenter);
|
|
backgroundCenter.SetPosition(TopLeftRight, backgroundLeft.Y);
|
|
Canvas.DrawSprite(backgroundCenter);
|
|
|
|
// 右边
|
|
backgroundRight.SetScale(1, scaleH);
|
|
backgroundRight.SetPosition(width - backgroundRight.GetSize().w - 1, backgroundCenter.Y);
|
|
Canvas.DrawSprite(backgroundRight);
|
|
|
|
// 左下角
|
|
backgroundBottomLeft.SetPosition(0, height - backgroundBottomLeft.GetSize().h - 1);
|
|
Canvas.DrawSprite(backgroundBottomLeft);
|
|
|
|
// 下边
|
|
backgroundBottom.SetScale(scaleW, 1);
|
|
backgroundBottom.SetPosition(TopLeftRight, backgroundBottomLeft.Y);
|
|
Canvas.DrawSprite(backgroundBottom);
|
|
|
|
// 右下角
|
|
backgroundBottomRight.SetPosition(width - backgroundBottomRight.GetSize().w - 1, backgroundBottomLeft.Y);
|
|
Canvas.DrawSprite(backgroundBottomRight);
|
|
|
|
// 结束绘制
|
|
Canvas.EndDraw();
|
|
// 添加画布
|
|
// Addchild(Canvas);
|
|
|
|
return Canvas;
|
|
}
|
|
|
|
|
|
|
|
// //九宫格拉伸
|
|
// class Yosin_NineBoxStretch extends Yosin_CommonUi {
|
|
|
|
// constructor(X, Y, W, H, Path, Idx) {
|
|
// base.constructor(X, Y, W, H);
|
|
// DrawBackground(W, H, Path, Idx);
|
|
// }
|
|
|
|
|
|
// // 绘制
|
|
// function DrawBackground(width, height, path, imgId) {
|
|
|
|
|
|
// // 创建画布
|
|
// local Canvas = CL_CanvasObject();
|
|
// // 重设大小并清空
|
|
// Canvas.ResizeAndClear(width, height);
|
|
// // 开始绘制
|
|
// Canvas.BeginDraw();
|
|
|
|
// // 左上角
|
|
// // local backgroundTopLeft = CL_SpriteObject(path, imgId);
|
|
// local backgroundTopLeft = CL_SpriteObject(path, imgId);
|
|
// // 上边
|
|
// local backgroundTop = CL_SpriteObject(path, imgId + 1);
|
|
// // 右上角
|
|
// local backgroundTopRight = CL_SpriteObject(path, imgId + 2);
|
|
// // 左边
|
|
// local backgroundLeft = CL_SpriteObject(path, imgId + 3);
|
|
// // 中间
|
|
// local backgroundCenter = CL_SpriteObject(path, imgId + 4);
|
|
// // 右边
|
|
// local backgroundRight = CL_SpriteObject(path, imgId + 5);
|
|
// // 左下角
|
|
// local backgroundBottomLeft = CL_SpriteObject(path, imgId + 6);
|
|
// // 下边
|
|
// local backgroundBottom = CL_SpriteObject(path, imgId + 7);
|
|
// // 右下角
|
|
// local backgroundBottomRight = CL_SpriteObject(path, imgId + 8);
|
|
|
|
|
|
// // 左上角
|
|
// Canvas.DrawSprite(backgroundTopLeft);
|
|
|
|
// local TopLeftSize = backgroundTopLeft.GetSize();
|
|
// local TopLeftBottom = TopLeftSize.h;
|
|
// local TopLeftRight = TopLeftSize.w;
|
|
|
|
// // 中间图片大小
|
|
// local centerImgSize = backgroundCenter.GetSize();
|
|
// local centerImgWidth = centerImgSize.w;
|
|
// local centerImgHeight = centerImgSize.h;
|
|
|
|
// local centerWidth = width - backgroundTopLeft.GetSize().w - backgroundTopRight.GetSize().w;
|
|
// local centerHeight = height - backgroundTopLeft.GetSize().h - backgroundBottomLeft.GetSize().h;
|
|
|
|
|
|
// local scaleW = (centerWidth - 1).tofloat() / centerImgWidth.tofloat();
|
|
// local scaleH = (centerHeight - 1).tofloat() / centerImgHeight.tofloat();
|
|
|
|
// // 上边
|
|
// backgroundTop.SetScale(scaleW, 1);
|
|
// backgroundTop.SetPosition(TopLeftRight + 1, 0);
|
|
// Canvas.DrawSprite(backgroundTop);
|
|
|
|
// // 右上角
|
|
// backgroundTopRight.SetPosition(width - backgroundTopRight.GetSize().w, 0);
|
|
// Canvas.DrawSprite(backgroundTopRight);
|
|
|
|
// // 左边
|
|
// backgroundLeft.SetScale(1, scaleH);
|
|
// backgroundLeft.SetPosition(0, TopLeftBottom + 1);
|
|
// Canvas.DrawSprite(backgroundLeft);
|
|
|
|
// // 中间
|
|
// backgroundCenter.SetScale(scaleW, scaleH);
|
|
// // Addchild(backgroundCenter);
|
|
// backgroundCenter.SetPosition(TopLeftRight + 1, backgroundLeft.Y);
|
|
// Canvas.DrawSprite(backgroundCenter);
|
|
|
|
// // 右边
|
|
// backgroundRight.SetScale(1, scaleH);
|
|
// backgroundRight.SetPosition(width - backgroundRight.GetSize().w, backgroundCenter.Y);
|
|
// Canvas.DrawSprite(backgroundRight);
|
|
|
|
// // 左下角
|
|
// backgroundBottomLeft.SetPosition(0, height - backgroundBottomLeft.GetSize().h);
|
|
// Canvas.DrawSprite(backgroundBottomLeft);
|
|
|
|
// // 下边
|
|
// backgroundBottom.SetScale(scaleW, 1);
|
|
// backgroundBottom.SetPosition(TopLeftRight + 1, backgroundBottomLeft.Y);
|
|
// Canvas.DrawSprite(backgroundBottom);
|
|
|
|
// // 右下角
|
|
// backgroundBottomRight.SetPosition(width - backgroundBottomRight.GetSize().w, backgroundBottomLeft.Y);
|
|
// Canvas.DrawSprite(backgroundBottomRight );
|
|
|
|
// // 结束绘制
|
|
// Canvas.EndDraw();
|
|
// // 添加画布
|
|
// Addchild(Canvas);
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
//拼接按钮
|
|
class Yosin_SplicingButton extends Yosin_CommonUi {
|
|
//按钮状态
|
|
State = 0;
|
|
Path = null;
|
|
Idx = null;
|
|
|
|
SpriteList = null;
|
|
SpriteState = -1;
|
|
FrameList = null;
|
|
|
|
//按下时的模拟偏移
|
|
DownSimulateOffset = true;
|
|
|
|
constructor(X, Y, W, H, Path, Idx, Direction = true, UnavailableFlag = true) {
|
|
this.Path = Path;
|
|
this.Idx = Idx;
|
|
base.constructor(X, Y, W, H);
|
|
|
|
SpriteList = array(4);
|
|
|
|
//普通态
|
|
SpriteList[0] = Yosin_EmeStretch(0, 0, W, H, Path, Idx, Direction);
|
|
//悬停态
|
|
SpriteList[1] = Yosin_EmeStretch(0, 0, W, H, Path, Idx + (UnavailableFlag ? 4 : 3), Direction);
|
|
//按下态
|
|
SpriteList[2] = Yosin_EmeStretch(0, 0, W, H, Path, Idx + (UnavailableFlag ? 8 : 6), Direction);
|
|
if (UnavailableFlag) {
|
|
//不可用态
|
|
SpriteList[3] = Yosin_EmeStretch(0, 0, W, H, Path, Idx + 12, Direction);
|
|
}
|
|
}
|
|
|
|
function ChangeFrame() {
|
|
//状态更改 刷新精灵帧
|
|
if (State != SpriteState) {
|
|
//按下时模拟偏移的Flag 如果按下 调整Y坐标向下一个单位
|
|
if (DownSimulateOffset) {
|
|
if (State == 2) {
|
|
Y += 1;
|
|
SyncPos(X, Y);
|
|
} else if (SpriteState == 2) {
|
|
Y -= 1;
|
|
SyncPos(X, Y);
|
|
}
|
|
}
|
|
if (SpriteState != -1) {
|
|
RemoveUIChild(SpriteList[SpriteState]);
|
|
}
|
|
SpriteState = State;
|
|
AddUIChild(SpriteList[SpriteState]);
|
|
}
|
|
}
|
|
|
|
function Proc(Dt) {
|
|
//不可用
|
|
if (State == 3) {
|
|
|
|
} else {
|
|
//按下
|
|
if (isLBDown) {
|
|
State = 2;
|
|
}
|
|
//悬停
|
|
else if (isInRect) {
|
|
State = 1;
|
|
}
|
|
//普通
|
|
else {
|
|
State = 0;
|
|
}
|
|
}
|
|
ChangeFrame();
|
|
}
|
|
}
|
|
|
|
|
|
// 标题按钮
|
|
class titleButton extends Yosin_BaseButton {
|
|
|
|
index = null;
|
|
select = false;
|
|
cacheSelect = false;
|
|
cacheY = null;
|
|
|
|
LBDownOnClick = null;
|
|
|
|
constructor(X, Y, W, H, Path, Idx, title) {
|
|
base.constructor(X, Y, W, H, Path, Idx);
|
|
|
|
cacheY = Y;
|
|
DownSimulateOffset = false;
|
|
|
|
local backText = FontAssetManager.GenerateNormal(title, true, {
|
|
color = sq_RGBA(130, 114, 84, 255)
|
|
});
|
|
backText.SetUpdateFunc(function(Text, Dt) {
|
|
if (select == cacheSelect) return;
|
|
if (select) {
|
|
Text.SetFillColor(sq_RGBA(187, 176, 149, 255));
|
|
} else {
|
|
Text.SetFillColor(sq_RGBA(130, 114, 84, 255));
|
|
}
|
|
cacheSelect = select;
|
|
})
|
|
|
|
backText.SetPosition(9, 2);
|
|
Addchild(backText);
|
|
|
|
}
|
|
|
|
function ChangeFrame() {
|
|
//状态更改 刷新精灵帧
|
|
if (State != SpriteState) {
|
|
if (State == 2) {
|
|
Y = cacheY - 1;
|
|
SyncPos(X, Y);
|
|
} else if (SpriteState == 2) {
|
|
Y = cacheY;
|
|
SyncPos(X, Y);
|
|
}
|
|
SpriteState = State;
|
|
Sprite.SetFrame(FrameList[SpriteState]);
|
|
Sprite.SetPosition(0, 0);
|
|
}
|
|
}
|
|
|
|
function Proc(Dt) {
|
|
|
|
if (select) return;
|
|
|
|
//不可用
|
|
if (State == 3) {
|
|
|
|
} else {
|
|
//按下
|
|
if (isLBDown) {
|
|
State = 2;
|
|
select = true;
|
|
if (LBDownOnClick != null) {
|
|
LBDownOnClick(this);
|
|
}
|
|
}
|
|
//悬停
|
|
else if (isInRect) {
|
|
State = 1;
|
|
}
|
|
//普通
|
|
else {
|
|
State = 0;
|
|
}
|
|
}
|
|
ChangeFrame();
|
|
}
|
|
|
|
}
|
|
|
|
|
|
// 拉伸标题按钮
|
|
class Yosin_StretchTitleButton extends Yosin_CommonUi {
|
|
|
|
index = null;
|
|
//按钮状态
|
|
State = 0;
|
|
//ui的当前状态
|
|
uiState = 0;
|
|
|
|
cecheY = null;
|
|
|
|
titleText = null;
|
|
|
|
SpriteList = null;
|
|
|
|
// 鼠标左键按下时的回调
|
|
LBDownOnClick = null;
|
|
|
|
constructor(X, Y, W, H, Path, Idx, title) {
|
|
base.constructor(X, Y, W, H)
|
|
|
|
cecheY = Y;
|
|
SpriteList = array(3);
|
|
|
|
//普通态
|
|
SpriteList[0] = Yosin_EmeStretch(0, 0, W, H, Path, Idx);
|
|
AddUIChild(SpriteList[0]);
|
|
|
|
//悬停态
|
|
SpriteList[1] = Yosin_EmeStretch(0, 0, W, H, Path, Idx + 3);
|
|
SpriteList[1].SetVisible(false)
|
|
AddUIChild(SpriteList[1]);
|
|
//按下态
|
|
SpriteList[2] = Yosin_EmeStretch(0, 0, W, H, Path, Idx + 6);
|
|
SpriteList[2].SetVisible(false)
|
|
AddUIChild(SpriteList[2]);
|
|
|
|
// 文字
|
|
titleText = FontAssetManager.GenerateNormal(title, true, {
|
|
color = sq_RGBA(130, 114, 84, 255)
|
|
});
|
|
titleText.SetUpdateFunc(function(Text, Dt) {
|
|
if (select == cacheSelect) return;
|
|
if (select) {
|
|
Text.SetFillColor(sq_RGBA(187, 176, 149, 255));
|
|
} else {
|
|
Text.SetFillColor(sq_RGBA(130, 114, 84, 255));
|
|
}
|
|
cacheSelect = select;
|
|
})
|
|
|
|
titleText.SetPosition(W / 2 - titleText.GetSize().w / 2, 2);
|
|
Addchild(titleText);
|
|
|
|
}
|
|
|
|
// 设置为选中状态
|
|
function SetSelect(select) {
|
|
if (select) {
|
|
State = 2;
|
|
ChangeFrame();
|
|
} else {
|
|
State = 0;
|
|
ChangeFrame();
|
|
}
|
|
}
|
|
|
|
|
|
function ChangeFrame() {
|
|
//状态更改 刷新精灵帧
|
|
if (State != uiState) {
|
|
if (State == 2) {
|
|
SyncPos(X, cecheY - 1);
|
|
} else {
|
|
SyncPos(X, cecheY);
|
|
}
|
|
uiState = State;
|
|
|
|
for (local i = 0; i< SpriteList.len(); i++) {
|
|
SpriteList[i].SetVisible(i == uiState);
|
|
}
|
|
}
|
|
}
|
|
|
|
function Proc(Dt) {
|
|
if (State == 2) return;
|
|
|
|
//按下
|
|
if (isLBDown) {
|
|
if (LBDownOnClick != null) {
|
|
LBDownOnClick(this);
|
|
}
|
|
State = 2;
|
|
}
|
|
//悬停
|
|
else if (isInRect) {
|
|
State = 1;
|
|
}
|
|
//普通
|
|
else {
|
|
State = 0;
|
|
}
|
|
ChangeFrame();
|
|
}
|
|
|
|
}
|
|
|
|
|
|
// 横向多个标题单选按钮
|
|
class Yosin_RowMoreTitleBtn extends Yosin_CommonUi {
|
|
|
|
LBDownOnClick = null;
|
|
btns = null;
|
|
tests = null;
|
|
|
|
constructor(X, Y, W, titles, path, idx, baseWidth = 48) {
|
|
this.tests = titles;
|
|
btns = [];
|
|
local btnX = 5;
|
|
for (local i = 0; i< titles.len(); i++) {
|
|
|
|
local textW = FontAssetManager.GenerateNormal(titles[i], true).GetSize().w + 10;
|
|
local btnW = baseWidth;
|
|
btnW = textW > btnW ? textW : btnW;
|
|
|
|
local titleBtn = Yosin_StretchTitleButton(btnX, 1, btnW, 19, path, idx, titles[i]);
|
|
titleBtn.index = i;
|
|
|
|
titleBtn.LBDownOnClick = function(btn) {
|
|
btn.Parent.LBDownOnClick(this, btn.index);
|
|
|
|
for (local i = 0; i< btn.Parent.btns.len(); i++) {
|
|
btn.Parent.btns[i].SetSelect(false);
|
|
btn.Parent.btns[i].titleText.SetFillColor(sq_RGBA(130, 114, 84, 255));
|
|
}
|
|
|
|
btn.SetSelect(true);
|
|
btn.Parent.btns[btn.index].titleText.SetFillColor(sq_RGBA(187, 176, 149, 255));
|
|
|
|
};
|
|
|
|
btns.push(titleBtn);
|
|
btnX += btnW;
|
|
}
|
|
|
|
base.constructor(X, Y, btnX, 21);
|
|
|
|
for (local i = 0; i< btns.len(); i++) {
|
|
AddUIChild(btns[i]);
|
|
}
|
|
|
|
btns[0].SetSelect(true);
|
|
|
|
// 创建画布
|
|
local Canvas = CL_CanvasObject();
|
|
Canvas.SetPosition(0, 19);
|
|
// 重设大小并清空
|
|
Canvas.ResizeAndClear(W, 1);
|
|
// 设置填充画刷 用于绘制边框和线条
|
|
Canvas.SetFillBrush(sq_RGBA(66, 61, 59, 250));
|
|
// 设置轮廓画刷 用于绘制边框和线条
|
|
Canvas.SetStrokeBrush(sq_RGBA(66, 61, 59, 250));
|
|
// 开始绘制
|
|
Canvas.BeginDraw();
|
|
|
|
// 画线段
|
|
Canvas.DrawLine(0, 1, W, 1);
|
|
|
|
// 结束绘制
|
|
Canvas.EndDraw();
|
|
// 添加画布
|
|
Addchild(Canvas);
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
// 进度显示
|
|
class Yosin_Schedule extends Yosin_CommonUi {
|
|
|
|
//背景
|
|
BgSprite = null;
|
|
//条
|
|
BarSprite = null;
|
|
|
|
// schedule 进度比例0-1
|
|
constructor(X, Y, W, H, path, idx) {
|
|
base.constructor(X, Y, W, H);
|
|
|
|
BgSprite = CL_SpriteObject(path, idx + 1);
|
|
Addchild(BgSprite);
|
|
|
|
BarSprite = CL_SpriteObject(path, idx);
|
|
Addchild(BarSprite);
|
|
}
|
|
|
|
function SetPercentage(Rate) {
|
|
local barSize = BarSprite.GetSize();
|
|
local barW = barSize.w * Rate;
|
|
|
|
BarSprite.SetCropRect(BarSprite.X, BarSprite.Y, barW, barSize.h);
|
|
BarSprite.SetSize(barW, barSize.h);
|
|
}
|
|
} |