/* 文件名:4_PersonalInfo.nut 路径:User/UI/Window/4_PersonalInfo.nut 创建日期:2024-12-26 00:32 文件用途: 个人信息 */ // local infoWindow = Sq_CreateWindow(_PersonalInfo, "个人信息窗口", 250, 60, 286, 530, 20); // todo 图和尺寸比例都需要修改 // todo Yosin_Window 和 Yosin_CommonUi 会有性能开销需要检查 class _PersonalInfo extends Yosin_Window { constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) { base.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH); local title = Yosin_TopTitle(gWidth, gHeight, "个人信息(M)"); AddUIChild(title); //注册控件 RegisterWidget(); } function RegisterWidget() { // 标题按钮 local titlesBtn = Yosin_RowMoreTitleBtn(10, 25, ["角色", "装扮/宠物", "护石"],"sprite/interface/lenheartwindowcommon.img", 160); AddUIChild(titlesBtn); titlesBtn.LBDownOnClick = function(btns, index) { }; // 角色信息 local roleInfo = roleInfo("个人角色信息", 10, titlesBtn.bottom() + 2 ); AddUIChild(roleInfo); } //逻辑入口 function Proc(Dt) { SyncPos(X, Y); base.Proc(Dt); } } // 角色信息 class roleInfo extends Yosin_Window { //是否为独立窗口 IsIndependent = false; brown = sq_RGBA(160, 132, 75, 255); green = sq_RGBA(74, 161, 87, 255); btn = null; constructor(gObjectId, gX, gY) { base.constructor(gObjectId, gX, gY, 266, 355, 0); //注册控件 RegisterWidget(); } function RegisterWidget() { // 背景 local backGround = CL_SpriteObject("sprite/interface2/profile/profile.img", 60); Addchild(backGround); // 装备 RegisterEquipment(); // 名称 等级 其他 RegisterNameAndOther(); // 属性 RegisterPropertyItems(); // 底部四个按钮 RegisterBottomButton(); } // 装备 function RegisterEquipment() { // 装备背景 local equipmentBackground = CL_SpriteObject("sprite/interface2/profile/profile.img", 14); equipmentBackground.SetPosition(7.5, 8); Addchild(equipmentBackground); // 结婚戒指槽位 local centerBackground = CL_SpriteObject("sprite/interface2/profile/profile.img", 77); centerBackground.SetPosition( 124 , 10); Addchild(centerBackground); } // 名称 等级 其他 function RegisterNameAndOther() { // 冒险家名望 local adventurerFame = CL_SpriteObject("sprite/interface2/profile/profile_icon.img", 53); adventurerFame.SetPosition(70, 185); Addchild(adventurerFame); local adventurerFameText = FontAssetManager.GenerateNormal("冒险家名望", true, { color = brown }); adventurerFameText.SetPosition(adventurerFame.right() + 5, adventurerFame.Y); Addchild(adventurerFameText); // 冒险家名望数值 local adventurerFameNum = FontAssetManager.GenerateNormal("7", true, { color = green }); adventurerFameNum.SetPosition(adventurerFameText.right() + 5, adventurerFameText.Y); Addchild(adventurerFameNum); } // 属性 function RegisterPropertyItems() { // 属性 // 生命 local life = roleInfoPropertyItem(0, 213, 0, "生命", "100"); Addchild(life); // 魔法 local magic = roleInfoPropertyItem(life.right() + 16, life.Y, 1, "魔法", "100"); Addchild(magic); // 物理防御力 local physicalDefense = roleInfoPropertyItem(life.X, life.bottom(), 8, "物理防御力", "100", false); Addchild(physicalDefense); // 魔法防御力 local magicDefense = roleInfoPropertyItem(physicalDefense.right() + 16, physicalDefense.Y, 9, "魔法防御力", "100"); Addchild(magicDefense); // 力量 local strength = roleInfoPropertyItem(life.X, physicalDefense.bottom(), 2, "力量", "100"); Addchild(strength); // 智力 local intelligence = roleInfoPropertyItem(strength.right() + 16, strength.Y, 3, "智力", "100"); Addchild(intelligence); // 体力 local vitality = roleInfoPropertyItem(strength.X, strength.bottom(), 4, "体力", "100"); Addchild(vitality); // 精神 local spirit = roleInfoPropertyItem(vitality.right() + 16, vitality.Y, 5, "精神", "100"); Addchild(spirit); // 物理攻击力 local physicalATK = roleInfoPropertyItem(life.X, spirit.bottom(), 6, "物理攻击力", "100"); Addchild(physicalATK); // 魔法攻击力 local magicATK = roleInfoPropertyItem(physicalATK.right() + 16, physicalATK.Y, 7, "魔法攻击力", "100"); Addchild(magicATK); // 物理暴击 local physicalCrit = roleInfoPropertyItem(life.X, magicATK.bottom(), 10, "物理暴击", "100"); Addchild(physicalCrit); // 魔法暴击 local magicCrit = roleInfoPropertyItem(physicalCrit.right() + 16, physicalCrit.Y, 11, "魔法暴击", "100"); Addchild(magicCrit); // 独立攻击 local independentAttack = roleInfoPropertyItem(life.X, magicCrit.bottom(), 12, "独立攻击", "100"); Addchild(independentAttack); // 攻击速度 local attackSpeed = roleInfoPropertyItem(life.X, independentAttack.bottom(), 13, "攻击速度", "100"); Addchild(attackSpeed); // 释放速度 local releaseSpeed = roleInfoPropertyItem(attackSpeed.right() + 16, attackSpeed.Y, 14, "释放速度", "100"); Addchild(releaseSpeed); // 移动速度 local moveSpeed = roleInfoPropertyItem(life.X, releaseSpeed.bottom(), 15, "移动速度", "100"); Addchild(moveSpeed); // 攻击属性 local attackProperty = roleInfoPropertyItem(life.X, moveSpeed.bottom(), 16, "攻击属性", "火(0)/冰(0)/光(0)/暗(0)", true, 260); Addchild(attackProperty); } // 底部四个按钮 function RegisterBottomButton() { // 副职业 local subJob = otherButton(0, 401, 62, "副职业", false); AddUIChild(subJob); subJob.OnClick = function (btn) { //todo 打开副职业面板 print(11111); }.bindenv(this); local separation = CL_SpriteObject("sprite/interface2/profile/profile.img", 70 ); separation.SetPosition(subJob.right(), subJob.Y + 7.5); Addchild(separation); // 战斗分析 local battleAnalysis = otherButton(subJob.right() + 1, subJob.Y, 64, "战斗分析"); AddUIChild(battleAnalysis); battleAnalysis.OnClick = function (btn) { //todo 打开面板 print(11111); }.bindenv(this); local separationOne = CL_SpriteObject("sprite/interface2/profile/profile.img", 70 ); separationOne.SetPosition(battleAnalysis.right(), battleAnalysis.Y + 7.5); Addchild(separationOne); // 决斗信息 // 根据决斗场等级 显示 sprite/interface2/pvp02/pvprank_icon/tier_icon.img 24 local duelInfo = otherButton(battleAnalysis.right() + 1, battleAnalysis.Y, 14, "决斗信息", true); AddUIChild(duelInfo); duelInfo.OnClick = function (btn) { //todo 打开面板 print(11111); }.bindenv(this); local separationTwo = CL_SpriteObject("sprite/interface2/profile/profile.img", 70 ); separationTwo.SetPosition(duelInfo.right(), duelInfo.Y + 7.5); Addchild(separationTwo); // 详细信息 local detailedInformation = otherButton(duelInfo.right() + 1, duelInfo.Y, 66, "详细信息"); AddUIChild(detailedInformation); detailedInformation.OnClick = function (btn) { //todo 打开面板 print(11111); }.bindenv(this); } //逻辑入口 function Proc(Dt) { SyncPos(X, Y); base.Proc(Dt); } } // 属性项 class roleInfoPropertyItem extends Yosin_CommonUi { // additionReaction 属性是否有加成 加成为绿色 不加成灰色 constructor(gX, gY, idx, title, numText, additionReaction = true, width = 120) { base.constructor(gX, gY, width, 18); local titlecolor = additionReaction ? sq_RGBA(160, 132, 75, 255) : sq_RGBA(79, 79, 79, 255); local numColor = additionReaction ? sq_RGBA(75, 161, 85, 255) : sq_RGBA(79, 79, 79, 255); local icon = CL_SpriteObject("sprite/interface2/profile/profile_icon.img", idx); icon.SetPosition(5, 0); Addchild(icon); // 属性名称 local property = FontAssetManager.GenerateNormal(title, true, { color = titlecolor }); property.SetPosition(icon.right() + 5, icon.Y); Addchild(property); // 属性数值 local propertyNum = FontAssetManager.GenerateNormal(numText, true, { color = numColor }); local numX = width - propertyNum.GetSize().w; propertyNum.SetPosition( numX, icon.Y); Addchild(propertyNum); } //逻辑入口 function Proc(Dt) { SyncPos(X, Y); base.Proc(Dt); } } // 其他面板按钮 class otherButton extends Yosin_CommonUi { // 是否启用按钮 enabled = true; // pvp 是否是pvp 按钮 constructor(gX, gY, idx, title, pvp = false, enabled = true, ) { base.constructor(gX, gY, 65, 65); this.enabled = enabled; local titlecolor = enabled? sq_RGBA(160, 132, 75, 255) : sq_RGBA(79, 79, 79, 255); // 属性名称 local property = FontAssetManager.GenerateNormal(title, true, { color = titlecolor }); property.SetPosition( 32 - property.GetSize().w / 2 , 45 ); Addchild(property); local path = pvp? "sprite/interface2/profile/profile_pvp_icon.img" : "sprite/interface2/profile/profile.img"; local icon = CL_SpriteObject(path, enabled ? idx : idx +1 ); icon.SetPosition(32 - icon.GetSize().w / 2, 45/2 - icon.GetSize().h / 2 + 3 ); Addchild(icon); } }