Сцена Маджонга | Mahjong scene
No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

220 líneas
4.7KB

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