import MyModel from "../core/MyModel"; import SKUIUtil from "../gear_2.3.4/util/SKUIUtil"; import FGUtil, { TipAlign } from "../gear_2.3.4/fgui/FGUtil"; import SKSocket from "../gear_2.3.4/net/SKSocket"; import GameModel from "../core/GameModel"; import MsgAlert from "../game/msg/MsgAlert"; import SKDataUtil from "../gear_2.3.4/util/SKDataUtil"; import ItemUtil from "../core/ItemUtil"; import GameUtil from "../core/GameUtil"; import SkillUtil from "../game/skill/core/SkillUtil"; import SkillBase, { ESkillQuality } from "../game/skill/core/SkillBase"; import FGAlert from "../gear_2.3.4/fgui/FGAlert"; import SKLogger from "../gear_2.3.4/util/SKLogger"; import { LongPressSpeedProp } from "../core/EEnum"; import Baby from "./Baby"; export default class DestinyPannel extends cc.Component { static shared = new DestinyPannel(); main: fgui.GComponent; Baby: Baby InUpgrade = false show(baby: Baby) { this.Baby = baby this.loadUI(); this.InUpgrade = false } hide() { FGUtil.dispose(this.main); this.unscheduleAllCallbacks() this.main = null; } loadUI() { FGUtil.dispose(this.main); this.unscheduleAllCallbacks() this.main = fgui.UIPackage.createObject("main_ui", "home_mingpan").asCom; FGUtil.root().addChild(this.main); FGUtil.fitScreen(this.main); this.initUI(); this.initEvent(); this.loadBabySkill(); } initUI() { for (let index = 1; index <= 13; index++) { let ctl = FGUtil.getControl(this.main, "n1/btn" + index + "/icon/ctrl_type") ctl.selectedIndex = index - 1 } FGUtil.getControl(this.main, "n17/n6/ctrl_lv").selectedIndex = 3 FGUtil.getControl(this.main, "n17/n7/ctrl_lv").selectedIndex = 2 FGUtil.getControl(this.main, "n17/n8/ctrl_lv").selectedIndex = 1 let cnt = ItemUtil.getBagItemCount(9651) let text = "[color=#FFFFFF]{cnt=0}[/color][color=#FFFFFF]/1[/color]" if(cnt < 1){ text = "[color=#FF0000]{cnt=0}[/color][color=#FFFFFF]/{need=0}[/color]" } let label = FGUtil.getTextField(this.main, "n17/txt_itemnum") label.ubbEnabled = true label.text = text label.setVar("cnt", cnt.toString()) label.flushVars() for (let index = 0; index < this.Baby.BattleSkillList.length; index++) { let id = this.Baby.BattleSkillList[index]; let skill = this.Baby.GetSkillByID(id) if (skill) { this.onSkillBattle(skill) } } this.onBabyBless() } initEvent() { this.main.getChild("close").onClick(this.hide, this) FGUtil.getButton(this.main, "n17/n10").onClick(this.onUpgrade, this) FGUtil.getButton(this.main, "n17/btnXuYuan").onClick(this.onClickBless, this) FGUtil.getButton(this.main, "n17/n6").onClick(this.skillInfo.bind(this, 3)) FGUtil.getButton(this.main, "n17/n7").onClick(this.skillInfo.bind(this, 2)) FGUtil.getButton(this.main, "n17/n8").onClick(this.skillInfo.bind(this, 1)) FGUtil.getButton(this.main, "n18/n29/btn_level").onClick(this.onClickUpgrade.bind(this)) let ctl = FGUtil.getControl(this.main, "n1/ctrl_select") ctl.selectedIndex = 1 ctl.on(fgui.Event.STATUS_CHANGED, this.onSelectChange, this) } loadBabySkill() { // GameModel.send("c2s_getBabySkillConfig", { roleid: GameModel.player.roleid }); } onUpgrade() { if (this.main == null) return this.InUpgrade = true this.onSelectChange() this.main.getTransition("train").play() FGUtil.getObject(this.main, "n1").asCom.getTransition("t0").play() } onClickUpgrade() { let ctl = FGUtil.getControl(this.main, "n1/ctrl_select") let pos = ctl.selectedIndex let skill = this.Baby.GetSkillByPos(pos) if (skill != null) { GameModel.send("c2s_babySkillUpgrade", { id: this.Baby.ID, skillId: skill.id }); } } onUpgradeSkill(skill) { let need = skill.level * 5 let cnt = ItemUtil.getBagItemCount(9650) let text = "[color=#FFFFFF]{cnt=0}[/color][color=#FFFFFF]/{need=0}[/color]" if(cnt < need){ text = "[color=#FF0000]{cnt=0}[/color][color=#FFFFFF]/{need=0}[/color]" } let label = FGUtil.getTextField(this.main, "n18/n29/txt_itemnum") label.ubbEnabled = true label.text = text label.setVar("cnt", cnt.toString()) label.setVar("need", need.toString()) label.flushVars() let node = FGUtil.getObject(this.main, "n1/btn" + skill.pos).node cc.tween(node).to(0.2, { scale: 1.05 }).to(0.15, { scale: 0.95 }).to(0.1, { scale: 1 }).start() FGUtil.getObject(this.main, "n1/btn" + skill.pos + "/icon/title").asLabel.text = `${skill.level}級` FGUtil.getObject(this.main, "n18/n21").asLabel.text = `${skill.level}級` } onClickBless() { if (this.Baby == null) return GameModel.send("c2s_babySkillBless", { id: this.Baby.ID }); } GetSkillLevelBuff(skill){ let level = skill.level if (level > 100) level = 100 return level * 0.6 / 100 } onSelectChange(ctl?) { ctl = FGUtil.getControl(this.main, "n1/ctrl_select") let pos = ctl.selectedIndex let skill = this.Baby.GetSkillByPos(pos) if (skill == null) { return } if (this.InUpgrade == false) { let desp = fgui.UIPackage.createObject("main_ui", "home_skill_desp").asCom; FGUtil.root().addChild(desp); let ctl = FGUtil.getControl(desp, "skillCom/skill/ctrl_lv") ctl.selectedIndex = 0 let luck = this.GetSkillLevelBuff(skill) if(skill.level >= 100){ luck += this.Baby.GetSkillBuff() } let luckStr = (luck * 100).toFixed(2) let color = SKUIUtil.colorOfString("#FFFFFF"); let text = cc.js.formatStr(skill.desp, luckStr) if (skill.grade == "尋常"){ let hurt = 500 * skill.level if (hurt > 50000){ hurt = 50000 } text = cc.js.formatStr(skill.desp, luckStr, hurt) color = SKUIUtil.colorOfString("#00FFFF"); ctl.selectedIndex = 1 } if(skill.grade == "超凡"){ let defense = 1000 * skill.level if (defense > 100000){ defense = 100000 } text = cc.js.formatStr(skill.desp, luckStr, defense) color = SKUIUtil.colorOfString("#EB48FA"); ctl.selectedIndex = 2 } if(skill.grade == "天命" || skill.grade == "合體"){ color = SKUIUtil.colorOfString("#F39700"); ctl.selectedIndex = 3 } let Label = FGUtil.getObject(desp, "skillCom/txt_more2").asTextField Label.color = color FGUtil.getObject(desp, "skillCom/name_tf").asLabel.text = skill.name FGUtil.getObject(desp, "skillCom/txt_desp1").asLabel.text = text FGUtil.getObject(desp, "skillCom/txt_more2").asLabel.text = skill.grade FGUtil.getObject(desp, "skillCom/txt_more3").asLabel.text = skill.class FGUtil.getLoader(desp, "skillCom/skill/icon").url = `ui://main_ui/${skill.id}` FGUtil.getComponent(desp, "mask").onClick(() => { desp.dispose() }) } let ctrl_type = FGUtil.getControl(this.main, "n18/ctrl_type") if (pos < 14 && pos > 0) { ctrl_type.selectedIndex = pos - 1 } FGUtil.getObject(this.main, "n18/n21").asLabel.text = `${skill.level}級` let need = skill.level * 5 let cnt = ItemUtil.getBagItemCount(9650) let text = "[color=#FFFFFF]{cnt=0}[/color][color=#FFFFFF]/{need=0}[/color]" if(cnt < need){ text = "[color=#FF0000]{cnt=0}[/color][color=#FFFFFF]/{need=0}[/color]" } let label = FGUtil.getTextField(this.main, "n18/n29/txt_itemnum") label.ubbEnabled = true label.text = text label.setVar("cnt", cnt.toString()) label.setVar("need", need.toString()) label.flushVars() } onBabyBless(skill?) { let cnt = ItemUtil.getBagItemCount(9651) let text = "[color=#FFFFFF]{cnt=0}[/color][color=#FFFFFF]/1[/color]" if(cnt < 1){ text = "[color=#FF0000]{cnt=0}[/color][color=#FFFFFF]/{need=0}[/color]" } let label = FGUtil.getTextField(this.main, "n17/txt_itemnum") label.ubbEnabled = true label.text = text label.setVar("cnt", cnt.toString()) label.flushVars() for (let index = 0; index < this.Baby.PannelSkillList.length; index++) { const id = this.Baby.PannelSkillList[index]; let skill = this.Baby.GetSkillByID(id) FGUtil.getObject(this.main, "n1/btn" + skill.pos + "/icon/title").asLabel.text = `${skill.level}級` FGUtil.getLoader(this.main, "n1/btn" + skill.pos + "/icon/icon").url = `ui://main_ui/${id}` let ctrl = FGUtil.getControl(this.main, "n1/btn" + skill.pos + "/icon/ctrl_lv") ctrl.selectedIndex = 0 if(skill.grade == "尋常"){ ctrl.selectedIndex = 1 } if(skill.grade == "超凡"){ ctrl.selectedIndex = 2 } if(skill.grade == "天命" || skill.grade == "合體"){ ctrl.selectedIndex = 3 } } //顯示動畫 if (skill != null) { let node = FGUtil.getObject(this.main, "n1/btn" + skill.pos).node cc.tween(node).to(0.2, { scale: 1.05 }).to(0.15, { scale: 0.95 }).to(0.1, { scale: 1 }).start() } } onSkillBattle(skill) { let index = 3 let path = "n17/n6" if (skill.type == "太陰") { path = "n17/n7" index = 2 } else if (skill.type == "合體") { path = "n17/n8" index = 1 } let obj = FGUtil.getObject(this.main, path) FGUtil.getObject(obj.asCom, "title").asLabel.text = `${skill.level}級` FGUtil.getLoader(obj.asCom, "icon").url = `ui://main_ui/${skill.id}` let ctrl = FGUtil.getControl(obj.asCom, "ctrl_lv") ctrl.selectedIndex = 0 if(skill.grade == "尋常"){ ctrl.selectedIndex = 1 } if(skill.grade == "超凡"){ ctrl.selectedIndex = 2 } if(skill.grade == "天命"){ ctrl.selectedIndex = 3 } } initSkillItem(type, idx, item: fairygui.GObject) { let skillList = this.Baby.GetSkillListByType(type) let skill = skillList[idx] item.data = skill FGUtil.getObject(item.asCom, "title").asLabel.text = skill.name FGUtil.getLoader(item.asCom, "n20/icon").url = `ui://main_ui/${skill.id}` } skillInfo(index) { if (this.Baby.BlessSkillList.length == 0) { MsgAlert.addMsg("您還沒有許願技能呢!") return } let type = "純陽" if (index == 2) { type = "太陰" } else if (index == 1) { type = "合體" } let skillList = this.Baby.GetSkillListByType(type) if (skillList.length == 0) { MsgAlert.addMsg(`您還沒學習到類型為${type}的技能呢,趕快去許願吧!`) return } let desp = fgui.UIPackage.createObject("main_ui", "home_select_skill").asCom; FGUtil.root().addChild(desp); let controller = desp.getController("ctrl_isshow") controller.selectedIndex = 0 let list = FGUtil.getList(desp, "list_item") list.itemRenderer = this.initSkillItem.bind(this, type); list.setVirtual(); list.numItems = skillList.length let onClickSkill = null list.on(fgui.Event.CLICK_ITEM, (item) => { controller.selectedIndex = 1 onClickSkill = item.data }) let changeBtn = FGUtil.getButton(desp, "n10/skill_change/btn_change") changeBtn.onClick(() => { if (onClickSkill == null) return GameModel.send("c2s_babySkillBattle", { id: this.Baby.ID, skillId: onClickSkill.id }); desp.dispose() }) FGUtil.getComponent(desp, "mask").onClick(() => { desp.dispose() }) } }