25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

227 lines
5.9KB

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