Сцена Маджонга | Mahjong scene
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

180 lines
5.5KB

  1. // // // //
  2. УведомитьОСозданииФишекВСцене = мир =>
  3. {
  4. мир.уведомить("создали фишки в сцене");
  5. };
  6. // // // //
  7. ОкраситьВыбранныеФишки = мир =>
  8. {
  9. // Очищаем цвета всех фишек.
  10. for (var номер in мир.фишки)
  11. {
  12. var фишка = мир.фишки[номер];
  13. var группа = мир.группыФишек[номер];
  14. var материал = мир.материалыФишек[группа];
  15. фишка.material = материал;
  16. }
  17. // Окрашиваем выбранные фишки.
  18. for (var id in мир.номераВыбранныхФишек)
  19. {
  20. var номер = мир.номераВыбранныхФишек[id];
  21. var фишка = мир.фишки[номер];
  22. var группа = мир.группыФишек[номер];
  23. var материал = мир.материалыВыбранныхФишек[группа];
  24. фишка.material = материал;
  25. }
  26. };
  27. // // // //
  28. ВывестиВыбранныеФишки = мир =>
  29. {
  30. var номер = мир.номерВыбраннойФишки;
  31. var группа = мир.группыФишек[номер];
  32. console.debug(`Выбрали фишку. номер: '${номер}' группа: '${группа}'`);
  33. console.debug("Номера выбранных фишек", мир.номераВыбранныхФишек);
  34. };
  35. // // // //
  36. ВыбратьФишкуВКоординатахНажатия = мир =>
  37. {
  38. мир.ловецНажатий.setFromCamera(мир.позицияНажатия, мир.камера);
  39. var пересечения = мир.ловецНажатий.intersectObjects(мир.корень.children);
  40. if (пересечения.length)
  41. {
  42. var фишка = пересечения[0].object;
  43. var номер = номерФишки(мир.фишки, фишка.id);
  44. if (номер)
  45. {
  46. мир.номерВыбраннойФишки = номер;
  47. мир.номераВыбранныхФишек.push(номер);
  48. мир.уведомить("выбор фишки");
  49. }
  50. }
  51. };
  52. // // // //
  53. СоздатьМатериалыВыбранныхФишекОтладочнойТемы = мир =>
  54. {
  55. мир.материалыВыбранныхФишек = [];
  56. for (var номер in мир.материалыФишек)
  57. {
  58. var материал = мир.материалыФишек[номер].clone();
  59. материал.color = new THREE.Color(0xff0000);
  60. мир.материалыВыбранныхФишек.push(материал);
  61. }
  62. };
  63. // // // //
  64. ПодготовитьВыборФишек = мир =>
  65. {
  66. мир.номераВыбранныхФишек = [];
  67. };
  68. // // // //
  69. ЗадатьМатериалыФишкамПоГруппам = мир =>
  70. {
  71. for (var номер in мир.группыФишек)
  72. {
  73. var группа = мир.группыФишек[номер];
  74. var материал = мир.материалыФишек[группа];
  75. фишка = мир.фишки[номер];
  76. фишка.material = материал;
  77. }
  78. };
  79. // // // //
  80. СоздатьГруппыФишек = мир =>
  81. {
  82. мир.группыФишек = [];
  83. const позиции = мир.раскладкаKMahjongg.позиции;
  84. var группа = 0;
  85. for (var номер in позиции)
  86. {
  87. мир.группыФишек.push(группа);
  88. // Меняем группу каждую пару фишек.
  89. if (номер % 2 == 1)
  90. {
  91. ++группа;
  92. // Начинаем группы заново, как только они заканчиваются.
  93. if (группа >= 42)
  94. {
  95. группа = 0;
  96. }
  97. }
  98. }
  99. };
  100. // // // //
  101. СоздатьУзлыФишек = мир =>
  102. {
  103. var границы = мир.фишка.geometry.boundingBox;
  104. var размеры = [
  105. (границы.max.x - границы.min.x) / 2,
  106. (границы.max.z - границы.min.z) / 2,
  107. границы.max.y - границы.min.y,
  108. ];
  109. const позиции = мир.раскладкаKMahjongg.позиции;
  110. мир.фишки = [];
  111. for (var номер in позиции)
  112. {
  113. // Модель.
  114. var фишка = мир.фишка.clone();
  115. мир.фишки.push(фишка);
  116. мир.корень.add(фишка);
  117. // Расположение.
  118. var позиция = позиции[номер];
  119. var слой = позиция[0];
  120. var ряд = позиция[1];
  121. var столбец = позиция[2];
  122. фишка.position.x = столбец * размеры[0];
  123. фишка.position.z = ряд * размеры[1];
  124. фишка.position.y = слой;
  125. }
  126. };
  127. // // // //
  128. СоздатьМатериалыФишекОтладочнойТемы = мир =>
  129. {
  130. мир.материалыФишек = [];
  131. var тема = "отладочная|debug";
  132. for (var номер = 1; номер <= 42; ++номер)
  133. {
  134. var текстура = мир.текстурыТемФишек[тема][номер];
  135. var материал = new THREE.MeshLambertMaterial({map: текстура});
  136. мир.материалыФишек.push(материал);
  137. }
  138. };