| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 |
- import { _decorator, Component, Node, Label, EventHandler, Sprite, Prefab, instantiate, SpriteFrame, ImageAsset, Texture2D } from 'cc';
- import { Http } from '../../core/net/Http';
- import { ResourcesUtils } from '../../core/resourceManager/ResourcesUtils';
- import { UITween } from '../../core/ui/tween/UITween';
- import { WindowManager } from '../../core/ui/window/WindowManager';
- import { WindowOpenMode } from '../../core/ui/window/WindowOpenMode';
- import { g } from '../../Data/g';
- import { ISJSB } from '../../Data/platform';
- import { SoundSystem } from '../../Main/SoundSystem';
- import { BattleRole, BattleRoleState } from './BattleRole';
- import { BattleType } from './BattleUIWindow';
- const { ccclass, property } = _decorator;
- /**切磋战斗准备 */
- @ccclass('BattleWindow')
- export class BattleWindow extends Component {
- @property({ type: Http, tooltip: "消息控制" })
- http: Http;
- @property({ type: UITween, tooltip: "开始动画" })
- ourTeamTween: UITween;
- @property({ type: UITween, tooltip: "开始动画" })
- enemyTeamTween: UITween;
- @property({ type: Label, tooltip: "剩余次数文本" })
- numsLabel: Label;
- @property({ type: Node, tooltip: "准备时UI" })
- generalNode: Node;
- @property({ type: Sprite, tooltip: "我方头像" })
- ourHeadSprite: Sprite;
- @property({ type: Sprite, tooltip: "敌方头像" })
- enemyHeadSprite: Sprite;
- @property({ type: EventHandler, tooltip: "开始对战回调" })
- startHanedler: EventHandler;
- @property({ type: [Node], tooltip: "我方神将组" })
- ourGeneralsGroup: Node[] = [];
- @property({ type: [Node], tooltip: "敌方神将组" })
- enemyGeneralsGroup: Node[] = [];
- @property({ type: Sprite, tooltip: "返回图片" })
- closeSprite: Sprite;
- @property({ tooltip: "单方最多出战神将数" })
- generalMaxNum: number = 50;
- @property({ type: Label, tooltip: "我方队伍人数文本" })
- ourNumLabel: Label;
- private battleKey: string;
- //战斗类型0表示随机,1表示好友,2表示复仇,3表示挑战
- start() {
- this.numsLabel.node.active = !(g.battleData.type == BattleType.avengeBattle);
- SoundSystem.play(1);
- }
- update() {
- if (g.gameData.hasBattleOver) {
- g.gameData.hasBattleOver = false;
- g.gameData.hasBattleOverRefresh = true;
- WindowManager.close();
- }
- }
- onDestroy() {
- SoundSystem.play(0);
- }
- /**窗口打开回调 设置战斗准备数据*/
- public async openHandler(data: any) {
- if (ISJSB) {
- if (g.userData.avator) {
- let img = await ResourcesUtils.loadRemote<ImageAsset>(g.userData.avator, { ext: ".png" }, this);
- const spriteFrame = new SpriteFrame();
- const texture = new Texture2D();
- texture.image = img;
- spriteFrame.texture = texture;
- this.ourHeadSprite.spriteFrame = spriteFrame;
- }
- if (g.battleData.enemyAvator) {
- let img = await ResourcesUtils.loadRemote<ImageAsset>(g.battleData.enemyAvator, { ext: ".png" }, this);
- const spriteFrame = new SpriteFrame();
- const texture = new Texture2D();
- texture.image = img;
- spriteFrame.texture = texture;
- this.enemyHeadSprite.spriteFrame = spriteFrame;
- }
- }
- this.setOurBattleGenerals();
- this.setEnemyBattleGenerals();
- this.battleKey = g.battleData.battleKey;
- this.numsLabel.node.active = data.type != BattleType.avengeBattle;
- this.numsLabel.string = '今日剩余次数:' + (g.gameData.RemainderAddTimes + g.gameData.RemainderHadAddTimes + g.gameData.battleRemainder);
- for (let i = 0; i < this.ourGeneralsGroup.length; i++) {
- if (i < g.battleData.ourBattleGenerals.length) {
- this.ourGeneralsGroup[i].getComponent(BattleRole).setData(g.battleData.ourBattleGenerals[i], BattleRoleState.Ready);
- this.ourGeneralsGroup[i].active = true;
- }
- }
- for (let i = 0; i < this.enemyGeneralsGroup.length; i++) {
- if (i < g.battleData.enemyBattleGenerals.length) {
- this.enemyGeneralsGroup[i].getComponent(BattleRole).setData(g.battleData.enemyBattleGenerals[i], BattleRoleState.Ready, false);
- this.enemyGeneralsGroup[i].active = true;
- }
- }
- }
- /**设置我方参战神将数据 */
- private setOurBattleGenerals() {
- g.battleData.ourBattleGenerals = [];
- let generals = g.gameData.getMyLocalData(g.userData.id).myLocalGenerals;
- if (!generals.length) {
- g.battleData.ourBattleGenerals.push({ id: g.userData.id, lv: g.userData.lv, nickName: g.userData.nickName, avator: g.userData.avator });
- for (let j = 0; j < g.battleData.myFriendDatas.length; j++) {
- if (g.battleData.ourBattleGenerals.length <= this.generalMaxNum) {
- g.battleData.ourBattleGenerals.push(g.battleData.myFriendDatas[j]);
- }
- }
- } else {
- generals.sort((a: any, b: any): number => {
- return a.lv > b.lv ? -1 : 1;//优先最近战斗
- });
- for (let i = 0; i < generals.length; i++) {
- if (!i) {
- g.battleData.ourBattleGenerals.push({ id: g.userData.id, lv: generals[i].generalLv, nickName: g.userData.nickName, avator: g.userData.avator });//主将
- for (let j = 0; j < g.battleData.myFriendDatas.length; j++) {
- if (g.battleData.ourBattleGenerals.length <= this.generalMaxNum) {
- g.battleData.ourBattleGenerals.push(g.battleData.myFriendDatas[j]);
- }
- }
- }
- else {
- if (g.battleData.ourBattleGenerals.length <= this.generalMaxNum) {
- g.battleData.ourBattleGenerals.push({ id: 0, lv: generals[i].generalLv, nickName: '', avator: '' });
- }
- }
- }
- }
- let ourNum = g.battleData.ourBattleGenerals.length;
- ourNum = ourNum || 1;
- this.ourNumLabel.string = ourNum + '人';
- }
- /**设置敌方参战神将数据 */
- private setEnemyBattleGenerals() {
- g.battleData.enemyBattleGenerals = [];
- let generals = g.battleData.enemyGenerals.concat();
- if (!generals.length) {
- g.battleData.enemyBattleGenerals.push({ id: g.battleData.enemyID, lv: g.battleData.enemyLv, nickName: g.battleData.enemyName, avator: g.battleData.enemyAvator });
- for (let j = 0; j < g.battleData.enemyFriendDatas.length; j++) {
- if (g.battleData.enemyBattleGenerals.length >= this.generalMaxNum) { return; }
- g.battleData.enemyBattleGenerals.push(g.battleData.enemyFriendDatas[j]);
- }
- } else {
- generals.sort((a: number, b: number): number => {
- return a > b ? -1 : 1;//优先最近战斗
- });
- for (let i = 0; i < generals.length; i++) {
- if (!i) {
- g.battleData.enemyBattleGenerals.push({ id: g.battleData.enemyID, lv: generals[i], nickName: g.battleData.enemyName, avator: g.battleData.enemyAvator });//主将
- for (let j = 0; j < g.battleData.enemyFriendDatas.length; j++) {
- if (g.battleData.enemyBattleGenerals.length >= this.generalMaxNum) { return; }
- g.battleData.enemyBattleGenerals.push(g.battleData.enemyFriendDatas[j]);
- }
- }
- else {
- if (g.battleData.enemyBattleGenerals.length >= this.generalMaxNum) { return; }
- g.battleData.enemyBattleGenerals.push({ id: 0, lv: generals[i], nickName: '', avator: '' });
- }
- }
- }
- }
- public async onStartButton() {
- this.ourTeamTween.play();
- this.enemyTeamTween.play();
- }
- /**开始动画结束 */
- private async startPlayerOver() {
- // let preFabsData = await ResourcesUtils.load<Prefab>("Prefabs/切磋神将");
- // var generalNode = instantiate(preFabsData);
- // generalNode.parent = this.node;
- this.generalNode.active = false;
- this.closeSprite.node.active = false;
- this.startHanedler.emit([]);
- }
- /**战斗动画结束 设置结算 */
- public async battleOver() {
- let result = await this.http.send("/api/battle/Battle", { battleKey: this.battleKey, isWin: g.battleData.isWin ? 1 : 0 });
- if (!result.code) {
- g.battleData.type = result.data.type;
- g.battleData.isWin = result.data.isWin;
- g.battleData.enemyName = result.data.enemyName;
- g.battleData.addMoney = result.data.addMoney;
- if (g.battleData.isWin && g.battleData.type == BattleType.ChallengeBattle) {
- g.gameData.hasBattleLogUpdate = true;
- }
- if (g.battleData.isWin && g.battleData.type == BattleType.FriendBattle) {
- g.gameData.hasBattleListUpdate = true;
- }
- if (g.battleData.isWin && g.battleData.type == BattleType.avengeBattle) {
- for (let i = 0; i < g.gameData.myAvengeDatas.length; i++) {
- let data = g.gameData.myAvengeDatas[i];
- if (data.attackUserID == g.battleData.enemyID) {
- g.gameData.myAvengeDatas.splice(i, 1);
- break;
- }
- }
- g.gameData.hasAvengeListUpdate = true;
- }
- WindowManager.open("Prefabs/Battle/BattleSettlementWindow", WindowOpenMode.NotCloseAndAdd);
- } else {
- WindowManager.showTips(g.CodeMsg[result.code]);
- }
- }
- }
|