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

374 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. var список = [];
  181. var указатели = Object.keys(темы).sort();
  182. for (var н in указатели)
  183. {
  184. var указатель = указатели[н];
  185. var м = мир.модули.модульПоУказателю(указатель);
  186. список.push([м.имя, указатель]);
  187. }
  188. мир.списокТем = список;
  189. };
  190. // // // //
  191. ПодготовитьСписокМодулейРесурсовДляЗагрузки = мир =>
  192. {
  193. var проверить = [
  194. мир.настройкиМаджонга["🀄/📦"],
  195. мир.настройкиМаджонга["📍/📦"],
  196. ];
  197. var загрузить = [];
  198. for (var н in проверить)
  199. {
  200. var указатель = проверить[н];
  201. var м = мир.модули.модульПоУказателю(указатель);
  202. // Модуль не загружен.
  203. if (!м.содержимое)
  204. {
  205. загрузить.push_back(указатель);
  206. }
  207. }
  208. мир.списокМодулейРесурсовДляЗагрузки = загрузить;
  209. };
  210. // // // //
  211. ПодготовитьПредставлениеСпискаРаскладок = мир =>
  212. {
  213. var список = мир.списокРаскладок;
  214. var названия = [];
  215. for (var н in список)
  216. {
  217. var файл = список[н][0];
  218. var название = файл
  219. .substring(1)
  220. .replace(".layout", "");
  221. названия.push(название);
  222. }
  223. мир.списокРаскладокМаджонга = названия;
  224. };
  225. // // // //
  226. ПодготовитьСписокРаскладок = мир =>
  227. {
  228. var раскладки = мир.реестрМаджонга["📍"];
  229. var список = [];
  230. var указатели = Object.keys(раскладки).sort();
  231. for (var н in указатели)
  232. {
  233. var указатель = указатели[н];
  234. var файлы = раскладки[указатель]["📁"];
  235. for (var номер in файлы)
  236. {
  237. var файл = файлы[номер];
  238. список.push([файл, указатель]);
  239. }
  240. }
  241. мир.списокРаскладок = список;
  242. };
  243. // // // //
  244. ЗадатьНастройкиМаджонгаПоУмолчанию = мир =>
  245. {
  246. var файлыТемы = мир.реестрМаджонга["🀄"][ТЕМА_ПО_УМОЛЧАНИЮ]["📁"];
  247. var файлыРаскладок = мир.реестрМаджонга["📍"][РАСК_ПО_УМОЛЧАНИЮ]["📁"];
  248. мир.настройкиМаджонга = {
  249. "🀄/📦": ТЕМА_ПО_УМОЛЧАНИЮ,
  250. "🀄/📁": файлыТемы[42],
  251. "📍/📦": РАСК_ПО_УМОЛЧАНИЮ,
  252. "📍/📁": файлыРаскладок[0],
  253. }
  254. мир.номерВыбраннойРаскладкиМаджонга = 0;
  255. мир.уведомить("изменили настройки маджонга");
  256. };
  257. // // // //
  258. СоздатьПримерСцены = мир =>
  259. {
  260. мир.сцена.background = new THREE.Color(0xFFFFFF);
  261. мир.камера.position.y = РАССТОЯНИЕ * КОЭФФИЦИЕНТ_ВЫСОТЫ;
  262. мир.камера.position.z = РАССТОЯНИЕ;
  263. мир.камера.lookAt(new THREE.Vector3(0, 0, 0));
  264. мир.свет = new THREE.DirectionalLight(0xFFFFFF, 1);
  265. мир.свет.position.set(-0.5, 1, 0.5).normalize();
  266. мир.сцена.add(мир.свет);
  267. };
  268. // // // //
  269. ПлавноУбратьСтраницуЗагрузкиИСкрытьКрутилку = мир =>
  270. {
  271. плавноСкрытьИУдалить("экран-загрузки", { "задержка": 0.4 });
  272. плавноСкрыть("крутилка", { "задержка": 0.4 });
  273. };