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

234 lines
5.0KB

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