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