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.

228 lines
6.0KB

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