/* 文件名:CollectionBox.nut 路径:Project/CollectionBox/CollectionBox.nut 创建日期:2024-09-14 15:08 文件用途:收集箱 */ class LenheartNewUI_CollectionBox_BaseButton extends LenheartNewUI_CommonUi { State = 0; BaseIdx = 29; DWidth = null; Path = null; Idx = null; SetFlag = null; SetIndex = null; constructor(X, Y, W, H, Path, Idx) { this.DWidth = W; this.Path = Path; this.Idx = Idx; LenheartNewUI_CommonUi.constructor(X, Y, W, H); } function SetFrame(gPath, gIdx) { if (gPath) Path = gPath; Idx = gIdx; } function Show(obj) { //不可用 if (State == 8) { L_sq_DrawImg(Path, Idx + 3, X, Y + 1); } else { //按下 if (isLBDown) { L_sq_DrawImg(Path, Idx + 2, X, Y + 1); } //悬停 else if (isInRect) { L_sq_DrawImg(Path, Idx + 1, X, Y); } //普通 else { L_sq_DrawImg(Path, Idx, X, Y); } } } //鼠标左键弹起回调 function OnMouseLbUp(MousePos_X, MousePos_Y) { if (isLBDown && OnClick) { local obj = sq_getMyCharacter(); obj.sq_PlaySound("CLICK_BUTTON1"); OnClick(this); } isLBDown = false; } } class CollectionBoxC extends LenheartNewUI_Windows { //调试模式 // DeBugMode = true; //不是窗口 // NoWindow = true; //是否可见 Visible = false; //盒子按钮集合 BoxButton = null; //信息 Info = null; //当前页面 Page = null; //滚轮偏移 ScrollPos = 0; //页面滚轮偏移 PageScrollPos = 0; //悬停的宝珠 HoverItem = null; //镶嵌成功音效包 function AudioCallBack(Chunk) { local Jso = Json.Decode(Chunk); local Type = Jso.Type; local obj = sq_getMyCharacter(); switch (Type) { case 1: obj.sq_PlaySound("TRADE_OK"); break; case 2: obj.sq_PlaySound("ICON_DROP_TO_QUICKSLOT"); break; case 3: obj.sq_PlaySound("GAMBLE_RESULT_GOOD"); break; } } //基础配置包 function GetInfoCallBack(Chunk) { local Jso = Json.Decode(Chunk); local ZlibStrBuf = Json.Decode(L_sq_Dezlib(Jso.ZipS)); Info = ZlibStrBuf.info; foreach(Key, Aobj in Info) { if (!Page) Page = Key; local StrBuf1 = L_sq_GetStringDrawArray(Aobj.attS, 300); Aobj.AttsS <- StrBuf1[0] + "..."; Aobj.attS <- StrBuf1; } InitBoxButton(); } //获取收集信息 function GetCollectInfo() { local T = { op = 20077003 }; SendPackEx(T); } constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) { Childrens = []; BoxButton = []; //注册控件 RegisterWidget(); LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH); Pack_Control.rawset(20077028, GetInfoCallBack.bindenv(this)); Pack_Control.rawset(20077010, AudioCallBack.bindenv(this)); GetCollectInfo(); } //初始化按钮 function InitBoxButton() { if (BoxButton.len() > 0) { for (local i = 0; i< Childrens.len(); i++) { local Cobj = Childrens[i]; if (Cobj instanceof LenheartNewUI_CollectionBox_BaseButton) { Childrens.remove(i); i--; } } } local RealPos = 0; foreach(Pos, InfoObj in Info) { //关闭按钮 local ButtonBuf = LenheartNewUI_CollectionBox_BaseButton(8, 95 + (RealPos * 72), 102, 70, InfoObj.img, 1); ButtonBuf.SetFlag = Pos; ButtonBuf.SetIndex = RealPos; ButtonBuf.OnClick = function(ButtonObj) { Page = ButtonObj.SetFlag; }.bindenv(this); ButtonBuf.SetCallBackFunc(function(ButtonObj) { ButtonObj.Localtion_Y = 95 + ((ButtonObj.SetIndex - ScrollPos) * 72); if (ButtonObj.Localtion_Y< 95 || ButtonObj.Localtion_Y > 311) ButtonObj.Localtion_X = -9000; else ButtonObj.Localtion_X = 8; }.bindenv(this)); Childrens.append(ButtonBuf); RealPos++; } } function RegisterWidget() { //关闭按钮 local CloseButton = LenheartNewUI_BaseButton(356, 2, 11, 12, "interface/lenheartwindowcommon.img", 276); CloseButton.OnClick = function() { this.Visible = false; }.bindenv(this); Childrens.append(CloseButton); } //绘制主界面 function DrawMain(obj) { if (!Info) return; //窗口 L_sq_DrawImg("interface2/collectbox/collectboxbtn.img", 0, X, Y); //背景 L_sq_DrawImg(Info[Page].img, 0, X + 7, Y + 26); //绘制窗口名称 L_sq_DrawCode("我的收集箱", X + 160, Y + 8, sq_RGBA(255, 177, 0, 250), 0, 1); //绘制收集箱名称 L_sq_DrawCode(Info[Page].name, X + 208 - LenheartTextClass.GetStringLength(Info[Page].name) / 2, Y + 40, sq_RGBA(255, 177, 0, 250), 0, 1); //绘制收集箱信息缩略 L_sq_DrawCode(Info[Page].AttsS, X + 228 - LenheartTextClass.GetStringLength(Info[Page].AttsS) / 2, Y + 40 + 20, sq_RGBA(255, 242, 0, 250), 0, 1); HoverItem = null; setClip(X + 95, Y + 95, X + 348, Y + 375); //开始裁切 //绘制宝珠 foreach(pos, value in Info[Page].itemIds) { //绘制格子 L_sq_DrawImg(Info[Page].img, 5, X + value.x, Y + value.y + PageScrollPos); //绘制宝珠 DrawItemEx(X + value.x + Info[Page].Xp, Y + value.y + Info[Page].Yp + PageScrollPos, value.id, 1); //判断是否拥有 if (!value.isTure) { //遮挡 L_sq_DrawImg("interface/windowcommon.img", 157, X + value.x + Info[Page].Xp, Y + value.y + Info[Page].Yp + PageScrollPos); L_sq_DrawImg("interface/windowcommon.img", 157, X + value.x + Info[Page].Xp, Y + value.y + Info[Page].Yp + PageScrollPos); L_sq_DrawImg("interface/windowcommon.img", 157, X + value.x + Info[Page].Xp, Y + value.y + Info[Page].Yp + PageScrollPos); } if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X + value.x + Info[Page].Xp, Y + value.y + Info[Page].Yp + PageScrollPos, 29, 29)) { HoverItem = value; } } releaseClip(); //裁切结束 } function TopShow(obj) { if (!Info) return; if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X + 86, Y + 53, 272, 15)) { local StrArr = Info[Page].attS; local Str = Info[Page].AttsS; L_sq_DrawWindow(IMouse.GetXPos() - 140 + LenheartTextClass.GetStringLength(Str) / 2, IMouse.GetYPos() - 36, 0 + LenheartTextClass.GetStringLength(Str), 0 + (14 * StrArr.len()), "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13); local Xpos = LenheartTextClass.GetStringLength(Str) / 2; foreach(Pos, realStr in StrArr) { L_sq_DrawCode(realStr, IMouse.GetXPos() - 126 + Xpos, IMouse.GetYPos() - 24 + (Pos * 14), 0xFFFFFFFF, 1, 1); } } } //override function DrawItemInfo() { if (MousePosFlag != 2) return; if (ItemInfoDrawS) { if (!ItemObject) { local ItemId = ItemInfoDrawS.ItemId; if (Rindro_ItemInfoObject.rawin(ItemId)) { ItemObject = ItemInfoClass(Rindro_ItemInfoObject[ItemId]); } } ItemObject.Show(ItemInfoDrawS.X, ItemInfoDrawS.Y - ItemObject.PageLength); } else { ItemObject = null; } } function Show(obj) { DrawMain(obj); LenheartNewUI_Windows.Show(obj); } //逻辑入口 function Proc(obj) { LenheartNewUI_Windows.SyncPos(X, Y); } //鼠标位置Flag MousePosFlag = 0; //override function OnMouseProc(Flag, MousePos_X, MousePos_Y) { //调用原生方法 LenheartNewUI_Windows.OnMouseProc(Flag, MousePos_X, MousePos_Y); MousePos_X -= X; MousePos_Y -= Y; //鼠标在栏目窗口内 if (MousePos_X >= 8 && MousePos_Y >= 95 && MousePos_X <= 110 && MousePos_Y <= 375) { MousePosFlag = 1; } //鼠标在宝珠窗口内 else if (MousePos_X > 95 && MousePos_Y >= 95 && MousePos_X <= 348 && MousePos_Y <= 375) { MousePosFlag = 2; } else MousePosFlag = 0; } //override //鼠标滚轮事件回调 function OnMouseWheel(Flag, MousePos_X, MousePos_Y) { MousePos_X -= X; MousePos_Y -= Y; //左侧栏目的滚动逻辑 if (MousePosFlag == 1) { if (Flag) { if (ScrollPos > 0) ScrollPos -= 1; } if (!Flag) { if (ScrollPos<(Info.len() - 4)) ScrollPos += 1; } } //左侧栏目的滚动逻辑 if (MousePosFlag == 2) { if (Flag) { if (PageScrollPos< 0) PageScrollPos += 47; } if (!Flag) { if (PageScrollPos > (0 - Info[Page].gl)) PageScrollPos -= 47; } } //调用原生方法 LenheartNewUI_Windows.OnMouseWheel(Flag, MousePos_X, MousePos_Y); } //override //鼠标左键弹起回调 function OnMouseLbUp(MousePos_X, MousePos_Y) { //调用原生方法 LenheartNewUI_Windows.OnMouseLbUp(MousePos_X, MousePos_Y); if (HoverItem) { local RealOp = 20077005; if (HoverItem.isTure) RealOp = 20077009; local T = { op = RealOp, boxId = Info[Page].id, itemId = HoverItem.id } SendPackEx(T); } } function OpenCallBack() { GetCollectInfo(); this.Visible = true; ResetFocus(); } } getroottable().rawdelete("CollectionBox_Obj"); function Lenheart_CollectionBox_Fun(obj) { local RootTab = getroottable(); if (!RootTab.rawin("CollectionBox_Obj")) { RootTab.rawset("CollectionBox_Obj", true); local Winobj = LenheartNewUI_CreateWindow(CollectionBoxC, "收集箱窗口", ((getroottable().Rindro_Scr_Width - 376) / 2).tointeger(), 64, 376, 384, 28); EventList_Obj.AddEvent("收集箱", 73, Winobj, "interface2/hud/information_button/information_button_cn.img"); } } getroottable()["LenheartFuncTab"].rawset("CollectionBoxFuncN", Lenheart_CollectionBox_Fun);