224 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			224 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| /*
 | |
| 文件名:Equipment.nut
 | |
| 路径:User/Asset/Item/Equipment.nut
 | |
| 创建日期:2024-12-12	19:03
 | |
| 文件用途:
 | |
| */
 | |
| //装备信息窗口
 | |
| class GameItem.EquipmentInfo extends Yosin_Window {
 | |
| 
 | |
|     //装备
 | |
|     Equipment = null;
 | |
|     //画布
 | |
|     Canvas = null;
 | |
|     //稀有度边框颜色对应Idx表
 | |
|     RarityColorIdx = [
 | |
|         0, //白装 普通
 | |
|         1, //蓝装 高级
 | |
|         2, //紫装 稀有
 | |
|         4, //粉装 神器
 | |
|         6, //金装 史诗
 | |
|         3, //红装 勇者
 | |
|         5, //橙装 传说
 | |
|     ];
 | |
|     //品级对应的文件显示
 | |
|     PercentageText = ["最下级", "下级", "中级", "上级", "最上级"];
 | |
|     // 定义每个品级对应的数值范围边界
 | |
|     PercentageRangeBoundaries = [20, 40, 60, 80];
 | |
| 
 | |
|     constructor(Equipment) {
 | |
|         this.Equipment = Equipment.weakref();
 | |
|         base.constructor(clock() + "EquipmentInfo" + Equipment.Idx, 0, 0, 0, 0, 0);
 | |
| 
 | |
|         local background = Yosin_NineBoxStretch(0, 0, 210, 600, "sprite/interface/lenheartwindowcommon.img", 213);
 | |
|         AddUIChild(background);
 | |
|         //210
 | |
|         Init();
 | |
|     }
 | |
| 
 | |
|     function Init() {
 | |
|         Canvas = CL_CanvasObject();
 | |
|         Canvas.ResizeAndClear(210, 600);
 | |
|         Canvas.SetFillBrush(sq_RGBA(38, 38, 38, 250));
 | |
|         Canvas.SetStrokeBrush(sq_RGBA(38, 38, 38, 250));
 | |
|         Canvas.BeginDraw();
 | |
| 
 | |
|         //构造图标 及图标边框
 | |
|         if (Equipment.Icon) {
 | |
|             local Icon = CL_SpriteFrameObject(Equipment.Icon.path, Equipment.Icon.index);
 | |
|             Canvas.DrawSpriteFrame(Icon, 7, 7);
 | |
| 
 | |
|             local IconFrame = CL_SpriteFrameObject("sprite/item/iconmark.img", 62 + RarityColorIdx[Equipment.Rarity]);
 | |
|             Canvas.DrawSpriteFrame(IconFrame, 7, 7);
 | |
|         }
 | |
| 
 | |
|         //绘制装备名称
 | |
|         if (Equipment.Name.len() > 0) {
 | |
|             local EquName = FontAssetManager.GenerateNormal(Equipment.Name, true, {
 | |
|                 color = sq_RGBA(255, 0, 255, 255)
 | |
|             });
 | |
|             Canvas.DrawActor(EquName, 41, 7);
 | |
|         }
 | |
| 
 | |
|         //绘制分割线
 | |
|         Canvas.DrawLine(3, 37, 207, 38);
 | |
| 
 | |
|         //绘制品级 //TODO 现在默认100
 | |
|         local Percentage = 100;
 | |
|         local PercentageGradeText = FontAssetManager.GenerateNormal(GetPercentageText(Percentage), true, {
 | |
|             color = sq_RGBA(255, 240, 0, 255)
 | |
|         });
 | |
|         local PercentageText = FontAssetManager.GenerateNormal(format("(%d%%)", Percentage), true, {
 | |
|             color = sq_RGBA(161, 131, 74, 255)
 | |
|         });
 | |
|         Canvas.DrawActor(PercentageGradeText, 6, 41);
 | |
|         Canvas.DrawActor(PercentageText, 52, 41);
 | |
| 
 | |
| 
 | |
|         Canvas.EndDraw();
 | |
|         Addchild(Canvas);
 | |
|     }
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
|     // 根据数值获取对应的品级文字
 | |
|     function GetPercentageText(num) {
 | |
|         if (num< PercentageRangeBoundaries[0]) {
 | |
|             return PercentageText[0];
 | |
|         }
 | |
|         for (local i = 0; i< PercentageRangeBoundaries.len(); i++) {
 | |
|             if (num <= PercentageRangeBoundaries[i]) {
 | |
|                 return PercentageText[i + 1];
 | |
|             }
 | |
|         }
 | |
|         return PercentageText.top();
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| if (!getroottable().rawin("chongzaiflag")) {
 | |
|     getroottable()["chongzaiflag"] <- true;
 | |
| } else {
 | |
|     //遍历窗口队列 如果可见则调用Show
 | |
|     for (local i = 0; i< _SYS_WINDOW_LIST_.len(); i++) {
 | |
|         local Window = _SYS_WINDOW_LIST_[i];
 | |
|         Window.Visible = false;
 | |
|         Window.RemoveSelf();
 | |
|     }
 | |
|     TestStage();
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| class GameItem.Equipment extends GameItem.Item {
 | |
|     //装备ID
 | |
|     Idx = -1;
 | |
|     //装备名称
 | |
|     Name = "";
 | |
|     //装备类型
 | |
|     Type = -1;
 | |
|     //装备槽位
 | |
|     SlotType = -1;
 | |
|     //装备可穿戴等级
 | |
|     Minimum_level = -1;
 | |
|     //装备等级组
 | |
|     Grade = null;
 | |
|     //装备稀有度
 | |
|     Rarity = 0;
 | |
|     //装备可穿戴职业
 | |
|     Job = 0;
 | |
|     //装备图标
 | |
|     Icon = null;
 | |
|     //动画
 | |
|     Animation_Job = null;
 | |
|     //装备描述
 | |
|     Description = "";
 | |
|     //文件路径
 | |
|     DirPath = null;
 | |
|     //光环特效
 | |
|     Aurora_effects = null;
 | |
| 
 | |
|     //装备属性
 | |
|     Property = null;
 | |
| 
 | |
|     constructor(...) {
 | |
|         //直接裸构造
 | |
|         if (vargv.len() == 0) {
 | |
| 
 | |
|         }
 | |
|         //通过参数构造
 | |
|         else if (vargv.len() == 1) {
 | |
|             //通过ID构造
 | |
|             if (typeof vargv[0] == "integer") {
 | |
|                 local EquInfo = AssetManager.GetEquipment(vargv[0]);
 | |
|                 if (EquInfo) {
 | |
|                     Idx = vargv[0];
 | |
|                     //名称
 | |
|                     if (EquInfo.rawin("name")) Name = EquInfo["name"];
 | |
|                     //类型
 | |
|                     if (EquInfo.rawin("type")) GetRealEquipmentType(EquInfo["type"].path);
 | |
|                     //最低使用等级
 | |
|                     if (EquInfo.rawin("minimum level")) Minimum_level = EquInfo["minimum level"];
 | |
|                     //等级组
 | |
|                     if (EquInfo.rawin("grade")) Grade = EquInfo["grade"];
 | |
|                     //稀有度
 | |
|                     if (EquInfo.rawin("rarity")) Rarity = EquInfo["rarity"];
 | |
|                     //职业
 | |
|                     if (EquInfo.rawin("usable_job")) Job = EquInfo["usable_job"];
 | |
|                     //图标
 | |
|                     if (EquInfo.rawin("icon")) Icon = EquInfo["icon"];
 | |
|                     if (EquInfo.rawin("Ani")) Animation_Job = EquInfo["Ani"];
 | |
|                     if (EquInfo.rawin("DirPath")) DirPath = EquInfo["DirPath"];
 | |
|                     if (EquInfo.rawin("aurora_effects")) Aurora_effects = EquInfo["aurora_effects"];
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     //设置真实装备类型
 | |
|     function SetRealEquipmentType(AType, BType) {
 | |
|         SlotType = AType;
 | |
|         Type = BType;
 | |
|     }
 | |
|     //获取真实装备类型
 | |
|     function GetRealEquipmentType(EType) {
 | |
|         if (EType == "skin avatar") SetRealEquipmentType("skin", "avatar");
 | |
|         else if (EType == "weapon") SetRealEquipmentType("weapon", "equipment");
 | |
|         else if (EType == "hat avatar") SetRealEquipmentType("hat", "avatar");
 | |
|         else if (EType == "hair avatar") SetRealEquipmentType("hair", "avatar");
 | |
|         else if (EType == "coat avatar") SetRealEquipmentType("coat", "avatar");
 | |
|         else if (EType == "pants avatar") SetRealEquipmentType("pants", "avatar");
 | |
|         else if (EType == "waist avatar") SetRealEquipmentType("waist", "avatar");
 | |
|         else if (EType == "shoes avatar") SetRealEquipmentType("shoes", "avatar");
 | |
|         else if (EType == "breast avatar") SetRealEquipmentType("breast", "avatar");
 | |
|         else if (EType == "face avatar") SetRealEquipmentType("face", "avatar");
 | |
|         else if (EType == "aurora avatar") SetRealEquipmentType("aurora", "aurora");
 | |
|     }
 | |
| 
 | |
|     //获取装备信息窗口
 | |
|     function GetEquipmentInfoWindow() {
 | |
|         if (Property) {
 | |
| 
 | |
|         } else {
 | |
|             return GameItem.EquipmentInfo(this);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     //穿戴装备回调
 | |
|     function OnWearStart() {
 | |
| 
 | |
|     }
 | |
| 
 | |
|     //穿戴时
 | |
|     function OnWearProc(Dt) {
 | |
| 
 | |
|     }
 | |
| 
 | |
|     //卸载时
 | |
|     function OnWearEnd() {
 | |
| 
 | |
|     }
 | |
| 
 | |
| 
 | |
| } |