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

215 lines
4.6KB

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