FightingMediator.ts 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. import { _decorator, Component, Node, ButtonComponent, EventTouch, director, SkeletalAnimationComponent, Prefab, instantiate, LayoutComponent, LabelComponent } from 'cc';
  2. import { GUIMediator } from '../../../engines/gui/GUIMediator';
  3. import { GUIManager } from '../../../engines/gui/GUIManager';
  4. import { UIConst } from '../UIConst';
  5. import { GameController } from './GameController';
  6. import { GameModel } from '../../models/GameModel';
  7. import { WeaponBase } from './weapons/WeaponBase';
  8. import GameConfigManager from '../../models/GameConfigManager';
  9. const { ccclass, property } = _decorator;
  10. @ccclass('FightingMediator')
  11. export class FightingMediator extends GUIMediator {
  12. @property({
  13. type:Prefab
  14. })
  15. BulletUIPrefab:Prefab=null;
  16. @property({
  17. type:Node
  18. })
  19. BulletClip:Node=null;
  20. @property({
  21. type:ButtonComponent
  22. })
  23. leftFireButton:ButtonComponent=null;
  24. @property({
  25. type:ButtonComponent
  26. })
  27. middleFireButton:ButtonComponent=null;
  28. @property({
  29. type:ButtonComponent
  30. })
  31. rightFireButton:ButtonComponent=null;
  32. @property({
  33. type:Node
  34. })
  35. killCountGroup:Node=null;
  36. @property({
  37. type:LabelComponent
  38. })
  39. killCountText:LabelComponent=null;
  40. @property({
  41. type:LabelComponent
  42. })
  43. monsterCountText:LabelComponent=null;
  44. /**
  45. * 第几天
  46. */
  47. @property({
  48. type:LabelComponent
  49. })
  50. levelLabel:LabelComponent=null;
  51. /**
  52. * 弹夹子弹池
  53. */
  54. bulletPool:Node[]=[];
  55. start () {
  56. // Your initialization goes here.
  57. }
  58. OnShow():void{
  59. this.AddEvents();
  60. this.RefreshBulletClip();
  61. this.RefreshKillCount();
  62. }
  63. OnHide():void{
  64. this.RemoveEvents();
  65. }
  66. private AddEvents():void{
  67. this.leftFireButton.node.on(Node.EventType.TOUCH_START,this.FireButtonTouchStart,this);
  68. this.middleFireButton.node.on(Node.EventType.TOUCH_START,this.FireButtonTouchStart,this);
  69. this.rightFireButton.node.on(Node.EventType.TOUCH_START,this.FireButtonTouchStart,this);
  70. this.leftFireButton.node.on(Node.EventType.TOUCH_END,this.FireButtonTouchEnd,this);
  71. this.middleFireButton.node.on(Node.EventType.TOUCH_END,this.FireButtonTouchEnd,this);
  72. this.rightFireButton.node.on(Node.EventType.TOUCH_END,this.FireButtonTouchEnd,this);
  73. GameController.single.weapon.AddEvent(WeaponBase.EVENT_BULLET_CHANGE,this,this.bulletCountChanged,0);
  74. GameModel.single.AddEvent(GameModel.KILL_COUNT_CHANGED,this,this.KillCountChangedHandler,0);
  75. }
  76. private RemoveEvents():void{
  77. this.leftFireButton.node.off(Node.EventType.TOUCH_START,this.FireButtonTouchStart,this);
  78. this.middleFireButton.node.off(Node.EventType.TOUCH_START,this.FireButtonTouchStart,this);
  79. this.rightFireButton.node.off(Node.EventType.TOUCH_START,this.FireButtonTouchStart,this);
  80. this.leftFireButton.node.off(Node.EventType.TOUCH_END,this.FireButtonTouchEnd,this);
  81. this.middleFireButton.node.off(Node.EventType.TOUCH_END,this.FireButtonTouchEnd,this);
  82. this.rightFireButton.node.off(Node.EventType.TOUCH_END,this.FireButtonTouchEnd,this);
  83. GameController.single.weapon.RemoveEvent(WeaponBase.EVENT_BULLET_CHANGE,this,this.bulletCountChanged);
  84. GameModel.single.RemoveEvent(GameModel.KILL_COUNT_CHANGED,this,this.KillCountChangedHandler);
  85. }
  86. private KillCountChangedHandler():void{
  87. this.RefreshKillCount();
  88. }
  89. /**
  90. * 刷新弹夹
  91. */
  92. RefreshBulletClip():void{
  93. while(this.BulletClip.children.length!=GameController.single.weapon.bulletCount){
  94. let bullet:Node;
  95. //增加
  96. if(this.BulletClip.children.length<GameController.single.weapon.bulletCount){
  97. bullet=this.CreateBullet();
  98. this.BulletClip.addChild(bullet);
  99. }else{//删除
  100. bullet=this.BulletClip.children[0];
  101. this.BulletClip.removeChild(bullet);
  102. this.DisposeBullet(bullet);
  103. }
  104. }
  105. }
  106. RefreshView():void{
  107. this.RefreshKillCount();
  108. this.RefreshMonsterCount();
  109. this.levelLabel.string="第"+GameModel.single.currentLevel+"天";
  110. }
  111. RefreshKillCount():void{
  112. this.killCountText.string=GameModel.single.killCount.toString();
  113. }
  114. RefreshMonsterCount():void{
  115. let levelConfig:any=GameConfigManager.GetLevelConfig(GameModel.single.currentLevel);
  116. let total:number=levelConfig.monsters.length;
  117. let sy:number=GameModel.single.killCount;
  118. this.monsterCountText.string=total-sy+"/"+total;
  119. }
  120. update (deltaTime: number) {
  121. }
  122. private currentFireButtonNode:Node;
  123. FireButtonTouchStart(e:EventTouch):void{
  124. this.currentFireButtonNode=e.target as Node;
  125. if(e.target==this.leftFireButton.node){
  126. GameController.single.TryFire(1);
  127. }else if(e.target==this.middleFireButton.node){
  128. GameController.single.TryFire(2);
  129. }else{
  130. GameController.single.TryFire(3);
  131. }
  132. }
  133. FireButtonTouchEnd(e:EventTouch):void{
  134. if(e.target!=this.currentFireButtonNode){
  135. return;
  136. }
  137. GameController.single.TryFire(0);
  138. }
  139. private bulletCountChanged():void{
  140. this.RefreshBulletClip();
  141. }
  142. /**
  143. * 从池中创建子弹
  144. */
  145. private CreateBullet():Node{
  146. if(this.bulletPool.length>0){
  147. return this.bulletPool.shift();
  148. }
  149. return instantiate(this.BulletUIPrefab);
  150. }
  151. private DisposeBullet(bullet:Node){
  152. if(this.bulletPool.indexOf(bullet)<0){
  153. this.bulletPool.push(bullet);
  154. }else{
  155. console.error("重复回收弹夹子弹");
  156. }
  157. }
  158. }