LevelAction.ts 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. import { _decorator, Component, director, Node, Prefab } from 'cc';
  2. import { ElementAction } from './ElementAction';
  3. import { LayerAction } from './LayerAction';
  4. import { ColorDate } from './ColorDate';
  5. import { Global } from './Global';
  6. import { PinAction } from './PinAction';
  7. import { DataModel } from './DataModel';
  8. import { events } from './Enums';
  9. import { CatColorRules } from './CatColorRules';
  10. const { ccclass, property } = _decorator;
  11. @ccclass('LevelAction')
  12. export class LevelAction extends Component {
  13. start() {
  14. console.log("zh:LevelAction.ts start");
  15. }
  16. update(deltaTime: number) {
  17. }
  18. get_lvl(): number {
  19. let arr = this.node.name.split("_");
  20. // console.log("split get_lvl>>>>>:", arr);
  21. return Number(arr[1].trim());
  22. }
  23. get_hole_num(): number {
  24. let hole_num: number = 0;
  25. this.node.children.forEach(layer_node => {
  26. let num = layer_node.getComponent(LayerAction).get_hole_num();
  27. hole_num += num;
  28. });
  29. return hole_num;
  30. }
  31. /**
  32. * 初始化 关
  33. */
  34. public init_level() {
  35. //每次开始把基础颜色打乱
  36. DataModel.random_base_color();
  37. DataModel.generate_lvl_color_arr(Global.cur_lvl + 4);
  38. // init every layer
  39. this.node.children.forEach(layer_node => {
  40. // console.log("init_level this.node>>>>>:", this.node);
  41. layer_node.getComponent(LayerAction).init_layer();
  42. });
  43. //
  44. let color_pin_arr = [];
  45. let color_cat_arr = [];
  46. let total_hole_num = this.get_hole_num();
  47. let need_slot_num = total_hole_num / 3;
  48. for (let i = 0; i < need_slot_num; i++) {
  49. let base = DataModel.get_lvl_color();
  50. color_pin_arr.push(base.clone());
  51. color_pin_arr.push(base.clone());
  52. color_pin_arr.push(base.clone());
  53. color_cat_arr.push(base);
  54. }
  55. color_pin_arr.sort(() => {
  56. return 0.5 - Math.random();
  57. });
  58. color_cat_arr.sort(() => {
  59. return 0.5 - Math.random();
  60. });
  61. console.log(" current lvl pin num:", color_pin_arr.length);
  62. console.log(" current lvl solt num:", color_cat_arr.length);
  63. this.node.children.forEach(layer_node => {
  64. // console.log("init_level this.node>>>>>:", this.node);
  65. layer_node.getComponent(LayerAction).init_pin(color_pin_arr);
  66. });
  67. // console.log("need pin num:",need_slot_num);
  68. CatColorRules.set_cat_color(color_cat_arr);
  69. Global.layer_empty_action.init_empty();
  70. Global.layer_cat_action.init_cat();
  71. //本关,钉子总数
  72. Global.init_pin_info(total_hole_num);
  73. director.on(events.remove_element, this.remove_element, this);
  74. //默认隐藏一些
  75. this.set_default_layer();
  76. }
  77. /**
  78. *
  79. */
  80. set_default_layer() {
  81. //默认都是不显示的
  82. for (let i = this.node.children.length - 1; i >= 0; i--) {
  83. let layer_action = this.node.children[i].getComponent(LayerAction);
  84. layer_action.node.active = false;
  85. }
  86. this.remove_element();
  87. }
  88. /**
  89. * 移除元素
  90. */
  91. remove_element() {
  92. let default_show_layer_num = 4;
  93. let show_num = 0;
  94. for (let i = this.node.children.length - 1; i >= 0; i--) {
  95. let layer_action = this.node.children[i].getComponent(LayerAction);
  96. if (layer_action.get_element_size() <= 0) {
  97. continue;
  98. }
  99. if (show_num < default_show_layer_num) {
  100. layer_action.layer_active(true);
  101. show_num++;
  102. } else {
  103. layer_action.layer_active(false);
  104. }
  105. }
  106. }
  107. /**
  108. *
  109. * @returns
  110. */
  111. get_pin_color(): PinAction[] {
  112. let arr: PinAction[] = [];
  113. // this.node.children.forEach(layer_node => {
  114. // layer_node.getComponent(LayerAction)?.get_pin_color(arr);
  115. // });
  116. for (let i = this.node.children.length - 1; i >= 0; i--) {
  117. let layer_action = this.node.children[i].getComponent(LayerAction);
  118. layer_action?.get_pin_color(arr);
  119. }
  120. return arr
  121. }
  122. }