控件框架基础引入
This commit is contained in:
80
UI/ObjectClass/GameWidget.nut
Normal file
80
UI/ObjectClass/GameWidget.nut
Normal file
@@ -0,0 +1,80 @@
|
||||
/*
|
||||
文件名:GameWidget.nut
|
||||
路径:UI/ObjectClass/GameWidget.nut
|
||||
创建日期:2025-10-21 22:05
|
||||
文件用途:
|
||||
*/
|
||||
class GameWidget extends WindowNode {
|
||||
//组件ID
|
||||
ObjectId = null;
|
||||
|
||||
//本地坐标
|
||||
Localtion_X = 0;
|
||||
Localtion_Y = 0;
|
||||
|
||||
//是否按下
|
||||
isLBDown = false;
|
||||
//是否悬停
|
||||
isInRect = false;
|
||||
|
||||
//点击事件
|
||||
OnClick = null;
|
||||
//点击音效
|
||||
ClickSound = null;
|
||||
//悬停音效
|
||||
HoverSound = null;
|
||||
HoverSoundFlag = false;
|
||||
|
||||
constructor(x, y, width, height) {
|
||||
this.Localtion_X = x;
|
||||
this.Localtion_Y = y;
|
||||
this.Width = width;
|
||||
this.Height = height;
|
||||
this.X = x;
|
||||
this.Y = y;
|
||||
|
||||
ObjectId = clock();
|
||||
base.constructor();
|
||||
SetPos(x, y);
|
||||
}
|
||||
|
||||
function OnMouseEvent(Type, Data, EventInteractiveFlag) {
|
||||
if (!Visible) return;
|
||||
//鼠标移动事件
|
||||
if (Type == UI_EVENT.MOUSEMOTION) {
|
||||
local Pos = GetWorldPos();
|
||||
if (Math.IsIntersectRect(Data[0], Data[1], 1, 1, Pos.x, Pos.y, Width, Height)) {
|
||||
//如果有配置悬停音效
|
||||
if (HoverSound && !HoverSoundFlag) {
|
||||
HoverSoundFlag = true;
|
||||
//TODO 音效系统
|
||||
// Sq_PlaySoundEffect(HoverSound);
|
||||
}
|
||||
isInRect = true;
|
||||
} else {
|
||||
HoverSoundFlag = false;
|
||||
isInRect = false;
|
||||
}
|
||||
} else if (Type == UI_EVENT.MOUSEBUTTONDOWN) {
|
||||
local IMouse = Game_Cursor.GetInstance();
|
||||
local Pos = GetWorldPos();
|
||||
if (Math.IsIntersectRect(IMouse.MouseX, IMouse.MouseY, 1, 1, Pos.x, Pos.y, Width, Height)) {
|
||||
isLBDown = true;
|
||||
}
|
||||
} else if (Type == UI_EVENT.MOUSEBUTTONUP) {
|
||||
local IMouse = Game_Cursor.GetInstance();
|
||||
local Pos = GetWorldPos();
|
||||
if (isLBDown && Math.IsIntersectRect(IMouse.MouseX, IMouse.MouseY, 1, 1, Pos.x, Pos.y, Width, Height)) {
|
||||
if (OnClick) this.OnClick(this);
|
||||
if (ClickSound) {
|
||||
//TODO 音效系统
|
||||
// Sq_PlaySoundEffect(ClickSound);
|
||||
}
|
||||
}
|
||||
isLBDown = false;
|
||||
}
|
||||
foreach (Window in Childrens) {
|
||||
if (Window instanceof WindowNode) Window.OnMouseEvent(Type, Data);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user