359 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			359 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| /*
 | |
| 文件名: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;
 | |
| 
 | |
|     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)) {
 | |
|             L_sq_DrawImg("interface2/yosin/eventsystem.img", 0, X - 7, Y - 24);
 | |
|             local Len = ObjectId.len() / 3;
 | |
|             for (local i = 0; i< Len; i++) {
 | |
|                 L_sq_DrawImg("interface2/yosin/eventsystem.img", 1, X - 2 + (15 * i), Y - 24);
 | |
|             }
 | |
|             L_sq_DrawImg("interface2/yosin/eventsystem.img", 2, X - 2 + (15 * Len - 1), Y - 24);
 | |
|             L_sq_DrawCode(ObjectId, X + 5, 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;
 | |
| 
 | |
|     function YosinEventIconInfoCallBack(Chunk) {
 | |
|         local Jso = Json.Decode(Chunk);
 | |
|         X = Jso.YosinEventIconInfoXpos;
 | |
|         Y = Jso.YosinEventIconInfoYpos;
 | |
| 
 | |
|         getroottable()["LenheartEventOffset"] <- {
 | |
|             x = X - 456,
 | |
|             y = Y
 | |
|         };
 | |
|     }
 | |
| 
 | |
|     constructor() {
 | |
| 
 | |
|         Events = [];
 | |
|         Pack_Control.rawset(30002, YosinEventIconInfoCallBack.bindenv(this));
 | |
| 
 | |
|     }
 | |
| 
 | |
|     //添加活动
 | |
|     function AddEvent(Name, Idx, WindowObject, ...) {
 | |
|         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();
 | |
|         Events.append(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;
 | |
|     }
 | |
| }
 | |
| */ |