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

213 lines
4.5KB

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