/* 文件名:Lenheart_Event_Class.nut 路径:Base/UI/Lenheart_Event_Class.nut 创建日期:2024-08-11 09:47 文件用途:活动图标 */ class LenheartNewUI_EventButton extends LenheartNewUI_CommonUi { State = 0; BaseIdx = 29; DWidth = null; Path = null; Idx = null; BindObj = null; Timer = 0; EffFlag = true; ShowName = null; constructor(X, Y, Path, Idx) { this.DWidth = 20; this.Path = Path; this.Idx = Idx; LenheartNewUI_CommonUi.constructor(X, Y, 20, 20); Timer = Clock(); } function SetFrame(gPath, gIdx) { if (gPath) Path = gPath; Idx = gIdx; } function Show(obj) { T_DrawDynamicAni(obj, "common/yosinevent/eventsystemeff.ani", X, Y, "EventIcon" + ObjectId); //不可用 if (State == 8) { L_sq_DrawImg(Path, Idx + 3, X, Y + 1); } else { //按下 if (isLBDown) { L_sq_DrawImg(Path, Idx + 1, X, Y); } //悬停 else if (isInRect) { L_sq_DrawImg(Path, Idx, X, Y); } //普通 else { L_sq_DrawImg(Path, Idx, X, Y); } } } //鼠标左键按下回调 function OnMouseLbDown(MousePos_X, MousePos_Y) { if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X, Y, Width, Height)) isLBDown = true; } //鼠标左键弹起回调 overr function OnMouseLbUp(MousePos_X, MousePos_Y) { if (isLBDown && OnClick) { local obj = sq_getMyCharacter(); obj.sq_PlaySound("CLICK_BUTTON1"); OnClick(this); } isLBDown = false; } } class Rindro_Event extends LenheartNewUI_Windows { //调试模式 // DeBugMode = true; EventFlag = true; //不是窗口 NoWindow = true; //显示标志位 PosIdx = null; //闪烁透明度 Alpha = 250; //闪烁模式 BlinkMode = false; //时间 Timer = 0; //是否可见 Visible = true; //主要Button MainButton = null; constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) { Childrens = []; LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH); Timer = Clock(); } //绘制主界面 function DrawMain(obj) { local RT = Clock() - Timer; //根据模式调整透明度 if (!BlinkMode) Alpha = sq_GetUniformVelocity(250, 130, RT, 500); else Alpha = sq_GetUniformVelocity(130, 250, RT, 500); //转换模式 if (RT >= 500) { Timer = Clock(); BlinkMode = !BlinkMode; } L_sq_SetDrawImgModel(2, 0); L_sq_DrawImg("interface2/yosin/eventsystemeff.img", 0, X, Y, 1, sq_RGBA(255, 255, 255, Alpha), 1.0, 1.0); L_sq_ReleaseDrawImgModel(); } function Show(obj) { // DrawMain(obj); // LenheartNewUI_Windows.Show(obj); } function EventShow(obj) { DrawMain(obj); LenheartNewUI_Windows.Show(obj); } function TopShow(obj) { if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, 20, 20)) { local XposOffset = 0; local Len = LenheartTextClass.GetStringLength(MainButton.ShowName); local Count = ((Len - 10) / 15) + 1; XposOffset = (-(10 + Count * 15) / 2) + 10; L_sq_DrawImg("interface2/yosin/eventsystem.img", 0, X + XposOffset, Y - 24); for (local i = 0; i< Count; i++) { L_sq_DrawImg("interface2/yosin/eventsystem.img", 1, X + XposOffset + 5 + (15 * i), Y - 24); } L_sq_DrawImg("interface2/yosin/eventsystem.img", 2, X + XposOffset + 5 + (15 * Count), Y - 24); L_sq_DrawCode(MainButton.ShowName, X - Len / 2 + 12, Y - 17, sq_RGBA(255, 255, 255, 250), 0, 1); } } function SyncEventIcon() { local Count = L_sq_RA(L_sq_RA(0x1A39C2C) + 0x6c); X = EventList_Obj.X + (((Count + PosIdx) % 8) * 20); Y = EventList_Obj.Y - ((Count + PosIdx) / 8) * 20; } //逻辑入口 function Proc(obj) { //同步图标位置 SyncEventIcon(); LenheartNewUI_Windows.SyncPos(X, Y); } } class Rindro_EventList { X = 0; Y = 0; //活动数组 Events = null; EventsMap = null; function YosinEventIconInfoCallBack(Chunk) { local Jso = Json.Decode(Chunk); X = Jso.YosinEventIconInfoXpos; Y = Jso.YosinEventIconInfoYpos; getroottable()["LenheartEventOffset"] <- { x = X - 456, y = Y }; L_sq_RefreshEventIcon(); } constructor() { Events = []; EventsMap = {}; Pack_Control.rawset(30002, YosinEventIconInfoCallBack.bindenv(this)); } //添加活动 function AddEvent(Name, Idx, WindowObject, ...) { if (EventsMap.rawin(Name)) return EventsMap.rawget(Name); local Window = LenheartNewUI_CreateWindow(Rindro_Event, Name, 0, 0, 20, 20, 0) local Flag = Events.len(); local ImgPath = "interface2/yosin/eventsystemlist.img"; if (vargc == 1) ImgPath = vargv[0]; local ButtonBuf = LenheartNewUI_EventButton(0, 0, ImgPath, Idx); ButtonBuf.BindObj = WindowObject; ButtonBuf.ShowName = Name; ButtonBuf.OnClick = function(B_obj) { if (B_obj.BindObj) B_obj.BindObj.OpenCallBack(); }.bindenv(this); Window.AddChild(ButtonBuf); Window.PosIdx = Events.len(); Window.MainButton = ButtonBuf; Events.append(Window); EventsMap.rawset(Name, Window); return Window; } //检测是否悬停活动图标 function CheckInEvent(MousePos_X, MousePos_Y) { if (sq_GetPopupWindowMainCotrol(244)) return; foreach(Window in Events) { if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, Window.X, Window.Y, Window.Width, Window.Height)) { getroottable().WindowsShowABFlag <- true; } } } } getroottable().rawdelete("EventList_Obj") function Lenheart_EventList_Fun(obj) { local RootTab = getroottable(); if (!RootTab.rawin("EventList_Obj")) { RootTab.rawset("EventList_Obj", Rindro_EventList()); } } //获取活动图标坐标 在活动图标变动时会被调用 function Sq_Get_Event_Pos_X() { if (getroottable().rawin("LenheartEventOffset")) { return getroottable()["LenheartEventOffset"].x; } else { getroottable()["LenheartEventOffset"] <- { x = 277, y = 530 }; return getroottable()["LenheartEventOffset"].x; } } function Sq_Get_Event_Pos_Y() { if (getroottable().rawin("LenheartEventOffset")) { return getroottable()["LenheartEventOffset"].y; } else { getroottable()["LenheartEventOffset"] <- { x = 277, y = 530 }; return getroottable()["LenheartEventOffset"].y; } } /* //活动图标类 class Rindro_EventIcon extends LenheartNewUI_CommonUi { //Key Key = null; //活动图标文字 EventStr = null; //活动图标Ani编号 EventFrame = null; //绑定对象 BandObject = null; //图标img路径 ImgPath = "interface2/yosin/eventsystemlist.img"; x = null; y = null; constructor(gEventStr, gEventFrame, gKey, gBandObject) { this.EventStr = gEventStr; this.EventFrame = gEventFrame; this.Key = gKey; this.BandObject = gBandObject; local RootTab = getroottable(); if (RootTab.rawin("YosinEventSystem")) { local Arr = RootTab["YosinEventSystem"]; local TryAppend = true; local wpos; foreach(pos, value in Arr) { if (value.Key == this.Key) { TryAppend = false; wpos = pos; } } if (TryAppend) { Arr.append(this); RootTab.rawset("YosinEventSystem", Arr); } else { Arr[wpos] = this; RootTab.rawset("YosinEventSystem", Arr); } } else { local Arr = []; Arr.append(this); RootTab.rawset("YosinEventSystem", Arr); } } function Show(obj, X, Y) { x = X; y = Y; //绘制框 T_DrawDynamicAni(obj, "common/yosinevent/eventsystemeff.ani", X, Y, "YosinEventIconEffA"); try { if (isLBDown()) { //绘制活动图标 L_sq_DrawImg(ImgPath, EventFrame, X, Y + 1); //T_DrawStayAni(obj, "common/yosinevent/eventsystemlist.ani", X, Y + 1, EventFrame, "YosinEventIconKey" + Key); } else { //绘制活动图标 L_sq_DrawImg(ImgPath, EventFrame, X, Y); } } catch (exception) { if (isLBDown()) { //绘制活动图标 T_DrawStayAni(obj, "common/yosinevent/eventsystemlist.ani", X, Y + 1, EventFrame, "YosinEventIconKey" + Key); } else { //绘制活动图标 T_DrawStayAni(obj, "common/yosinevent/eventsystemlist.ani", X, Y, EventFrame, "YosinEventIconKey" + Key); } } } function StrShow(obj, X, Y) { //悬停 if (isInRect() && EventStr) { local count = EventStr.len() / 3; T_DrawStayAni(obj, "common/yosinevent/eventsystem.ani", X - (count * 7), Y - 24, 0, "YosinEventIconStrEffL"); for (local i = 0; i< count; i++) { T_DrawStayAni(obj, "common/yosinevent/eventsystem.ani", X - (count * 7) + 5 + (i * 15), Y - 24, 1, "YosinEventIconStrEffZ"); } T_DrawStayAni(obj, "common/yosinevent/eventsystem.ani", X - (count * 7) + 5 + (count * 15), Y - 24, 2, "YosinEventIconStrEffR"); L_sq_DrawCode(EventStr, X - (count * 4), Y - 17, sq_RGBA(255, 255, 255, 250), 0, 1); } if (isLBActive()) { BandObject.MainState = true; BandObject.OpenClassCallBack(); } } //悬停状态 function isInRect() { if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, x, y, 20, 20)) return true; else return false; } //左键按下状态 function isLBDown() { if (isInRect() && Mobj.Lb == 1) return true; else return false; } //左键弹起状态 function isLBUp() { if (isInRect() && Mobj.Lb == 0) return true; else return false; } //左键单击状态 function isLBActive() { if (isInRect() && Mobj.LbEvent) return true; else return false; } } */