МАОН первой серии
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.

324 lines
9.6KB

  1. const ТЕМА_ПО_УМОЛЧАНИЮ = "https://git.opengamestudio.org/MAOH/TEMA_M1K/raw/branch/master/0000";
  2. const РАСК_ПО_УМОЛЧАНИЮ = "https://git.opengamestudio.org/MAOH/PACK_M1/raw/branch/master/0000";
  3. const РАССТОЯНИЕ = 40;
  4. const КОЭФФИЦИЕНТ_ВЫСОТЫ = 1.5;
  5. // // // //
  6. ИспользоватьВыбраннуюРаскладку = мир =>
  7. {
  8. var э = мир.списокРаскладок[мир.номерВыбраннойРаскладкиМаджонга];
  9. мир.настройкиМаджонга["📍/📦"] = э[1];
  10. мир.настройкиМаджонга["📍/📁"] = э[0];
  11. мир.уведомить("изменили настройки маджонга");
  12. };
  13. // // // //
  14. ВывестиПоражение = мир =>
  15. {
  16. console.debug("ПОРАЖЕНИЕ");
  17. };
  18. // // // //
  19. ВывестиПобеду = мир =>
  20. {
  21. console.debug("ПОБЕДА");
  22. };
  23. // // // //
  24. ЗадатьФишкуДляВыбора = мир =>
  25. {
  26. var номер = мир.выбранныйУзел.userData;
  27. мир.фишкаМаджонгаДляВыбора = номер;
  28. }
  29. // // // //
  30. ПодготовитьФишкиКВыбору = мир =>
  31. {
  32. мир.выборныеУзлы = мир.фишкиСцены;
  33. };
  34. // // // //
  35. ПодготовитьсяКСозданиюФишек = мир =>
  36. {
  37. var настройки = мир.настройкиМаджонга;
  38. var м = мир.модули.модульПоУказателю(настройки["📍/📦"]);
  39. var содержимое = м.содержимое[настройки["📍/📁"]];
  40. var позиции = разобратьРаскладкуKMahjongg(содержимое);
  41. var фишки = [];
  42. var группа = 0;
  43. for (var номер in позиции)
  44. {
  45. var п = позиции[номер];
  46. фишки.push({
  47. "📍": [п[0], п[1], п[2]],
  48. "🚩": группа,
  49. });
  50. if (номер % 2)
  51. {
  52. ++группа;
  53. if (группа > 41)
  54. {
  55. группа = 0;
  56. }
  57. }
  58. };
  59. мир.фишкиМаджонга = фишки;
  60. мир.модельФишкиСцены = мир.полигональныеСетки[настройки["🀄/📦"]][настройки["🀄/📁"]];
  61. мир.сцена.add(мир.сценаМаджонга);
  62. };
  63. // // // //
  64. СоздатьФишки = мир =>
  65. {
  66. мир.уведомить("надо создать фишки");
  67. };
  68. // // // //
  69. СоздатьМатериалыФишек = мир =>
  70. {
  71. var настройки = мир.настройкиМаджонга;
  72. мир.материалыФишекСцены = [];
  73. мир.выбранныеМатериалыФишекСцены = [];
  74. var текстуры = мир.текстуры[настройки["🀄/📦"]];
  75. for (var имя in текстуры)
  76. {
  77. var текстура = текстуры[имя];
  78. var материал = new THREE.MeshLambertMaterial({
  79. map: текстура,
  80. color: new THREE.Color(0xCCCCCC),
  81. });
  82. мир.материалыФишекСцены.push(материал);
  83. var выбранныйМатериал = new THREE.MeshLambertMaterial({
  84. map: текстура,
  85. color: new THREE.Color(0xFFFFFF),
  86. });
  87. мир.выбранныеМатериалыФишекСцены.push(выбранныйМатериал);
  88. }
  89. };
  90. // // // //
  91. ПодготовитьсяКЗагрузкеРесурсов = мир =>
  92. {
  93. var настройки = мир.настройкиМаджонга;
  94. мир.полигональныеСетки = {
  95. [настройки["🀄/📦"]]: {
  96. [настройки["🀄/📁"]]: null,
  97. },
  98. };
  99. мир.текстуры = {
  100. [настройки["🀄/📦"]]: { },
  101. };
  102. var м = мир.модули.модульПоУказателю(настройки["🀄/📦"]);
  103. var файлы = Object.keys(м.структура).sort();
  104. var колво = 42;
  105. for (var номер = 0; номер < колво; ++номер)
  106. {
  107. var файл = файлы[номер];
  108. мир.текстуры[настройки["🀄/📦"]][файл] = null;
  109. }
  110. };
  111. // // // //
  112. ПроверитьНеобходимостьЗагрузкиРесурсов = мир =>
  113. {
  114. var настройки = мир.настройкиМаджонга;
  115. if (
  116. мир.полигональныеСетки &&
  117. настройки["🀄/📦"] in мир.полигональныеСетки &&
  118. настройки["🀄/📁"] in мир.полигональныеСетки[настройки["🀄/📦"]] &&
  119. мир.текстуры &&
  120. настройки["🀄/📦"] in мир.текстуры
  121. ) {
  122. мир.уведомить("ресурсы не нужно загружать");
  123. }
  124. else
  125. {
  126. мир.уведомить("ресурсы нужно загружать");
  127. }
  128. };
  129. // // // //
  130. ЗагрузитьМодулиРесурсов = мир =>
  131. {
  132. var указатели = мир.списокМодулейРесурсовДляЗагрузки;
  133. var сообщение = "Загрузка модулей ресурсов ⚬ 加载资源模块 ⚬ Loading resource modules";
  134. console.debug(сообщение, указатели);
  135. мир.модули.использовали.подписатьРаз(function() {
  136. мир.уведомить("загрузили модули ресурсов");
  137. });
  138. мир.модули.использовать(указатели);
  139. };
  140. // // // //
  141. ПроверитьНеобходимостьЗагрузкиМодулейРесурсов = мир =>
  142. {
  143. if (мир.списокМодулейРесурсовДляЗагрузки.length)
  144. {
  145. мир.уведомить("модули ресурсов нужно загружать");
  146. }
  147. else
  148. {
  149. мир.уведомить("модули ресурсов не нужно загружать");
  150. }
  151. }
  152. // // // //
  153. ПодготовитьСписокМодулейРесурсовДляЗагрузки = мир =>
  154. {
  155. var проверить = [
  156. мир.настройкиМаджонга["🀄/📦"],
  157. мир.настройкиМаджонга["📍/📦"],
  158. ];
  159. var загрузить = [];
  160. for (var н in проверить)
  161. {
  162. var указатель = проверить[н];
  163. var м = мир.модули.модульПоУказателю(указатель);
  164. // Модуль не загружен.
  165. if (!м.содержимое)
  166. {
  167. загрузить.push_back(указатель);
  168. }
  169. }
  170. мир.списокМодулейРесурсовДляЗагрузки = загрузить;
  171. };
  172. // // // //
  173. ПодготовитьПредставлениеСпискаРаскладок = мир =>
  174. {
  175. var список = мир.списокРаскладок;
  176. var названия = [];
  177. for (var н in список)
  178. {
  179. var файл = список[н][0];
  180. var название = файл
  181. .substring(1)
  182. .replace(".layout", "");
  183. названия.push(название);
  184. }
  185. мир.списокРаскладокМаджонга = названия;
  186. };
  187. // // // //
  188. ПодготовитьСписокРаскладок = мир =>
  189. {
  190. var раскладки = мир.реестрМаджонга["📍"];
  191. var список = [];
  192. var указатели = Object.keys(раскладки).sort();
  193. for (var н in указатели)
  194. {
  195. var указатель = указатели[н];
  196. var файлы = раскладки[указатель]["📁"];
  197. for (var номер in файлы)
  198. {
  199. var файл = файлы[номер];
  200. список.push([файл, указатель]);
  201. }
  202. }
  203. мир.списокРаскладок = список;
  204. };
  205. // // // //
  206. ЗадатьНастройкиМаджонгаПоУмолчанию = мир =>
  207. {
  208. var файлыТемы = мир.реестрМаджонга["🀄"][ТЕМА_ПО_УМОЛЧАНИЮ]["📁"];
  209. var файлыРаскладок = мир.реестрМаджонга["📍"][РАСК_ПО_УМОЛЧАНИЮ]["📁"];
  210. мир.настройкиМаджонга = {
  211. "🀄/📦": ТЕМА_ПО_УМОЛЧАНИЮ,
  212. "🀄/📁": файлыТемы[42],
  213. "📍/📦": РАСК_ПО_УМОЛЧАНИЮ,
  214. "📍/📁": файлыРаскладок[0],
  215. }
  216. мир.номерВыбраннойРаскладкиМаджонга = 0;
  217. мир.уведомить("изменили настройки маджонга");
  218. };
  219. // // // //
  220. СоздатьПримерСцены = мир =>
  221. {
  222. мир.сцена.background = new THREE.Color(0xFFFFFF);
  223. мир.камера.position.y = РАССТОЯНИЕ * КОЭФФИЦИЕНТ_ВЫСОТЫ;
  224. мир.камера.position.z = РАССТОЯНИЕ;
  225. мир.камера.lookAt(new THREE.Vector3(0, 0, 0));
  226. мир.свет = new THREE.DirectionalLight(0xFFFFFF, 1);
  227. мир.свет.position.set(-0.5, 1, 0.5).normalize();
  228. мир.сцена.add(мир.свет);
  229. };
  230. // // // //
  231. ПлавноУбратьСтраницуЗагрузкиИСкрытьКрутилку = мир =>
  232. {
  233. плавноСкрытьИУдалить("экран-загрузки", { "задержка": 0.4 });
  234. плавноСкрыть("крутилка", { "задержка": 0.4 });
  235. };