import { _decorator, Component, Node, TERRAIN_SOUTH_INDEX, Button, Label, RichText, TERRAIN_HEIGHT_BASE, UITransform } from 'cc'; import { BattleData } from '../battle/BattleData'; import { Data } from '../core/data/Data'; import { DataSystem } from '../core/data/DataSystem'; import { Http, HttpResponseCode } from '../core/net/Http'; import { OpenWindow } from '../core/ui/window/OpenWindow'; import { WindowSystem } from '../core/ui/window/WindowSystem'; import { ConfigData } from '../data/ConfigData'; import { UserData } from '../data/UserData'; import { UserHeroData } from '../hero/UserHeroData'; import { Config } from '../launch/Config'; import { MarshalData } from '../marshal/MarshalData'; import { ReportThinking } from '../ReportThinking'; const { ccclass, property, requireComponent } = _decorator; /**兵营UI */ @ccclass('Barracks') @requireComponent(Http) export class Barracks extends Component { @property({ type: Label, tooltip: "当前兵营等级文本" }) nowLvLabel: Label; @property({ type: Label, tooltip: "下一次解锁新武将等级" }) nextUnLockGeneralLv: Label; @property({ type: Label, tooltip: "解锁新武将数量" }) numLabel: Label; @property({ type: Label, tooltip: "当前等级文本" }) lvLabel: Label; @property({ type: Label, tooltip: "下一级文本" }) nextLvLabel: Label; @property({ type: RichText, tooltip: "当前威望" }) prestigeLabel: RichText; @property({ type: Node, tooltip: "升级按钮节点" }) upCampLvNode: Node; @property({ type: Node, tooltip: "获取威望节点" }) getPrestigeNode: Node; @property({ type: Node, tooltip: "最大等级节点" }) MaxLvNode: Node; @property({ type: Node, tooltip: "等级信息" }) LvInfoNode: Node; @property({ type: Node, tooltip: "最大等级信息" }) MaxLvLabelNode: Node; @property({ type: Node, tooltip: "解锁武将信息节点" }) unlockGeneralNode: Node; @property({ type: Node, tooltip: "当前等级节点" }) nowLvNode: Node; @property({ type: OpenWindow, tooltip: "兵营升级窗口" }) barracksGradeUpWin: OpenWindow; @property({ type: OpenWindow, tooltip: "武将解锁窗口" }) unLockHeroWin: OpenWindow; private barrackConfig: any; private unLockGeneralLv: number = 0; private heroDatas = []; private showUnlock = false; private newUnLockHeros = []; onLoad() { this.barrackConfig = DataSystem.getData(ConfigData).get('barrack'); this.setLvInfo(); this.setPrestige(); } update() { DataSystem.watch(UserData, 'campLv') && this.setLvInfo(); DataSystem.watch(UserData, 'prestige') && this.setPrestige(); } private setLvInfo() { let userData = DataSystem.getData(UserData); this.nowLvLabel.string = 'Lv.' + userData.campLv; this.lvLabel.string = 'Lv.' + userData.campLv; this.nextLvLabel.string = `Lv.${userData.campLv + 1}`; if (!this.barrackConfig[userData.campLv + 1]) {//已经最大等级 this.LvInfoNode.active = this.upCampLvNode.active = this.getPrestigeNode.active = false; this.MaxLvLabelNode.active = this.MaxLvNode.active = true; } else { this.MaxLvLabelNode.active = this.MaxLvNode.active = false; } if (this.unLockGeneralLv <= userData.campLv) { let generalsStr = this.getUnLockGeneralLv(); if (generalsStr) { this.heroDatas = generalsStr.split(","); this.nextUnLockGeneralLv.string = 'Lv.' + this.unLockGeneralLv; this.numLabel.string = this.heroDatas.length + '名'; } else if (this.unlockGeneralNode.active) { this.unlockGeneralNode.active = false; this.nowLvNode.setPosition(160, 330, 0); } } } /**设置威望 */ private setPrestige() { let userData = DataSystem.getData(UserData); if (this.MaxLvLabelNode.active) { this.prestigeLabel.string = `${userData.prestige} /-`; } else { let needPrestige = this.barrackConfig[userData.campLv].cost; if (userData.prestige >= needPrestige) { if (!this.upCampLvNode.active) { this.upCampLvNode.active = true; this.getPrestigeNode.active = false; } this.prestigeLabel.string = `${userData.prestige} /${needPrestige} `; } else { if (!this.getPrestigeNode.active) { this.upCampLvNode.active = false; this.getPrestigeNode.active = true; } this.prestigeLabel.string = `${userData.prestige} /${needPrestige} `; } } } /*获取下次解锁神将数据 */ private getUnLockGeneralLv() { let lv = DataSystem.getData(UserData).campLv; for (const key in this.barrackConfig) { if (Number(key) > lv && this.barrackConfig[key].unlockHero) { this.unLockGeneralLv = Number(key); return this.barrackConfig[key].unlockHero; } } return ''; } /**升级 */ private async upCampLv() { let result = await this.getComponent(Http).send("/api/user/upCamp"); if (result && result.code == HttpResponseCode.Success) { let userData = DataSystem.getData(UserData); if (result.data.campLv == this.unLockGeneralLv) { this.newUnLockHeros = this.heroDatas.concat(); this.showUnlock = true; } userData.campLv = result.data.campLv; ReportThinking.currency_decrease('prestige', userData.prestige, userData.prestige - result.data.prestige, result.data.prestige, 'upCamp'); ReportThinking.base_levelup(userData.prestige - result.data.prestige); userData.prestige = result.data.prestige; this.barracksGradeUpWin.open({ nextLv: this.unLockGeneralLv }); this.setHaveHerosData(); this.setBattleHerosData(); } else if (result && result.code == 111) { WindowSystem.showTips('威望不足'); } } /**更新已获得武将等级*/ private setHaveHerosData() { let userData = DataSystem.getData(UserData); let userHeroData = DataSystem.getData(UserHeroData); for (let i = 0; i < userHeroData.haveHeros.length; i++) { let hero = userHeroData.get(userHeroData.haveHeros[i]) if (hero.server.lv < userData.campLv) { hero.server.lv = userData.campLv; userHeroData.set(userHeroData.haveHeros[i], hero); } } } /**更新战斗武将等级*/ private setBattleHerosData() { let userData = DataSystem.getData(UserData); for (let i = 1; i < 6; i++) { let battleHeroData = DataSystem.getData(BattleData).heros.get(i); if (battleHeroData && battleHeroData.id) { if (battleHeroData.lv < userData.campLv) { battleHeroData.lv = userData.campLv; battleHeroData.lvProgress = 0; } } } } private onClose(closeCallback: () => void) { if (this.showUnlock) { this.unLockHeroWin.open({ heroDatas: this.newUnLockHeros }); } closeCallback(); } }