Сцена Маджонга | Mahjong scene
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.

244 lines
5.2KB

  1. // // // //
  2. ВыбратьТемуФишекОтладочную = мир =>
  3. {
  4. мир.выбраннаяТема = "отладочная|debug";
  5. //мир.уведомить("выбрали тему");
  6. };
  7. // // // //
  8. ВыбратьРаскладкуX = мир =>
  9. {
  10. мир.выбраннаяРаскладка = "X_shaped";
  11. мир.уведомить("выбрали раскладку");
  12. };
  13. // // // //
  14. ИзменитьРазмерОтрисовщикаThreeJS = мир =>
  15. {
  16. var ширина = window.innerWidth * мир.масштаб;
  17. var высота = window.innerHeight * мир.масштаб;
  18. мир.камера.aspect = ширина / высота;
  19. мир.камера.updateProjectionMatrix();
  20. мир.отрисовщик.setSize(ширина, высота);
  21. var размер = мир.масштаб * 100;
  22. мир.канва.style = `
  23. max-width: ${размер}%;
  24. max-height: ${размер}%;
  25. width: ${размер}%;
  26. height: ${размер}%;
  27. `;
  28. };
  29. // // // //
  30. ЗадатьОтладочныйМасштаб = мир =>
  31. {
  32. мир.масштаб = 3;
  33. мир.уведомить("изменили масштаб");
  34. };
  35. // // // //
  36. ВключитьОтслеживаниеНажатий = мир =>
  37. {
  38. мир.отслеживатьНажатия = true;
  39. };
  40. // // // //
  41. ОтключитьОтслеживаниеНажатий = мир =>
  42. {
  43. мир.отслеживатьНажатия = false;
  44. };
  45. // // // //
  46. ИсправитьОтслеживаниеНажатийНаIOS = мир =>
  47. {
  48. // https://stackoverflow.com/a/31459240/3404710
  49. мир.отрисовщик.domElement.style.cursor = "pointer";
  50. };
  51. // // // //
  52. ПодготовитьсяКОтслеживаниюНажатий = мир =>
  53. {
  54. мир.отслеживатьНажатия = false;
  55. // Палец.
  56. window.addEventListener(
  57. "touchstart",
  58. function(событие) {
  59. сообщитьОНажатии(мир, событие.touches[0]);
  60. }
  61. );
  62. // Мышь.
  63. window.addEventListener(
  64. "click",
  65. function(событие) {
  66. сообщитьОНажатии(мир, событие);
  67. }
  68. );
  69. };
  70. // // // //
  71. ЦентрироватьСцену = мир =>
  72. {
  73. var мин = {
  74. "x": 0,
  75. "z": 0,
  76. };
  77. var макс = {
  78. "x": 0,
  79. "z": 0,
  80. };
  81. for (var номер in мир.фишки)
  82. {
  83. const фишка = мир.фишки[номер];
  84. if (фишка.position.x < мин.x)
  85. {
  86. мин.x = фишка.position.x;
  87. }
  88. if (фишка.position.x > макс.x)
  89. {
  90. макс.x = фишка.position.x;
  91. }
  92. if (фишка.position.z < мин.z)
  93. {
  94. мин.z = фишка.position.z;
  95. }
  96. if (фишка.position.z > макс.z)
  97. {
  98. макс.z = фишка.position.z;
  99. }
  100. }
  101. мир.корень.position.x -= (макс.x - мин.x) / 2;
  102. мир.корень.position.z -= (макс.z - мин.z) / 2;
  103. };
  104. // // // //
  105. РазобратьРаскладкуKMahjongg = мир =>
  106. {
  107. мир.раскладкаKMahjongg.позиции = разобратьРаскладкуKMahjongg(мир.раскладкаKMahjongg.содержимое);
  108. };
  109. // // // //
  110. ЗагрузитьРесурсыСцены = мир =>
  111. {
  112. мир.уведомить("надо загрузить ресурсы сцены");
  113. };
  114. // // // //
  115. ПодготовитьСцену = мир =>
  116. {
  117. var коэффициент = 2;
  118. var расстояние = 14;
  119. мир.камера.position.y = расстояние * коэффициент;
  120. мир.камера.position.z = расстояние;
  121. мир.камера.lookAt(new THREE.Vector3(0, 0, 0));
  122. мир.свет = new THREE.DirectionalLight(0xffffff, 1);
  123. мир.свет.position.set(-0.5, 1, 0.5).normalize();
  124. мир.сцена.add(мир.свет);
  125. };
  126. // // // //
  127. СоздатьЗагрузчикТекстур = мир =>
  128. {
  129. мир.загрузчикТекстур = new THREE.TextureLoader();
  130. };
  131. // // // //
  132. СоздатьЗагрузчикGLTF = мир =>
  133. {
  134. мир.загрузчикGLTF = new THREE.GLTFLoader();
  135. };
  136. // // // //
  137. НастроитьThreeJS = мир =>
  138. {
  139. мир.сцена = new THREE.Scene();
  140. мир.сцена.background = new THREE.Color(0xFFFFFF);
  141. мир.камера = new THREE.PerspectiveCamera(45, 1, 0.1, 1000);
  142. мир.ловецНажатий = new THREE.Raycaster();
  143. мир.отрисовщик = new THREE.WebGLRenderer({canvas: мир.канва, antialias: true});
  144. };
  145. // // // //
  146. СоздатьКанвуThreeJS = мир =>
  147. {
  148. мир.канва = document.createElement("canvas");
  149. мир.канва.id = "канва-threejs";
  150. мир.канва.style = `
  151. position: absolute;
  152. left: 0;
  153. top: 0;
  154. width: 100%;
  155. height: 100%;
  156. `;
  157. var первый = document.body.firstChild;
  158. if (первый)
  159. {
  160. document.body.insertBefore(мир.канва, первый);
  161. }
  162. else
  163. {
  164. document.body.appendChild(мир.канва);
  165. }
  166. };
  167. // // // //
  168. СоздатьМасштаб = мир =>
  169. {
  170. мир.масштаб = 1;
  171. };