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

354 lines
11KB

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