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

362 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 FuturePannel from "./FuturePannel";
import DestinyPannel from "./DestinyPannel";
import CarePannel from "./CarePannel";
import Baby from "./Baby";
export default class BabyMgrPannel extends cc.Component {
static shared = new BabyMgrPannel();
main: fgui.GComponent;
curBaby: Baby
show() {
this.loadUI();
}
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_yangyu").asCom;
FGUtil.root().addChild(this.main);
FGUtil.fitScreen(this.main);
this.initUI();
this.initEvent();
// this.loadHorseSkill();
}
resetBattleSkill() {
FGUtil.getControl(this.main, "n8/ctrl_lv").selectedIndex = 0
FGUtil.getControl(this.main, "n9/ctrl_lv").selectedIndex = 0
FGUtil.getControl(this.main, "n10/ctrl_lv").selectedIndex = 0
FGUtil.getControl(this.main, "n8/ctrl_show").selectedIndex = 0
FGUtil.getControl(this.main, "n9/ctrl_show").selectedIndex = 0
FGUtil.getControl(this.main, "n10/ctrl_show").selectedIndex = 0
FGUtil.getLoader(this.main, "n8/icon").url = ""
FGUtil.getLoader(this.main, "n9/icon").url = ""
FGUtil.getLoader(this.main, "n10/icon").url = ""
FGUtil.getButton(this.main, "n8").clearClick()
FGUtil.getButton(this.main, "n9").clearClick()
FGUtil.getButton(this.main, "n10").clearClick()
}
initUI() {
let name = GameModel.player.name
this.main.getChild("txt_name").asLabel.text = `${name}的寶貝`
this.main.getChild("txt_age").asLabel.text = `${name}的寶貝`
this.main.getChild("close").onClick(this.hide, this)
this.main.getChild("btn_jieju").onClick(this.onClickFuture, this)
this.main.getChild("btn_mingpan").onClick(this.onClickDestiny, this)
this.main.getChild("btn_peiyang").onClick(this.onClickCare, this)
this.main.getChild("btnFight").onClick(this.onClickFight, this)
this.main.getChild("btn_item").onClick(this.onClickDaoju, this)
this.main.getChild("btn_back").onClick(this.onClickBack, this)
// btnFight
let list_attr1 = FGUtil.getList(this.main, "list_attr1")
list_attr1.itemRenderer = this.initAttr1Item.bind(this);
list_attr1.numItems = 7
let list_attr2 = FGUtil.getList(this.main, "list_attr2")
list_attr2.itemRenderer = this.initAttr2Item.bind(this);
list_attr2.numItems = 3
FGUtil.getObject(this.main, "txt_pingjia").asLabel.text = "0"
let list = this.main.getChild("n34").asList
list.on(fgui.Event.CLICK_ITEM, this.onClickItem, this)
this.onBabyBattle()
let list_goods = this.main.getChild("n43").asList
list_goods.itemRenderer = this.initGoodsItem.bind(this);
list_goods.numItems = 4
list_goods.on(fgui.Event.CLICK_ITEM, this.onClickGoodsItem, this)
}
initAttr1Item(idx, item: fairygui.GObject) {
let list = ["氣質", "耐力", "智力", "內力", "名氣", "道德", "叛逆"]
let attrList = ["qualitites", "endurance", "intelligence", "internalForce", "fame", "moral", "rebel"]
FGUtil.getObject(item.asCom, "attrname").asLabel.text = list[idx]
if (this.curBaby != null) {
FGUtil.getObject(item.asCom, "attrvalue").asLabel.text = this.curBaby.Attr[attrList[idx]]
FGUtil.getObject(this.main, "txt_pingjia").asLabel.text = this.curBaby.GetScore().toString()
}
}
initAttr2Item(idx, item: fairygui.GObject) {
let list = ["親密", "孝心", "溫飽"]
let attrList = ["bosom", "filial", "foodFull"]
FGUtil.getObject(item.asCom, "attrname").asLabel.text = list[idx]
if (this.curBaby != null) {
FGUtil.getObject(item.asCom, "attrvalue").asLabel.text = this.curBaby.Attr[attrList[idx]]
FGUtil.getObject(this.main, "txt_pingjia").asLabel.text = this.curBaby.GetScore().toString()
}
}
resetAttrList() {
if (this.main == null) return
let list_attr1 = FGUtil.getList(this.main, "list_attr1")
for (let index = 0; index < 7; index++) {
this.initAttr1Item(index, list_attr1.getChildAt(index))
}
let list_attr2 = FGUtil.getList(this.main, "list_attr2")
for (let index = 0; index < 3; index++) {
this.initAttr2Item(index, list_attr2.getChildAt(index))
}
}
resetBabyGoodsList() {
if (this.main == null) return
let list_goods = this.main.getChild("n43").asList
for (let index = 0; index < list_goods.numItems; index++) {
this.initGoodsItem(index, list_goods.getChildAt(index))
}
}
initGoodsItem(idx, item: fairygui.GObject) {
let itemId = 9650 + idx
var itemInfo = ItemUtil.getItemData(itemId);
let cnt = ItemUtil.getBagItemCount(itemId)
let info = SKDataUtil.clone(itemInfo)
info.undel = true
info.operateid = this.curBaby.ID
item.data = info
FGUtil.getControl(item.asCom, "selected").selectedIndex = 0
FGUtil.getLoader(item.asCom, "icon").url = `ui://main_ui/${itemInfo.icon}`;
FGUtil.getTextField(item.asCom, "title").text = cnt.toString();
}
onClickGoodsItem(item: fgui.GObject) {
let list_goods = this.main.getChild("n43").asList
for (let index = 0; index < list_goods.numItems; index++) {
this.initGoodsItem(index, list_goods.getChildAt(index))
}
FGUtil.getControl(item.asCom, "selected").selectedIndex = 1
cc.loader.loadRes("Prefabs/BagItemDetail", cc.Prefab, (err, prefab: any) => {
if (err) {
console.warn(err);
return
}
let detail = cc.instantiate(prefab);
detail.parent = this.main.node;
// detail.setPosition(this.bagPanel.width / 2, -this.bagPanel.height / 2)
detail.name = 'BagItemDetail';
detail.getComponent('BagItemDetail').loadInfo(item.data);
detail.getComponent('BagItemDetail').showOperation();
})
}
onClickItem(item: fgui.GObject) {
let data = item.data
let ctl = this.main.getController("ctrl_isfight")
ctl.selectedIndex = 0
if (data.Attr.battle) {
ctl.selectedIndex = 1
}
this.main.getController("ctrl_hasChild").selectedIndex = (data.Attr.sex + 1)
this.curBaby = data
this.resetAttrList()
this.resetBattleSkill()
for (let index = 0; index < this.curBaby.BattleSkillList.length; index++) {
let id = this.curBaby.BattleSkillList[index];
let skill = this.curBaby.GetSkillByID(id)
this.onSkillBattle(skill)
}
let rateCtl = FGUtil.getControl(this.main, "ctrl_pingjia")
rateCtl.selectedIndex = 0
if (this.curBaby != null) {
rateCtl.selectedIndex = 1
let score = this.curBaby.GetScore()
if (score == 3000) {
rateCtl.selectedIndex = 2
}
if (score == 4000) {
rateCtl.selectedIndex = 3
}
if (score == 5000) {
rateCtl.selectedIndex = 4
}
}
}
onBabyBattle(baby?) {
if (this.main == null) return
let babys = MyModel.shared.BabyList.BabyList
let list = this.main.getChild("n34").asList
for (let index = 0; index < list.numChildren; index++) {
let child = list._children[index];
if (index >= babys.length) {
child.visible = false
} else {
let baby = babys[index]
child.data = baby
let icon = baby.GetIconID()
FGUtil.getLoader(child.asCom, "icon").url = `ui://main_ui/${icon}`
let name = GameModel.player.name
child.asCom.getChild("title").asLabel.text = `${name}的寶貝`
let ctl = child.asCom.getController("isShow")
ctl.selectedIndex = 0
if (baby.Attr.battle) {
ctl.selectedIndex = 1
list.selectedIndex = index
this.onClickItem(child)
}
}
}
if (baby != null) {
MsgAlert.addMsg("出戰成功!")
}
}
GetSkillLevelBuff(skill){
let level = skill.level
if (level > 100) level = 100
return level * 0.6 / 100
}
onClickBattleSkill(skill){
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.curBaby.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()
})
}
onSkillBattle(skill) {
let index = 3
let path = "n8"
if (skill.type == "太陰") {
index = 2
path = "n9"
} else if (skill.type == "合體") {
index = 1
path = "n10"
}
let obj = FGUtil.getObject(this.main, path)
FGUtil.getControl(obj.asCom, "ctrl_show").selectedIndex = 1
FGUtil.getLoader(obj.asCom, "icon").url = `ui://main_ui/${skill.id}`
obj.asButton.onClick(this.onClickBattleSkill.bind(this, skill))
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
}
}
onClickFight() {
GameModel.send("c2s_babyBattle", { id: this.curBaby.ID });
}
onClickDaoju() {
FGUtil.getControl(this.main, "ctrl_showitem").selectedIndex = 1
}
onClickBack() {
FGUtil.getControl(this.main, "ctrl_showitem").selectedIndex = 0
}
onClickFuture() {
FuturePannel.shared.show()
}
onClickDestiny() {
if (this.main == null) return
DestinyPannel.shared.show(this.curBaby)
}
onClickCare() {
if (this.main == null) return
CarePannel.shared.show(this.curBaby)
}
initEvent() {
}
}