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

400 lines
12KB

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