import { _decorator, Component, Sprite, Label, Node, Prefab, instantiate, Button, random, log } from 'cc'; import { Http } from '../../core/net/Http'; import { ResourcesUtils } from '../../core/resourceManager/ResourcesUtils'; import { OpenWindow } from '../../core/ui/window/OpenWindow'; import { WindowManager } from '../../core/ui/window/WindowManager'; import { WindowOpenMode } from '../../core/ui/window/WindowOpenMode'; import { Log } from '../../core/utils/Log'; import { MultipleType } from '../../Data/ADData'; import { g } from '../../Data/g'; import { platform } from '../../Data/platform'; import { User } from '../../Data/User'; import { BattleAvengeItem } from '../../Item/BattleAvengeItem'; import { BattleFriendItem } from '../../Item/BattleFriendItem'; import { BattleRole } from './BattleRole'; const { ccclass, property } = _decorator; @ccclass('BattleUIWindow') export class BattleUIWindow extends Component { @property({ type: Node, tooltip: "切磋好友列表" }) friendListNode: Node; @property({ type: Node, tooltip: "仇人列表" }) avengeListNode: Node; @property({ type: Node, tooltip: "切磋好友列表content" }) friendListContent: Node; @property({ type: Node, tooltip: "仇人列表content" }) avengeListContent: Node; @property({ tooltip: "好友列表item预制体路径" }) friendItemPrefab = ""; @property({ tooltip: "仇人列表item预制体路径" }) avengeItemPrefab = ""; @property({ type: Http, tooltip: "消息控制" }) http: Http; @property({ type: [Node], tooltip: "" }) generalNode: Node[] = []; @property({ type: Label, tooltip: "当日次数文本" }) dayBattleNumLabel: Label; @property({ type: Label, tooltip: "队伍人数文本" }) myTeamNumLabel: Label; private battleData: Array<{ userID: number, lv: number, nickName: string, avator: string, isFriend: boolean, hasRedPacket: boolean, time: number, redPacketID: number }> = []; private _tabIndex: number = -1; start() { g.gameData.playAddMoneySound = false; g.gameData.hasNewRedPacketUpdate = g.gameData.hasBattleListUpdate = g.gameData.hasAvengeListUpdate = false; } public set tabIndex(value: number) { if (this._tabIndex == value) { return; } this._tabIndex = value; this._tabIndex == 1 ? this.onAvenge() : this.onBattle(); } public get tabIndex() { return this._tabIndex; } update() { if (g.gameData.hasNewRedPacketUpdate || g.gameData.hasBattleListUpdate) { g.gameData.hasNewRedPacketUpdate = false; g.gameData.hasBattleListUpdate = false; if (this.tabIndex == 0) { this.onBattle(); } } if (g.gameData.hasAvengeListUpdate) { g.gameData.hasAvengeListUpdate = false; if (this.tabIndex == 1) { this.onAvenge(); } } if (g.gameData.hasBattleOverRefresh) { g.gameData.hasBattleOverRefresh = false; this.setBattleNum(); } if (g.battleData.hasBattleTimesUpdate) { g.battleData.hasBattleTimesUpdate = false; this.onStartPlay(); } } /**打开回调 */ private async openHandler(data: any) { this.setBattleNum(); // if (!g.gameData.hasRequestFriendData) { let getFriendResult = await this.http.send("/api/friend/GetOneLvFriends");//获取自己的好友信息 if (!getFriendResult.code) { g.gameData.myFriendDatas = getFriendResult.data.friendDatas; g.gameData.myFriendDatas.sort((a: any, b: any): number => { return a.lv > b.lv ? -1 : 1;//好友等级高到低 }); } else { WindowManager.showTips(g.CodeMsg[getFriendResult.code]); } // let revengeResult = await this.http.send("/api/battle/GetRevenges"); // if (!revengeResult.code) { // g.gameData.myAvengeDatas = revengeResult.data.revengeDatas; // g.gameData.myAvengeDatas.sort((a: any, b: any): number => { // return a.createTime > b.createTime ? -1 : 1;//优先最近战斗 // }); // } else { // WindowManager.showTips(g.CodeMsg[revengeResult.code]); // } // g.gameData.hasRequestFriendData = true; // } this.myTeamNumLabel.string = g.gameData.myFriendDatas.length + 1 + '人'; let myMainGeneralData = null; let generals = g.gameData.getMyLocalData(g.userData.id).myLocalGenerals; if (!generals.length) { myMainGeneralData = { id: g.userData.id, lv: g.userData.lv, nickName: g.userData.nickName, avator: g.userData.avator }; } else { generals.sort((a: any, b: any): number => { return a.generalLv > b.generalLv ? -1 : 1;//优先最近战斗 }); myMainGeneralData = { id: g.userData.id, lv: generals[0].generalLv, nickName: g.userData.nickName, avator: g.userData.avator }; } //设置UI神将数据 let nullData = { id: 0, lv: 0, nickName: '', avator: '' }; this.generalNode[0].getComponent(BattleRole).setData(myMainGeneralData); this.generalNode[1].getComponent(BattleRole).setData(g.gameData.myFriendDatas.length > 0 ? g.gameData.myFriendDatas[0] : nullData); this.generalNode[2].getComponent(BattleRole).setData(g.gameData.myFriendDatas.length > 1 ? g.gameData.myFriendDatas[1] : nullData); this.tabIndex = data.tabIndex; } private async setBattleNum() { let result = await this.http.send("/api/battle/GetUserBattle");//获取出征信息 if (!result.code) { g.gameData.battleRemainder = result.data.times; g.gameData.RemainderAddTimes = result.data.addTimes; g.gameData.RemainderHadAddTimes = result.data.hadAddTimes; this.dayBattleNumLabel.string = '' + (g.gameData.battleRemainder + g.gameData.RemainderHadAddTimes); } else { WindowManager.showTips(g.CodeMsg[result.code]); } } public onTabbarChange(t: Node, index: number): void { this.tabIndex = Number(index) - 1; } /**点击切磋tab */ public onBattle() { this.friendListNode.active = true; this.avengeListNode.active = false; this.battleData = []; this.battleData.push({ userID: 0, lv: 0, nickName: '', avator: '', isFriend: false, hasRedPacket: false, time: 0, redPacketID: 0 }); for (let i = 0; i < g.gameData.myFriendDatas.length; i++) { let data = g.gameData.myFriendDatas[i]; if (data.lv > 7) { let itemData: any = { userID: data.id, lv: data.lv, nickName: data.nickName, avator: data.avator, isFriend: true, hasRedPacket: false, time: 0, redPacketID: 0 }; this.battleData.push(itemData); } } let redPacketDatas = g.gameData.myRedPacketDatas.concat(); for (let i = 0; i < redPacketDatas.length; i++) {//好友红包 if (redPacketDatas[i].type == 1) {//切磋红包 for (let j = 0; j < this.battleData.length; j++) { if (redPacketDatas[i].enemyID == this.battleData[j].userID) { this.battleData[j].hasRedPacket = true; this.battleData[j].time = redPacketDatas[i].canOpenTime; this.battleData[j].redPacketID = redPacketDatas[i].id; redPacketDatas.splice(i, 1); i--; break; } } } } for (let i = 0; i < redPacketDatas.length; i++) {//陌生玩家红包 if (redPacketDatas[i].type == 1) {//切磋红包 let itemData: any = { userID: redPacketDatas[i].enemyID, lv: redPacketDatas[i].enemyLv, nickName: redPacketDatas[i].enemyName, avator: redPacketDatas[i].enemyAvator, isFriend: false, hasRedPacket: true, time: redPacketDatas[i].canOpenTime, redPacketID: redPacketDatas[i].id, }; this.battleData.push(itemData); } } this.friendListContent.removeAllChildren(); this.addFriendItem(); } /**复仇tab*/ public onAvenge() { this.friendListNode.active = false; this.avengeListNode.active = true; this.avengeListContent.removeAllChildren(); this.addAvengeItem(); } public async addFriendItem() { for (let i = 0; i < this.battleData.length; i++) { let prefabData = await ResourcesUtils.load(this.friendItemPrefab, null, this.node); var itemNode = instantiate(prefabData); itemNode.parent = this.friendListContent; itemNode.getComponent(BattleFriendItem).setData(this.battleData[i], i == 0); } } public async addAvengeItem() { for (let i = 0; i < g.gameData.myAvengeDatas.length; i++) { let prefabData = await ResourcesUtils.load(this.avengeItemPrefab, null, this.node); var itemNode = instantiate(prefabData); itemNode.parent = this.avengeListContent; itemNode.getComponent(BattleAvengeItem).setData(g.gameData.myAvengeDatas[i]); } } /**打开盟友窗口 */ public onOpenFriendWindow() { this.getComponent(OpenWindow).open(5); } /**点击加号 */ public async onPlayVideo() { this.onStartPlay(); } private async onStartPlay() { let result = await this.http.send("/api/ad/watchVideoAD"); if (result.code == 0) { //播放视频 let adData = await g.showRewardVideo(); if (adData) { this.onVideoPlayOver(); } else { //视频观看失败 WindowManager.showTips("视频观看时间不足"); } } else if (result.code == 108) { WindowManager.showTips("今日视频次数已用完,请明日再继续"); } else { WindowManager.showTips("视频准备中,请稍后再试"); } } /**点击发起挑战 */ public async onInvite() { let result = await this.http.send("/api/app/share", {}); if (result.code == 0) { platform.wxShare(result.data.url, result.data.title, result.data.descroption); } else { WindowManager.showTips("分享信息获取失败,请稍后再试"); } } /** * 广告观看完毕 */ async onVideoPlayOver() { let result = await this.http.send("/api/wealth/AddDiamondForVideo", { multipleType: MultipleType.Battle, adData: g.adData }); if (result.code == 0) { this.setBattleNum(); if (result.data.addDiamond > 0) { WindowManager.open("Prefabs/Windows/神石领取界面", WindowOpenMode.NotCloseAndAdd, [result.data.addDiamond, -1]); } } else WindowManager.showTips(g.CodeMsg[result.code]); } /** * 关闭回调 */ public onClose() { WindowManager.close(); g.gameData.isAddRole = true; } onDestroy() { g.gameData.playAddMoneySound = true; } } /** * (0表示随机,1表示好友, 2表示复仇, 3表示挑战) */ export enum BattleType { RandomBattle, FriendBattle, avengeBattle, ChallengeBattle }