DOF/sqr/User/UI/Window/9_HUD/SkillSlot.nut

163 lines
4.8 KiB
Plaintext
Raw Normal View History

2025-02-20 13:53:36 +08:00
/*
文件名:SkillSlot.nut
路径:User/UI/Window/9_HUD/SkillSlot.nut
创建日期:2025-02-18 07:51
文件用途:HUD血槽的技能槽
*/
class UISpace_Hud.SkillSlot extends Yosin_CommonUi {
Type = null;
Pos = null;
//悬停特效
HoverEffect = null;
//物品对象
Skill = null;
//物品对象的图标
SkillIcon = null;
//物品对象的详细信息窗口
SkillInfo = null;
//详细信息窗口显示Flag
SkillInfoShowFlag = false;
constructor(gType, gPos) {
this.Type = gType;
this.Pos = gPos;
base.constructor(0, 0, 28, 28);
local KeyValue;
if (gType == 0) {
if (gPos == 0) KeyValue = getconsttable().CONTROLLER["OPTION_HOTKEY_SKILL"];
else KeyValue = getconsttable().CONTROLLER["OPTION_HOTKEY_EXSKILL" + gPos];
} else if (gType == 1) {
if (gPos == 0) KeyValue = getconsttable().CONTROLLER["OPTION_HOTKEY_ATTACK"];
else KeyValue = getconsttable().CONTROLLER["OPTION_HOTKEY_QUICK_SKILL" + gPos];
}
//角标绘制
local CornerMarkerDrawing = CL_SpriteObject("sprite/interface/keyshortcut.img", (KeyValue <= 10) ? KeyValue : 40 + KeyValue);
CornerMarkerDrawing.SetZOrder(9);
Addchild(CornerMarkerDrawing);
// OpenDeBug();
HoverEffect = CL_SpriteObject("sprite/interface/newstyle/windows/inventory/inventory.img", 131);
HoverEffect.SetPosition(1, 1);
HoverEffect.SetZOrder(10);
HoverEffect.SetVisible(false);
Addchild(HoverEffect);
}
function SetSkill(Skill) {
//关闭所有详细信息显示
if (SkillInfoShowFlag) {
CloseInfo();
}
if (Skill) {
this.Skill = Skill;
//如果原先有图标则先移除图标在添加
if (this.SkillIcon) {
Removechild(this.SkillIcon);
}
this.SkillIcon = this.Skill.GetIconSprite();
Addchild(this.SkillIcon);
this.SkillInfo = this.Skill.GetInfoWindow();
} else {
this.Skill = null;
if (this.SkillIcon) {
Removechild(this.SkillIcon);
this.SkillIcon = null;
}
this.SkillInfo = null;
}
this.SkillIcon.SetPosition(1, 1);
}
//显示详细信息
function ShowInfo(x, y) {
if (!Skill) return;
if (!this.SkillInfo) GenerateInfo();
this.SkillInfoShowFlag = true;
// 获取信息框尺寸
local infoW = 211;
local infoH = this.SkillInfo.RealCanvasHeight;
// X轴边界修正
if (x< 0) {
x = 0;
} else if (x + infoW > 1067) {
x = 1067 - infoW;
}
// Y轴边界修正
if (y< 0) {
y = 0;
} else if (y + infoH > 600) {
y = 600 - infoH;
}
//设置位置
this.SkillInfo.SetPosition(x, y);
this.SkillInfo.ResetFocus();
}
//关闭显示详细信息
function CloseInfo() {
if (this.SkillInfo) {
this.SkillInfoShowFlag = false;
this.SkillInfo.CloseWindow();
}
}
//override
//鼠标事件回调
function OnMouseProc(MousePos_X, MousePos_Y, WindowInteractiveFlag) {
if (!Visible) return;
base.OnMouseProc(MousePos_X, MousePos_Y, WindowInteractiveFlag);
if (isInRect && !IMouse.DragObj && !WindowInteractiveFlag) {
//如果有道具
if (Skill) {
//设置透明度
HoverEffect.SetOpacity(0.4);
if (!SkillInfoShowFlag) {
//显示详细信息
ShowInfo(MousePos_X - 50, MousePos_Y - ((SkillInfo.RealCanvasHeight + 10) / 2));
}
}
//设置悬停槽
HoverEffect.SetVisible(true);
} else {
HoverEffect.SetVisible(false);
//关闭所有详细信息显示
if (SkillInfoShowFlag) {
CloseInfo();
}
}
}
//override
//鼠标右键单击回调
function OnMouseRbClick(MousePos_X, MousePos_Y, WindowInteractiveFlag) {
//调用原生方法
base.OnMouseRbClick(MousePos_X, MousePos_Y, WindowInteractiveFlag);
if (isInRect && !WindowInteractiveFlag) {
//发送脱下装备包
MySocket.Send(PACKET_ID.WEAR_EQUIPMENT, {
backpackId = 8,
oldPos = Pos
});
}
}
//override
//鼠标左键单击回调
function OnMouseLbDown(MousePos_X, MousePos_Y, WindowInteractiveFlag) {
//调用原生方法
base.OnMouseLbDown(MousePos_X, MousePos_Y, WindowInteractiveFlag);
//关闭所有详细信息显示
if (SkillInfoShowFlag) {
CloseInfo();
}
}
}