PrepareMediator.ts 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. import { _decorator, Component, Node, ModelComponent, find, Prefab, loader, instantiate, Mesh, systemEvent, SystemEventType, Quat, Vec2, director, game, view, Touch, LabelComponent, LayoutComponent } from 'cc';
  2. import { GUIMediator } from '../../../engines/gui/GUIMediator';
  3. import { DataModelEventType } from '../../../engines/models/DataModelEventType';
  4. import { SceneManager } from '../../../engines/scenes/SceneManager';
  5. import GameConfigManager from '../../models/GameConfigManager';
  6. import { GameModel } from '../../models/GameModel';
  7. import { GamePropertys } from '../../models/GamePropertys';
  8. import { WeaponCell } from '../../models/weapons/WeaponCell';
  9. import { WeaponCellScript } from './WeaponCellScript';
  10. const { ccclass, property } = _decorator;
  11. @ccclass('PrepareMediator')
  12. export class PrepareMediator extends GUIMediator {
  13. @property({
  14. type:LabelComponent
  15. })
  16. glodLabel:LabelComponent=null;
  17. @property({
  18. type:LabelComponent
  19. })
  20. glodLabel1:LabelComponent=null;
  21. @property({
  22. type:LabelComponent
  23. })
  24. diamondLabel:LabelComponent=null;
  25. @property({
  26. type:LabelComponent
  27. })
  28. gunNameLabel:LabelComponent=null;
  29. /**
  30. * 武器列表
  31. */
  32. @property({
  33. type:LayoutComponent
  34. })
  35. weaponList:LayoutComponent=null;
  36. private modelView:ModelComponent;
  37. private prefabInstance:Node;
  38. private prefabModelComponent:ModelComponent;
  39. OnShow(data?:any):void{
  40. super.OnShow(data);
  41. this.RefreshGunModel();
  42. this.RefreshGlod();
  43. this.RefreshDiamond();
  44. this.AddEvents();
  45. }
  46. /**
  47. * 初始化枪的模型
  48. */
  49. private RefreshGunModel():void{
  50. if(this.modelView==null){
  51. let modelNode:Node=find("Canvas/ModelView");
  52. this.modelView=modelNode.getComponent(ModelComponent);
  53. }
  54. this.modelView.node.active=true;
  55. let weaponConfig:any=GameConfigManager.GetWeaponConfig(GameModel.single.currentWeaponId);
  56. let prefab:Prefab=loader.getRes(weaponConfig.prefab);
  57. this.prefabInstance=instantiate(prefab);
  58. this.prefabModelComponent=this.prefabInstance.getComponentInChildren(ModelComponent);
  59. this.modelView.mesh=this.prefabModelComponent.mesh;
  60. this.modelView.setMaterial(this.prefabModelComponent.getMaterial(0),0);
  61. if(this.gunNameLabel!=null){
  62. this.gunNameLabel.string=weaponConfig.name;
  63. }
  64. }
  65. OnHide():void{
  66. this.RemoveEvents();
  67. this.modelView.mesh=null;
  68. this.modelView.setMaterial(null,0);
  69. this.prefabInstance.destroy();
  70. this.modelView.node.active=false;
  71. }
  72. private AddEvents():void{
  73. systemEvent.on(cc.SystemEventType.TOUCH_START,this.TouchStartHandler,this);
  74. systemEvent.on(cc.SystemEventType.TOUCH_MOVE,this.TouchMoveHandler,this);
  75. systemEvent.on(cc.SystemEventType.TOUCH_MOVE,this.TouchEndHandler,this);
  76. GameModel.single.AddEvent(DataModelEventType.PROPERTY_CHANGED,this,this.GameModelPropertyChanged,0);
  77. }
  78. private RemoveEvents():void{
  79. systemEvent.off(SystemEventType.TOUCH_START,this.TouchStartHandler,this);
  80. systemEvent.off(SystemEventType.TOUCH_MOVE,this.TouchMoveHandler,this);
  81. systemEvent.off(SystemEventType.TOUCH_MOVE,this.TouchEndHandler,this);
  82. GameModel.single.RemoveEvent(DataModelEventType.PROPERTY_CHANGED,this,this.GameModelPropertyChanged);
  83. }
  84. private GameModelPropertyChanged(key:string):void{
  85. switch (key) {
  86. case GamePropertys.gold:
  87. this.CallNextFrame(this.RefreshGlod.bind(this));
  88. break;
  89. case GamePropertys.diamond:
  90. this.CallNextFrame(this.RefreshDiamond.bind(this));
  91. break;
  92. case GamePropertys.currentWeaponId:
  93. this.CallNextFrame(this.RefreshGunModel.bind(this));
  94. break;
  95. case GamePropertys.WeaponCell:
  96. this.CallNextFrame(this.RefreshWeaponList.bind(this));
  97. break;
  98. }
  99. }
  100. private RefreshGlod():void{
  101. if(this.glodLabel!=null){
  102. this.glodLabel.string=GameModel.single.gold.toString();
  103. }
  104. }
  105. private RefreshDiamond():void{
  106. if(this.diamondLabel!=null){
  107. this.diamondLabel.string=GameModel.single.diamond.toString();
  108. }
  109. }
  110. private startRotation:Quat=new Quat();
  111. private currentRotation:Quat=new Quat();
  112. private startPoint:Vec2=new Vec2();
  113. private currentPoint:Vec2=new Vec2();
  114. private TouchStartHandler(touch:Touch,touchEvent):void{
  115. let pos:Vec2=touch.getLocation();
  116. this.startPoint.set(pos.x,pos.y);
  117. this.startRotation.x=this.modelView.node.rotation.x;
  118. this.startRotation.set(this.modelView.node.rotation.x,this.modelView.node.rotation.y,this.modelView.node.rotation.z,this.modelView.node.rotation.w);
  119. }
  120. private TouchMoveHandler(touch,touchEvent):void{
  121. let pos:Vec2=touch.getLocation();
  122. this.currentPoint.set(pos.x,pos.y);
  123. let dis:number=Vec2.distance(this.currentPoint,this.startPoint);
  124. let value:number=dis/view.getCanvasSize().width;
  125. Quat.rotateY(this.currentRotation,this.startRotation,value);
  126. Quat.normalize(this.currentRotation,this.currentRotation);
  127. this.modelView.node.setRotation(this.currentRotation);
  128. }
  129. /**
  130. * 刷新武器列表
  131. */
  132. private RefreshWeaponList():void{
  133. let list:WeaponCell[]=GameModel.single.weaponCells;
  134. let weaponCell:WeaponCell;
  135. let weaponCellView:Node;
  136. let weaponCellScript:WeaponCellScript;
  137. for (let index = 0; index < list.length; index++) {
  138. weaponCell = list[index];
  139. weaponCellView
  140. }
  141. }
  142. private TouchEndHandler(...arg):void{
  143. console.log("拖拽模型结束");
  144. }
  145. StartGame():void{
  146. this.HideSelf();
  147. SceneManager.single.Swicth("FightingScene");
  148. }
  149. }