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

255 lines
7.6KB

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