SamsaraGame/assets/Script/ts/nurture/DestinyPannel.ts
2025-04-24 17:03:28 +08:00

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()
})
}
}