import { _decorator, Component, Node, Label, Sprite, ImageAsset, SpriteFrame, Texture2D } from 'cc'; import { DataSystem } from '../../core/data/DataSystem'; import { Http, HttpResponseCode } from '../../core/net/Http'; import { ResourceLoader } from '../../core/resourceManager/ResourceLoader'; import { BitmapFont } from '../../core/ui/BitmapFont'; import { WindowOpenMode } from '../../core/ui/window/WindowOpenMode'; import { WindowSystem } from '../../core/ui/window/WindowSystem'; import { ConfigData } from '../../data/ConfigData'; import { ISJSB } from '../../data/jsb/platform'; import { UserHeroData } from '../../hero/UserHeroData'; import { PVPCardData } from '../../pvp/PVP'; const { ccclass, property } = _decorator; /**好友约战Item*/ @ccclass('FriendFightItem') export class FriendFightItem extends Component { @property({ type: ResourceLoader, displayName: "资源加载组件", tooltip: "资源加载组件" }) res: ResourceLoader = null; @property({ type: Http, displayName: "Http组件", tooltip: "Http组件" }) http: Http = null; @property({ type: Sprite, displayName: "头像", tooltip: "头像" }) imgHead: Sprite = null; @property({ type: Label, displayName: "文本昵称", tooltip: "文本昵称" }) txtNickName: Label = null; @property({ type: BitmapFont, displayName: "文本秒伤", tooltip: "文本秒伤" }) txtDevote: BitmapFont = null; @property({ type: Node, displayName: "挑战按钮", tooltip: "挑战按钮" }) nodeChallenge: Node = null; @property({ type: Node, displayName: "挑战胜利", tooltip: "挑战胜利" }) nodeWin: Node = null; private friendData: any; private isCanClick = true; /**当数据改动时*/ public async onDataChange(data: { id: number, avator: string, nickName: string, attack: number, isChallengeWin: boolean }, index: number) { this.friendData = data; this.txtNickName.string = data.nickName; this.txtDevote.string = `${data.attack > 1000 ? (data.attack / 1000).toFixed(1) + "k" : data.attack}`; this.nodeChallenge.active = !data.isChallengeWin; this.nodeWin.active = data.isChallengeWin; if (ISJSB() && data.avator) { let img = await this.res.loadRemote(data.avator, { ext: ".png" }); const spriteFrame = new SpriteFrame(); const texture = new Texture2D(); texture.image = img; spriteFrame.texture = texture; this.imgHead.spriteFrame = spriteFrame; } } private getPVPParam(data: any) { let g1: Array = []; let g2: Array = []; let key: number = parseInt(data.key); let baseHit = DataSystem.getData(ConfigData).get("serverConfig").pvpBaseDamge; let buff = DataSystem.getData(ConfigData).get("buff"); let myHeros: any[] = data.myHeroDatas.heroDatas; let myFHeros: any[] = data.myFriendHeroDatas; let enemyHeros: any[] = data.enemyHeroDatas.heroDatas; let enemyFHeros: any[] = data.enemyFriendHeroDatas; let userData = DataSystem.getData(UserHeroData); for (let i = 0; i < myHeros.length; i++) { let tempHero = userData.get(myHeros[i].id).client; let temp = new PVPCardData(myHeros[i].id, myHeros[i].lv, myHeros[i].star, tempHero.color, tempHero.camp, data.myHeroDatas.avator); g1.push(temp); } for (let i = 0; i < myFHeros.length; i++) { let tempHero = userData.get(myFHeros[i].heroData.id).client; let temp = new PVPCardData(myFHeros[i].heroData.id, myFHeros[i].heroData.lv, myFHeros[i].heroData.star, tempHero.color, tempHero.camp, myFHeros[i].avator); g1.push(temp); } for (let i = 0; i < enemyHeros.length; i++) { let tempHero = userData.get(enemyHeros[i].id).client; let temp = new PVPCardData(enemyHeros[i].id, enemyHeros[i].lv, enemyHeros[i].star, tempHero.color, tempHero.camp, data.enemyHeroDatas.avator); g2.push(temp); } for (let i = 0; i < enemyFHeros.length; i++) { let tempHero = userData.get(enemyFHeros[i].heroData.id).client; let temp = new PVPCardData(enemyFHeros[i].heroData.id, enemyFHeros[i].heroData.lv, enemyFHeros[i].heroData.star, tempHero.color, tempHero.camp, enemyFHeros[i].avator); g2.push(temp); } return { g1: g1, g2: g2, key: key, baseHit: baseHit, buff: buff }; } private async onClickChallenge() { if (!this.isCanClick) return; this.isCanClick = false; let result = await this.http.send("/api/pvp/ReadyPVP", { type: 3, enemyID: this.friendData.id }); if (result && result.code == HttpResponseCode.Success) { let param = this.getPVPParam(result.data); WindowSystem.open("prefabs/pvp/pvp", WindowOpenMode.NotCloseAndCover, [param]); this.isCanClick = true; } else { WindowSystem.showTips("请求失败"); this.isCanClick = true; } } }