BaseLayer.ts 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. import { Button, Component, find, Label, Node, ProgressBar, RichText, v3, Widget } from 'cc';
  2. import { constants } from '../game/data/constants';
  3. import { msgac } from '../game/data/msgac';
  4. import { audioManager } from '../game/manager/audioManager';
  5. import { eventManager } from '../game/manager/eventManager';
  6. import { layerManager } from '../game/manager/layerManager';
  7. import { cocosUtil } from '../utils/cocosUtil';
  8. export class BaseLayer extends Component {
  9. obj: any;
  10. layerName: string = "DefaultLayer";
  11. // {路径:节点对象}
  12. pathNodeObj: any = {};
  13. onLoad() {
  14. // 背景适配
  15. let bgNode = find("bg", this.node);
  16. this.screenAdapterBG(bgNode);
  17. // ui适配
  18. let uiNode = find("ui", this.node);
  19. this.screenAdapterUI(uiNode);
  20. this.addButtonListener(this.node);
  21. this.addPathNode(this.node, "");
  22. }
  23. addPathNode(node: Node, path: string) {
  24. if (node != this.node) {
  25. this.pathNodeObj[path] = node;
  26. }
  27. if (path) {
  28. path += "/";
  29. }
  30. let chs = node.children;
  31. for (let i = 0, len = chs.length; i < len; i++) {
  32. let pNode = chs[i];
  33. this.addPathNode(pNode, path + pNode.name);
  34. }
  35. }
  36. getNodeByPath(path: string) {
  37. let node = this.pathNodeObj[path];
  38. if (node) {
  39. return node;
  40. }
  41. node = find(path, this.node);
  42. if (node) {
  43. this.pathNodeObj[path] = node;
  44. return node;
  45. }
  46. return null;
  47. }
  48. /**
  49. * 缩放背景图,达到满屏显示,背景图部分内容超出屏幕也没事
  50. * @param node 背景图节点
  51. */
  52. screenAdapterBG(node: Node) {
  53. if (!cocosUtil.isNodeValid(node)) {
  54. return;
  55. }
  56. let widget = node.getComponent(Widget);
  57. if (widget) {
  58. widget.enabled = false;
  59. }
  60. let scale = cocosUtil.getScreenBgAdapterScale();
  61. node.setScale(v3(scale, scale, 1));
  62. }
  63. /**
  64. * 缩放UI,达到屏幕适配,ui上的全部内容在屏幕内显示,如果是全屏UI,ui节点如果有widget,缩放后依然有效
  65. * @param node ui根节点
  66. */
  67. screenAdapterUI(node: Node) {
  68. if (!cocosUtil.isNodeValid(node)) {
  69. return;
  70. }
  71. let scale = cocosUtil.getScreenAdapterScale();
  72. node.setScale(v3(scale, scale, 1));
  73. }
  74. addButtonListener(node: Node) {
  75. if (node.getComponent(Button)) {
  76. node.on("click", this.preOnButtonClick, this);
  77. }
  78. let chs = node.children;
  79. for (let i = 0, max = chs.length; i < max; i++) {
  80. let ch = chs[i];
  81. this.addButtonListener(ch);
  82. }
  83. };
  84. preOnButtonClick(btn: any) {
  85. let node = btn.node;
  86. let name = node.name;
  87. console.log(this.layerName + " onButtonClick " + name);
  88. switch (name) {
  89. case "btnClose":
  90. this.closeLayer();
  91. break;
  92. default:
  93. break;
  94. }
  95. this.onButtonClick(node, node.name);
  96. if (!node["hasPlayAudio"]) {
  97. audioManager.instance.onButtonClick(this, node);
  98. }
  99. }
  100. onButtonClick(node: Node, name: String) {
  101. }
  102. openLayer(layer: object, data?: any, cb?: Function) {
  103. layerManager.instance.openLayer(layer, data, cb);
  104. }
  105. closeLayer() {
  106. layerManager.instance.closeLayer(this);
  107. }
  108. addEventArr(arr: any) {
  109. for (let i in arr) {
  110. let val = arr[i];
  111. if (!val) {
  112. continue;
  113. }
  114. eventManager.instance.on(val, this.process_event.bind(this), this);
  115. }
  116. }
  117. removeEventArr(arr: any) {
  118. for (let i in arr) {
  119. let val = arr[i];
  120. if (!val) {
  121. continue;
  122. }
  123. eventManager.instance.off(val, this.process_event.bind(this), this);
  124. }
  125. }
  126. process_event(event: any) {
  127. }
  128. createNotice(content) {
  129. layerManager.instance.createNotice(content);
  130. }
  131. openCoinGetEffectLayer(node: Node) {
  132. let info: any = {};
  133. info.name = constants.layers.CoinGetEffectLayer.name;
  134. info.posStart = cocosUtil.convertToWorldSpace(node);
  135. eventManager.instance.send(msgac.openLayer, info);
  136. }
  137. setProgressBar(progressBar: Node | ProgressBar, percent: number) {
  138. if (progressBar instanceof Node) {
  139. progressBar = progressBar.getComponent(ProgressBar);
  140. }
  141. if (progressBar) {
  142. progressBar.progress = percent;
  143. }
  144. }
  145. setString(node: Node, info: any) {
  146. info = info + "";
  147. let label = node.getComponent(Label);
  148. if (label) {
  149. label.string = info;
  150. return;
  151. }
  152. let rich = node.getComponent(RichText);
  153. if (rich) {
  154. rich.string = info;
  155. return;
  156. }
  157. }
  158. }