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.

206 lines
5.5KB

  1. const РЕСУРСЫ = "https://git.opengamestudio.org/PuCOBATEJlb/PECYPCbl/raw/branch/master/0000";
  2. const ФИШКА = "/фишка.gltf";
  3. const ТЕМА_ОТЛАДОЧНАЯ = "https://git.opengamestudio.org/MAOH/MAOH_TEMA_OTAK/raw/branch/master/0000";
  4. // // // //
  5. СкрытьУбранныеФишки = мир =>
  6. {
  7. for (var номер in мир.убранныеФишкиМаджонга)
  8. {
  9. var н = мир.убранныеФишкиМаджонга[номер];
  10. // Перемещаем фишку на другой слой для исключения её из отрисовки и выбора.
  11. var ф = мир.фишки[н];
  12. ф.layers.set(1);
  13. }
  14. }
  15. // // // //
  16. ЗадатьФишкуДляВыбора = мир =>
  17. {
  18. var номер = мир.выбранныйУзел.userData;
  19. мир.фишкаМаджонгаДляВыбора = номер;
  20. }
  21. // // // //
  22. ПодготовитьФишкиКВыбору = мир =>
  23. {
  24. мир.выборныеУзлы = мир.фишки;
  25. мир.задержкаОтображенияВыбранныхФишек = 0;
  26. };
  27. // // // //
  28. ВыделитьВыбранныеФишки = мир =>
  29. {
  30. for (var номер in мир.выбранныеФишкиМаджонга)
  31. {
  32. var н = мир.выбранныеФишкиМаджонга[номер];
  33. var ф = мир.фишки[н];
  34. var г = мир.фишкиМаджонга[н]["🚩"];
  35. var м = мир.выбранныеМатериалы[г];
  36. ф.material = м;
  37. }
  38. };
  39. // // // //
  40. ЗадатьМатериалыФишкам = мир =>
  41. {
  42. for (var н in мир.фишки)
  43. {
  44. var ф = мир.фишки[н];
  45. var г = мир.фишкиМаджонга[н]["🚩"];
  46. var м = мир.материалы[г];
  47. ф.material = м;
  48. }
  49. };
  50. // // // //
  51. СоздатьФишки = мир =>
  52. {
  53. var фишка = мир.полигональныеСетки[РЕСУРСЫ][ФИШКА];
  54. var границы = фишка.geometry.boundingBox;
  55. var размеры = [
  56. (границы.max.x - границы.min.x) / 2,
  57. (границы.max.z - границы.min.z) / 2,
  58. //границы.max.y - границы.min.y,
  59. ];
  60. var отступ = 0.02;
  61. мир.фишки = [];
  62. for (var номер in мир.фишкиМаджонга)
  63. {
  64. // Узел сцены.
  65. var фм = мир.фишкиМаджонга[номер];
  66. var ф = фишка.clone();
  67. ф.userData = номер;
  68. мир.фишки.push(ф);
  69. мир.сцена.add(ф);
  70. // Расположение.
  71. var позиция = фм["📍"];
  72. /*
  73. var слой = позиция[0];
  74. var ряд = позиция[1];
  75. var столбец = позиция[2];
  76. */
  77. var слой = 0;
  78. var ряд = позиция[0];
  79. var столбец = позиция[1];
  80. ф.position.x = столбец * (размеры[0] + отступ);
  81. ф.position.z = ряд * (размеры[1] + отступ);
  82. ф.position.y = слой;
  83. }
  84. };
  85. // // // //
  86. ЗадатьФишки = мир =>
  87. {
  88. мир.фишкиМаджонга = [
  89. {
  90. "📍": [0, 0],
  91. "🚩": 0,
  92. },
  93. {
  94. "📍": [2, 0],
  95. "🚩": 0,
  96. },
  97. {
  98. "📍": [0, 2],
  99. "🚩": 1,
  100. },
  101. ];
  102. };
  103. // // // //
  104. СоздатьПримерСцены = мир =>
  105. {
  106. мир.сцена.background = new THREE.Color(0xFFFFFF);
  107. мир.камера.position.y = 10;
  108. мир.камера.position.z = 5;
  109. мир.камера.lookAt(new THREE.Vector3(0, 0, 0));
  110. мир.свет = new THREE.DirectionalLight(0xFFFFFF, 1);
  111. мир.свет.position.set(-0.5, 1, 0.5).normalize();
  112. мир.сцена.add(мир.свет);
  113. };
  114. // // // //
  115. СоздатьМатериалыФишек = мир =>
  116. {
  117. мир.материалы = [];
  118. мир.выбранныеМатериалы = [];
  119. var текстуры = мир.текстуры[ТЕМА_ОТЛАДОЧНАЯ];
  120. for (var имя in текстуры)
  121. {
  122. var текстура = текстуры[имя];
  123. var материал = new THREE.MeshLambertMaterial({
  124. map: текстура,
  125. color: new THREE.Color(0xAAAAAA),
  126. });
  127. мир.материалы.push(материал);
  128. var выбранныйМатериал = new THREE.MeshLambertMaterial({
  129. map: текстура,
  130. color: new THREE.Color(0xFFFFFF),
  131. });
  132. мир.выбранныеМатериалы.push(выбранныйМатериал);
  133. }
  134. };
  135. // // // //
  136. ПодготовитьсяКЗагрузкеРесурсов = мир =>
  137. {
  138. мир.полигональныеСетки = {
  139. [РЕСУРСЫ]: {
  140. [ФИШКА]: null,
  141. },
  142. };
  143. мир.текстуры = {
  144. [ТЕМА_ОТЛАДОЧНАЯ]: { },
  145. };
  146. var м = мир.модули.модульПоУказателю(ТЕМА_ОТЛАДОЧНАЯ);
  147. var файлы = Object.keys(м.структура).sort();
  148. for (var номер in файлы)
  149. {
  150. var файл = файлы[номер];
  151. мир.текстуры[ТЕМА_ОТЛАДОЧНАЯ][файл] = null;
  152. }
  153. };
  154. // // // //
  155. СкрытьКрутилку = мир =>
  156. {
  157. document.getElementById("крутилка").style.display = "none";
  158. };