UIGameOver.ts 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import { _decorator, Button, Component, Label, Node } from 'cc';
  2. import { ModuleDef } from '../../scripts/ModuleDef';
  3. import { GameUILayers } from '../../scripts/GameUILayers';
  4. import { UITeam } from '../../module_basic/ui_team/UITeam';
  5. import { GameOverPlayerItem } from './GameOverPlayerItem';
  6. import { IGameData, IGamePlayer } from '../shared/protocols/public/game/GameTypeDef';
  7. import { UserMgr } from '../scripts/UserMgr';
  8. import { IRoomData } from '../shared/types/RoomData';
  9. const { ccclass, property } = _decorator;
  10. /**
  11. * @en Layout component is used to mount on the root node of the UI corresponding to the Prefab, and declare a series of property references for tgxUIController to call.
  12. * @zh Layout 组件用于挂载到UI对应的Prefab根节点,并声明一系列 property 引用,供 tgxUIController 调用。
  13. */
  14. @ccclass('Layout_UIGameOver')
  15. export class Layout_UIGameOver extends Component {
  16. @property(Button) btnBack:Button;
  17. @property(Button) btnPlay:Button;
  18. @property([GameOverPlayerItem]) players:GameOverPlayerItem[] = [];
  19. @property(Label) lblCongrats:Label;
  20. }
  21. @tgx_class(ModuleDef.BASIC)
  22. export class UIGameOver extends tgx.UIController {
  23. constructor(){
  24. super('ui_game_over/ui_game_over',GameUILayers.POPUP,Layout_UIGameOver);
  25. }
  26. public get layout():Layout_UIGameOver{
  27. return this._layout as Layout_UIGameOver;
  28. }
  29. protected onCreated(data:{gameData:IGameData,roomData:IRoomData}): void {
  30. this.onButtonEvent(this.layout.btnBack,()=>{
  31. this.close();
  32. });
  33. this.onButtonEvent(this.layout.btnPlay,()=>{
  34. this.layout.btnPlay.interactable = false;
  35. tgx.UIMgr.inst.showUI(UITeam,()=>{
  36. this.close();
  37. });
  38. });
  39. let gameData = data.gameData;
  40. let roomData = data.roomData;
  41. let teamMembers:IGamePlayer[] = [];
  42. let selfPlayer = gameData.players.find(v=>v.uid == UserMgr.inst.uid);
  43. gameData.players.forEach(p=>{
  44. if(p.teamId == selfPlayer.teamId){
  45. teamMembers.push(p);
  46. }
  47. });
  48. for(let i = 0; i < this.layout.players.length; ++i){
  49. let player = teamMembers[i];
  50. let playerCom = this.layout.players[i];
  51. if(player){
  52. let user = roomData.userList.find(v=>v.uid==player.uid);
  53. playerCom.setPlayer(teamMembers[i],user);
  54. }
  55. else{
  56. playerCom.lblRoleName.node.active = false;
  57. playerCom.lblUserName.node.active = false;
  58. }
  59. }
  60. let teams = [];
  61. for(let k in gameData.teamsWeights){
  62. teams.push({
  63. teamId:Number(k),
  64. score:gameData.teamsWeights[k]
  65. });
  66. }
  67. teams.sort((a,b)=>{
  68. return b.score - a.score;
  69. });
  70. let rank = 0;
  71. for(let i = 0; i < teams.length; ++i){
  72. if(teams[i].teamId == selfPlayer.teamId){
  73. rank = i+1;
  74. break;
  75. }
  76. }
  77. this.layout.lblCongrats.string = `你的队伍排名:第${rank}名!`
  78. }
  79. }