UIGameRank.ts 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import { _decorator, Component, director, instantiate, Node } from 'cc';
  2. import { GameUILayers } from '../../scripts/GameUILayers';
  3. import { Layout_UIGameRank } from './Layout_UIGameRank';
  4. import { GameEvent, GameMgr } from '../../module_basic/scripts/GameMgr';
  5. import { TankGameRankItem } from './GameRankItem';
  6. import { ModuleDef } from '../../scripts/ModuleDef';
  7. import { MsgGameDataChangedPush } from '../../module_basic/shared/protocols/public/game/MsgGameDataChangedPush';
  8. import { TEAM_ID_MAP } from '../../module_basic/shared/types/TeamInfo';
  9. @tgx_class(ModuleDef.GAME)
  10. export class UIGameRank extends tgx.UIController {
  11. constructor(){
  12. super('ui_game_rank/ui_game_rank',GameUILayers.HUD,Layout_UIGameRank);
  13. }
  14. protected onCreated(): void {
  15. this.refreshRank();
  16. director.on(GameEvent.PLAYER_COMES,this.refreshRank,this);
  17. director.on(GameEvent.PLAYER_LEAVES,this.refreshRank,this);
  18. director.on(GameEvent.GAME_DATA_CHANGED,this.onGameDataChanged,this);
  19. }
  20. protected onDispose(): void {
  21. director.off(GameEvent.PLAYER_COMES,this.refreshRank,this);
  22. director.off(GameEvent.PLAYER_LEAVES,this.refreshRank,this);
  23. director.off(GameEvent.GAME_DATA_CHANGED,this.onGameDataChanged,this);
  24. }
  25. onGameDataChanged(msg:MsgGameDataChangedPush){
  26. if(msg.teamWeights != undefined){
  27. this.refreshRank();
  28. }
  29. }
  30. async refreshRank(){
  31. let teams = Object.keys(GameMgr.inst.gameData.teamsWeights);
  32. teams.sort((a,b)=>{
  33. return GameMgr.inst.gameData.teamsWeights[b] - GameMgr.inst.gameData.teamsWeights[a];
  34. });
  35. let layout = this._layout as Layout_UIGameRank;
  36. layout.listRoot.children.forEach((node)=>{
  37. node.active = false;
  38. });
  39. for(let i = 0; i < teams.length; ++i){
  40. let teamId = Number(teams[i]);
  41. let teamWeight = GameMgr.inst.gameData.teamsWeights[teamId];
  42. let teamName = TEAM_ID_MAP[teamId].name;
  43. let node = layout.listRoot.children[i];
  44. if(!node){
  45. node = instantiate(layout.listRoot.children[0]);
  46. layout.listRoot.addChild(node);
  47. }
  48. node.active = true;
  49. let item = node.getComponent(TankGameRankItem);
  50. item.setInfo(i+1,teamName,teamWeight,teamId);
  51. }
  52. }
  53. }