357 lines
12 KiB
TypeScript
357 lines
12 KiB
TypeScript
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()
|
|
})
|
|
}
|
|
|
|
} |