LevelAction.ts 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  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. public init_level() {
  32. //每次开始把基础颜色打乱
  33. DataModel.random_base_color();
  34. DataModel.generate_lvl_color_arr(Global.cur_lvl+4);
  35. // init every layer
  36. this.node.children.forEach(layer_node => {
  37. // console.log("init_level this.node>>>>>:", this.node);
  38. layer_node.getComponent(LayerAction).init_layer();
  39. });
  40. //
  41. let color_pin_arr = [];
  42. let color_cat_arr = [];
  43. let total_hole_num = this.get_hole_num();
  44. let need_slot_num = total_hole_num / 3;
  45. for (let i = 0; i < need_slot_num; i++) {
  46. let base = DataModel.get_lvl_color();
  47. color_pin_arr.push(base.clone());
  48. color_pin_arr.push(base.clone());
  49. color_pin_arr.push(base.clone());
  50. color_cat_arr.push(base);
  51. }
  52. color_pin_arr.sort(() => {
  53. return 0.5 - Math.random();
  54. });
  55. color_cat_arr.sort(() => {
  56. return 0.5 - Math.random();
  57. });
  58. console.log(" current lvl pin num:", color_pin_arr.length);
  59. console.log(" current lvl solt num:", color_cat_arr.length);
  60. this.node.children.forEach(layer_node => {
  61. // console.log("init_level this.node>>>>>:", this.node);
  62. layer_node.getComponent(LayerAction).init_pin(color_pin_arr);
  63. });
  64. // console.log("need pin num:",need_slot_num);
  65. CatColorRules.set_cat_color(color_cat_arr);
  66. Global.layer_empty_action.init_empty();
  67. Global.layer_cat_action.init_cat();
  68. //本关,钉子总数
  69. Global.init_pin_info(total_hole_num);
  70. director.on(events.remove_element, this.remove_element, this);
  71. //默认隐藏一些
  72. this.set_default_layer();
  73. }
  74. set_default_layer(){
  75. //默认都是不显示的
  76. for(let i = this.node.children.length-1;i>=0;i--){
  77. let layer_action = this.node.children[i].getComponent(LayerAction);
  78. layer_action.node.active = false;
  79. }
  80. this.remove_element();
  81. }
  82. remove_element(){
  83. let default_show_layer_num = 4;
  84. let show_num = 0;
  85. for(let i = this.node.children.length-1;i>=0;i--){
  86. let layer_action = this.node.children[i].getComponent(LayerAction);
  87. if(layer_action.get_element_size()<=0){
  88. continue;
  89. }
  90. if(show_num<default_show_layer_num){
  91. layer_action.layer_active(true);
  92. show_num++;
  93. }else{
  94. layer_action.layer_active(false);
  95. }
  96. }
  97. }
  98. get_pin_color():PinAction[]{
  99. let arr: PinAction[] = [];
  100. // this.node.children.forEach(layer_node => {
  101. // layer_node.getComponent(LayerAction)?.get_pin_color(arr);
  102. // });
  103. for(let i = this.node.children.length-1;i>=0;i--){
  104. let layer_action = this.node.children[i].getComponent(LayerAction);
  105. layer_action?.get_pin_color(arr);
  106. }
  107. return arr
  108. }
  109. }