134 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			134 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| /*
 | |
| 文件名:DamagePerSecond.nut
 | |
| 路径:Project/DamagePerSecond/DamagePerSecond.nut
 | |
| 创建日期:2024-08-31	10:32
 | |
| 文件用途:秒伤统计
 | |
| */
 | |
| 
 | |
| class DamagePerSecondC extends LenheartNewUI_Windows {
 | |
|     //调试模式
 | |
|     // DeBugMode = true;
 | |
| 
 | |
|     //不是窗口
 | |
|     NoWindow = true;
 | |
| 
 | |
|     //是否可见
 | |
|     // Visible = false;
 | |
| 
 | |
|     //伤害统计集合
 | |
|     DamagePerSecondList = null;
 | |
| 
 | |
|     //总伤害统计
 | |
|     TotalDamage = longlong(0);
 | |
| 
 | |
|     function Sq_PushDamageData(ObjAddress, MySelfAddress, Value) {
 | |
|         local Object = null;
 | |
|         //我自己的伤害
 | |
|         if (ObjAddress == 0 || ObjAddress == MySelfAddress) {
 | |
|             Object = MySelfAddress;
 | |
|         } else {
 | |
|             //先判断是否是角色
 | |
|             if (L_Sq_GetObjectIsCharacter(ObjAddress)) {
 | |
|                 Object = ObjAddress;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         if (Object) {
 | |
|             if (DamagePerSecondList.rawin(Object)) {
 | |
|                 //如果存在就相加
 | |
|                 DamagePerSecondList[Object].Damage = DamagePerSecondList[Object].Damage + longlong(Value);
 | |
|             } else {
 | |
|                 //不存在就创建
 | |
|                 DamagePerSecondList.rawset(Object, {
 | |
|                     Damage = longlong(Value),
 | |
|                     Name = L_Sq_GetObjectNameByAddress(Object)
 | |
|                 });
 | |
|             }
 | |
|             TotalDamage += longlong(Value);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
 | |
|         Childrens = [];
 | |
|         DamagePerSecondList = {};
 | |
| 
 | |
|         //注册控件
 | |
|         RegisterWidget();
 | |
| 
 | |
|         LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
 | |
|         PushDamageFontFuncTab.rawset("DamagePerSecondCFunc", Sq_PushDamageData.bindenv(this));
 | |
|     }
 | |
| 
 | |
|     function RegisterWidget() {
 | |
|         // //关闭按钮
 | |
|         // local CloseButton = LenheartNewUI_BaseButton(278, 0, 11, 12, "interface/lenheartwindowcommon.img", 276);
 | |
|         // CloseButton.OnClick = function() {
 | |
|         //     this.Visible = false;
 | |
|         // }.bindenv(this);
 | |
|         // Childrens.append(CloseButton);
 | |
| 
 | |
|     }
 | |
| 
 | |
|     function DrawDamageBar(Pos, DamageObj) {
 | |
|         local Rate = DamageObj.Damage / TotalDamage;
 | |
|         local DamageStr = DamageObj.Damage.GetFormat("%0.2f");
 | |
|         local ShowStr = DamageStr + ", " + format("%.2f", Rate.tofloat() * 100) + "%";
 | |
| 
 | |
|         //绘制底
 | |
|         L_sq_DrawImg("hud/dps.img", 3, X + 8, Y + 20 + (Pos * 22));
 | |
| 
 | |
|         setClip(X + 8, Y + 20 + (Pos * 22), X + 8 + (160.0 * Rate.tofloat()).tointeger(), Y + 20 + (Pos * 22) + 18);
 | |
|         L_sq_DrawImg("hud/dps.img", 4 + (Pos % 4), X + 8, Y + 20 + (Pos * 22));
 | |
|         releaseClip(); //裁切结束
 | |
| 
 | |
|         L_sq_DrawCode(DamageObj.Name, X + 12, Y + 23 + (Pos * 22), sq_RGBA(230, 200, 155, 255), 0, 1);
 | |
|         L_sq_DrawCode(ShowStr, X + 168 - LenheartTextClass.GetStringLength(ShowStr), Y + 23 + (Pos * 22), sq_RGBA(230, 200, 155, 255), 0, 1);
 | |
|     }
 | |
| 
 | |
|     //绘制主界面
 | |
|     function DrawMain(obj) {
 | |
|         if (DamagePerSecondList.len() == 0) return;
 | |
|         L_sq_DrawImg("hud/dps.img", 0, X, Y);
 | |
|         for (local i = 0; i<(DamagePerSecondList.len() - 1); i++) {
 | |
|             L_sq_DrawImg("hud/dps.img", 2, X, Y + 41 + (22 * i));
 | |
|         }
 | |
|         L_sq_DrawImg("hud/dps.img", 1, X, Y + 41 + (22 * (DamagePerSecondList.len() - 1)));
 | |
| 
 | |
|         local i = 0;
 | |
|         foreach(Object, DamageObj in DamagePerSecondList) {
 | |
|             DrawDamageBar(i, DamageObj);
 | |
|             i++;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     function Show(obj) {
 | |
|         DrawMain(obj);
 | |
|         LenheartNewUI_Windows.Show(obj);
 | |
| 
 | |
|     }
 | |
| 
 | |
|     //逻辑入口
 | |
|     function Proc(obj) {
 | |
|         LenheartNewUI_Windows.SyncPos(X, Y);
 | |
| 
 | |
|         Height = 41 + (22 * (DamagePerSecondList.len() - 1)) + 7;
 | |
|         TitleH = Height;
 | |
| 
 | |
|         if (sq_GetCurrentModuleType() == 1 || sq_GetCurrentModuleType() == 2) {
 | |
|             DamagePerSecondList = {};
 | |
|             TotalDamage = longlong(0);
 | |
|         }
 | |
|     }
 | |
| 
 | |
| }
 | |
| getroottable().rawdelete("DamagePerSecond_Obj");
 | |
| 
 | |
| function Lenheart_DamagePerSecond_Fun(obj) {
 | |
|     local RootTab = getroottable();
 | |
|     if (!RootTab.rawin("DamagePerSecond_Obj")) {
 | |
|         RootTab.rawset("DamagePerSecond_Obj", true);
 | |
|         LenheartNewUI_CreateWindow(DamagePerSecondC, "秒伤统计窗口", 0, 160, 178, 150, 28);
 | |
|     }
 | |
| }
 | |
| 
 | |
| getroottable()["LenheartFuncTab"].rawset("DamagePerSecondFuncN", Lenheart_DamagePerSecond_Fun); |