HeroListItem.ts 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. import { _decorator, Button, instantiate, Label, Node, Prefab, Sprite, SpriteFrame } from 'cc';
  2. import { ResKeeper } from '../../../framework/res/ResKeeper';
  3. import { StringUtil } from '../../../framework/util/StringUtil';
  4. import { Framework } from '../../../framework/Framework';
  5. import { HeroListCard } from './HeroListCard';
  6. import { EquipManager } from '../../manager/EquipManager';
  7. import { ViewID } from '../../../framework/config/LayerConf';
  8. const { ccclass, property } = _decorator;
  9. export interface heroListItemData {
  10. race: number;
  11. heros: [];
  12. equips: {};
  13. }
  14. @ccclass('HeroListItem')
  15. export class HeroListItem extends ResKeeper {
  16. @property({ type: Label, tooltip: "阵营文字" })
  17. raceName: Label = null;
  18. @property({ type: Sprite, tooltip: "阵营图标" })
  19. raceIco: Sprite = null;
  20. @property({ type: [Node], tooltip: "装备" })
  21. equips: Node[] = [];
  22. @property({ type: Label, tooltip: "羁绊总星级" })
  23. fetterStarNum: Label = null;
  24. @property({ type: Label, tooltip: "羁绊按钮文字" })
  25. fetterBtnTx: Label = null;
  26. @property({ type: Node, tooltip: "英雄容器" })
  27. herosNode: Node = null;
  28. private data = {};
  29. protected onLoad() {
  30. }
  31. protected onDestroy() {
  32. //如果该组件有事件自行取消注释
  33. //Framework.event.removeEvent(this);
  34. super.onDestroy();
  35. }
  36. //如果使用了池中的节点,在该函数内归还,该函数会在onDestroy前调用
  37. onClose() {
  38. }
  39. //UI事件处理
  40. private onTouchButton(event: Event) {
  41. //Framework.audio.playEffect(AudioID.Click);
  42. let target: any = event.target;
  43. }
  44. refreshItem(data: heroListItemData) {
  45. this.data = data;
  46. this.raceName.string = StringUtil.getLanguageData('阵营类型' + data.race);
  47. this.load('common', `texture/image/race_ball_${data.race}/spriteFrame`, SpriteFrame, (res: SpriteFrame) => {
  48. this.raceIco.spriteFrame = res;
  49. })
  50. this.updateHero();
  51. this.updateEquip();
  52. }
  53. updateHero() {
  54. this.herosNode.removeAllChildren();
  55. for (const element of this.data['heros']) {
  56. this.load('hero', `prefab/HeroListCard`, Prefab, (pre: Prefab) => {
  57. let heroCard = instantiate(pre);
  58. heroCard.name = 'hero_' + element.conf.Id;
  59. this.herosNode.addChild(heroCard);
  60. heroCard.getComponent(HeroListCard).refreshItem(element);
  61. heroCard.active = true;
  62. })
  63. }
  64. }
  65. //更新装备
  66. updateEquip() {
  67. let equipsData = EquipManager.getEquipRaceSlotGroup(this.data['race']);
  68. for (const slot in this.equips) {
  69. if (Object.prototype.hasOwnProperty.call(this.equips, slot)) {
  70. const node = this.equips[slot];
  71. let bg = node.getChildByName('bg').getComponent(Sprite);
  72. let noneNode = node.getChildByName('none_node');
  73. let noneAdd = noneNode.getChildByName('add_ico');
  74. noneAdd.active = equipsData[Number(slot) + 1].length > 0;
  75. let equipNode = node.getChildByName('equip_node');
  76. let ico = equipNode.getChildByName('ico').getComponent(Sprite);
  77. let starNode = equipNode.getChildByName('star_node');
  78. let starTx = starNode.getChildByName('num').getComponent(Label);
  79. let levelTx = equipNode.getChildByName('level_tx').getComponent(Label);
  80. let eData = this.data['equips'][Number(slot) + 1];
  81. if (eData) {
  82. noneNode.active = false;
  83. equipNode.active = true;
  84. this.load('common', `texture/background/frame_bg_${eData.conf.Quality}/spriteFrame`, SpriteFrame, (res: SpriteFrame) => {
  85. bg.spriteFrame = res;
  86. })
  87. this.load('common', `texture/icon/equips/equip1_${eData.conf.Slot}1/spriteFrame`, SpriteFrame, (res: SpriteFrame) => {
  88. ico.spriteFrame = res;
  89. })
  90. if (eData.conf['Quality'] < 5) {
  91. starNode.active = false;
  92. } else {
  93. starNode.active = true;
  94. starTx.string = String(eData.star);
  95. }
  96. let lvConf = EquipManager.getEquipLevelByExp(eData.exp);
  97. levelTx.string = 'Lv.' + lvConf.Id;
  98. } else {
  99. noneNode.active = true;
  100. equipNode.active = false;
  101. this.load('common', `texture/background/frame_bg_0/spriteFrame`, SpriteFrame, (res: SpriteFrame) => {
  102. bg.spriteFrame = res;
  103. })
  104. }
  105. }
  106. }
  107. }
  108. onClickEquip(event: Event, customStr) {
  109. let eData = this.data['equips'][customStr];
  110. if (eData) {
  111. let args = { race: this.data['race'], slot: customStr, equip: eData }
  112. Framework.layer.open(ViewID.EquipOperate, null, args);
  113. } else {
  114. let args = { race: this.data['race'], slot: customStr }
  115. Framework.layer.open(ViewID.EquipChoose, null, args);
  116. }
  117. }
  118. }