FriendFightItem.ts 5.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import { _decorator, Component, Node, Label, Sprite, ImageAsset, SpriteFrame, Texture2D } from 'cc';
  2. import { DataSystem } from '../../core/data/DataSystem';
  3. import { Http, HttpResponseCode } from '../../core/net/Http';
  4. import { ResourceLoader } from '../../core/resourceManager/ResourceLoader';
  5. import { BitmapFont } from '../../core/ui/BitmapFont';
  6. import { WindowOpenMode } from '../../core/ui/window/WindowOpenMode';
  7. import { WindowSystem } from '../../core/ui/window/WindowSystem';
  8. import { ConfigData } from '../../data/ConfigData';
  9. import { ISJSB } from '../../data/jsb/platform';
  10. import { UserHeroData } from '../../hero/UserHeroData';
  11. import { PVPCardData } from '../../pvp/PVP';
  12. const { ccclass, property } = _decorator;
  13. /**好友约战Item*/
  14. @ccclass('FriendFightItem')
  15. export class FriendFightItem extends Component {
  16. @property({ type: ResourceLoader, displayName: "资源加载组件", tooltip: "资源加载组件" }) res: ResourceLoader = null;
  17. @property({ type: Http, displayName: "Http组件", tooltip: "Http组件" }) http: Http = null;
  18. @property({ type: Sprite, displayName: "头像", tooltip: "头像" }) imgHead: Sprite = null;
  19. @property({ type: Label, displayName: "文本昵称", tooltip: "文本昵称" }) txtNickName: Label = null;
  20. @property({ type: BitmapFont, displayName: "文本秒伤", tooltip: "文本秒伤" }) txtDevote: BitmapFont = null;
  21. @property({ type: Node, displayName: "挑战按钮", tooltip: "挑战按钮" }) nodeChallenge: Node = null;
  22. @property({ type: Node, displayName: "挑战胜利", tooltip: "挑战胜利" }) nodeWin: Node = null;
  23. private friendData: any;
  24. private isCanClick = true;
  25. /**当数据改动时*/
  26. public async onDataChange(data: { id: number, avator: string, nickName: string, attack: number, isChallengeWin: boolean }, index: number) {
  27. this.friendData = data;
  28. this.txtNickName.string = data.nickName;
  29. this.txtDevote.string = `${data.attack > 1000 ? (data.attack / 1000).toFixed(1) + "k" : data.attack}`;
  30. this.nodeChallenge.active = !data.isChallengeWin;
  31. this.nodeWin.active = data.isChallengeWin;
  32. if (ISJSB() && data.avator) {
  33. let img = await this.res.loadRemote<ImageAsset>(data.avator, { ext: ".png" });
  34. const spriteFrame = new SpriteFrame();
  35. const texture = new Texture2D();
  36. texture.image = img;
  37. spriteFrame.texture = texture;
  38. this.imgHead.spriteFrame = spriteFrame;
  39. }
  40. }
  41. private getPVPParam(data: any) {
  42. let g1: Array<PVPCardData> = [];
  43. let g2: Array<PVPCardData> = [];
  44. let key: number = parseInt(data.key);
  45. let baseHit = DataSystem.getData(ConfigData).get("serverConfig").pvpBaseDamge;
  46. let buff = DataSystem.getData(ConfigData).get("buff");
  47. let myHeros: any[] = data.myHeroDatas.heroDatas;
  48. let myFHeros: any[] = data.myFriendHeroDatas;
  49. let enemyHeros: any[] = data.enemyHeroDatas.heroDatas;
  50. let enemyFHeros: any[] = data.enemyFriendHeroDatas;
  51. let userData = DataSystem.getData(UserHeroData);
  52. for (let i = 0; i < myHeros.length; i++) {
  53. let tempHero = userData.get(myHeros[i].id).client;
  54. let temp = new PVPCardData(myHeros[i].id, myHeros[i].lv, myHeros[i].star, tempHero.color, tempHero.camp, data.myHeroDatas.avator);
  55. g1.push(temp);
  56. }
  57. for (let i = 0; i < myFHeros.length; i++) {
  58. let tempHero = userData.get(myFHeros[i].heroData.id).client;
  59. let temp = new PVPCardData(myFHeros[i].heroData.id, myFHeros[i].heroData.lv, myFHeros[i].heroData.star, tempHero.color, tempHero.camp, myFHeros[i].avator);
  60. g1.push(temp);
  61. }
  62. for (let i = 0; i < enemyHeros.length; i++) {
  63. let tempHero = userData.get(enemyHeros[i].id).client;
  64. let temp = new PVPCardData(enemyHeros[i].id, enemyHeros[i].lv, enemyHeros[i].star, tempHero.color, tempHero.camp, data.enemyHeroDatas.avator);
  65. g2.push(temp);
  66. }
  67. for (let i = 0; i < enemyFHeros.length; i++) {
  68. let tempHero = userData.get(enemyFHeros[i].heroData.id).client;
  69. let temp = new PVPCardData(enemyFHeros[i].heroData.id, enemyFHeros[i].heroData.lv, enemyFHeros[i].heroData.star, tempHero.color, tempHero.camp, enemyFHeros[i].avator);
  70. g2.push(temp);
  71. }
  72. return { g1: g1, g2: g2, key: key, baseHit: baseHit, buff: buff };
  73. }
  74. private async onClickChallenge() {
  75. if (!this.isCanClick) return;
  76. this.isCanClick = false;
  77. let result = await this.http.send("/api/pvp/ReadyPVP", { type: 3, enemyID: this.friendData.id });
  78. if (result && result.code == HttpResponseCode.Success) {
  79. let param = this.getPVPParam(result.data);
  80. WindowSystem.open("prefabs/pvp/pvp", WindowOpenMode.NotCloseAndCover, [param]);
  81. this.isCanClick = true;
  82. } else {
  83. WindowSystem.showTips("请求失败");
  84. this.isCanClick = true;
  85. }
  86. }
  87. }