| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281 |
- 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<Prefab>(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<Prefab>(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
- }
|