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

242 lines
7.2KB

  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. console.debug("ПОРАЖЕНИЕ");
  9. };
  10. // // // //
  11. ВывестиПобеду = мир =>
  12. {
  13. console.debug("ПОБЕДА");
  14. };
  15. // // // //
  16. ЗадатьФишкуДляВыбора = мир =>
  17. {
  18. var номер = мир.выбранныйУзел.userData;
  19. мир.фишкаМаджонгаДляВыбора = номер;
  20. }
  21. // // // //
  22. ПодготовитьФишкиКВыбору = мир =>
  23. {
  24. мир.выборныеУзлы = мир.фишкиСцены;
  25. };
  26. // // // //
  27. ПодготовитьсяКСозданиюФишек = мир =>
  28. {
  29. var настройки = мир.настройкиМаджонга;
  30. var м = мир.модули.модульПоУказателю(настройки["📍/📦"]);
  31. var содержимое = м.содержимое[настройки["📍/📁"]];
  32. var позиции = разобратьРаскладкуKMahjongg(содержимое);
  33. var фишки = [];
  34. var группа = 0;
  35. for (var номер in позиции)
  36. {
  37. var п = позиции[номер];
  38. фишки.push({
  39. "📍": [п[0], п[1], п[2]],
  40. "🚩": группа,
  41. });
  42. if (номер % 2)
  43. {
  44. ++группа;
  45. if (группа > 41)
  46. {
  47. группа = 0;
  48. }
  49. }
  50. };
  51. мир.фишкиМаджонга = фишки;
  52. мир.модельФишкиСцены = мир.полигональныеСетки[настройки["🀄/📦"]][настройки["🀄/📁"]];
  53. мир.сцена.add(мир.сценаМаджонга);
  54. };
  55. // // // //
  56. СоздатьМатериалыФишек = мир =>
  57. {
  58. var настройки = мир.настройкиМаджонга;
  59. мир.материалыФишекСцены = [];
  60. мир.выбранныеМатериалыФишекСцены = [];
  61. var текстуры = мир.текстуры[настройки["🀄/📦"]];
  62. for (var имя in текстуры)
  63. {
  64. var текстура = текстуры[имя];
  65. var материал = new THREE.MeshLambertMaterial({
  66. map: текстура,
  67. color: new THREE.Color(0xCCCCCC),
  68. });
  69. мир.материалыФишекСцены.push(материал);
  70. var выбранныйМатериал = new THREE.MeshLambertMaterial({
  71. map: текстура,
  72. color: new THREE.Color(0xFFFFFF),
  73. });
  74. мир.выбранныеМатериалыФишекСцены.push(выбранныйМатериал);
  75. }
  76. };
  77. // // // //
  78. ПодготовитьсяКЗагрузкеРесурсов = мир =>
  79. {
  80. var настройки = мир.настройкиМаджонга;
  81. мир.полигональныеСетки = {
  82. [настройки["🀄/📦"]]: {
  83. [настройки["🀄/📁"]]: null,
  84. },
  85. };
  86. мир.текстуры = {
  87. [настройки["🀄/📦"]]: { },
  88. };
  89. var м = мир.модули.модульПоУказателю(настройки["🀄/📦"]);
  90. var файлы = Object.keys(м.структура).sort();
  91. var колво = 42;
  92. for (var номер = 0; номер < колво; ++номер)
  93. {
  94. var файл = файлы[номер];
  95. мир.текстуры[настройки["🀄/📦"]][файл] = null;
  96. }
  97. };
  98. // // // //
  99. ЗагрузитьМодулиРесурсов = мир =>
  100. {
  101. var настройки = мир.настройкиМаджонга;
  102. var указатели = [
  103. настройки["🀄/📦"],
  104. настройки["📍/📦"],
  105. ];
  106. var сообщение = "Загрузка модулей ресурсов ⚬ 加载资源模块 ⚬ Loading resource modules";
  107. console.debug(сообщение, указатели);
  108. мир.модули.использовали.подписатьРаз(function() {
  109. мир.уведомить("загрузили модули ресурсов");
  110. });
  111. мир.модули.использовать(указатели);
  112. };
  113. // // // //
  114. ПодготовитьПредставлениеСпискаРаскладок = мир =>
  115. {
  116. var список = мир.списокРаскладок;
  117. var номераНазвания = [];
  118. for (var н in список)
  119. {
  120. var номер = Number(н) + 1;
  121. var файл = список[н][0];
  122. var название = файл
  123. .substring(1)
  124. .replace(".layout", "");
  125. номераНазвания.push([номер, название]);
  126. }
  127. мир.списокРаскладокМаджонга = номераНазвания;
  128. };
  129. // // // //
  130. ПодготовитьСписокРаскладок = мир =>
  131. {
  132. var раскладки = мир.реестрМаджонга["📍"];
  133. var список = [];
  134. var указатели = Object.keys(раскладки).sort();
  135. for (var н in указатели)
  136. {
  137. var указатель = указатели[н];
  138. var файлы = раскладки[указатель]["📁"];
  139. for (var номер in файлы)
  140. {
  141. var файл = файлы[номер];
  142. список.push([файл, указатель]);
  143. }
  144. }
  145. мир.списокРаскладок = список;
  146. };
  147. // // // //
  148. ЗадатьНастройкиМаджонгаПоУмолчанию = мир =>
  149. {
  150. var файлыТемы = мир.реестрМаджонга["🀄"][ТЕМА_ПО_УМОЛЧАНИЮ]["📁"];
  151. var файлыРаскладок = мир.реестрМаджонга["📍"][РАСК_ПО_УМОЛЧАНИЮ]["📁"];
  152. мир.настройкиМаджонга = {
  153. "🀄/📦": ТЕМА_ПО_УМОЛЧАНИЮ,
  154. "🀄/📁": файлыТемы[42],
  155. "📍/📦": РАСК_ПО_УМОЛЧАНИЮ,
  156. "📍/📁": файлыРаскладок[0],
  157. }
  158. мир.уведомить("изменили настройки маджонга");
  159. };
  160. // // // //
  161. СоздатьПримерСцены = мир =>
  162. {
  163. мир.сцена.background = new THREE.Color(0xFFFFFF);
  164. мир.камера.position.y = РАССТОЯНИЕ * КОЭФФИЦИЕНТ_ВЫСОТЫ;
  165. мир.камера.position.z = РАССТОЯНИЕ;
  166. мир.камера.lookAt(new THREE.Vector3(0, 0, 0));
  167. мир.свет = new THREE.DirectionalLight(0xFFFFFF, 1);
  168. мир.свет.position.set(-0.5, 1, 0.5).normalize();
  169. мир.сцена.add(мир.свет);
  170. };
  171. // // // //
  172. ПлавноУбратьСтраницуЗагрузкиИСкрытьКрутилку = мир =>
  173. {
  174. плавноСкрытьИУдалить("экран-загрузки", { "задержка": 0.4 });
  175. плавноСкрыть("крутилка", { "задержка": 0.4 });
  176. };