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

446 lines
13KB

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