Сцена Маджонга | Mahjong scene
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

231 lignes
4.9KB

  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. /*
  119. ВстроитьОтрисовщикаThreeJS = мир =>
  120. {
  121. // Задать вид.
  122. var css = `
  123. html, body {
  124. margin: 0;
  125. }
  126. `;
  127. var вид = document.createElement("style");
  128. вид.innerHTML = css;
  129. document.head.appendChild(вид);
  130. document.body.appendChild(мир.отрисовщик.domElement);
  131. };
  132. */
  133. // // // //
  134. НастроитьThreeJS = мир =>
  135. {
  136. мир.сцена = new THREE.Scene();
  137. мир.сцена.background = new THREE.Color(0xFFFFFF);
  138. мир.камера = new THREE.PerspectiveCamera(45, 1, 0.1, 1000);
  139. мир.ловецНажатий = new THREE.Raycaster();
  140. мир.отрисовщик = new THREE.WebGLRenderer({canvas: мир.канва, antialias: true});
  141. };
  142. // // // //
  143. СоздатьКанвуThreeJS = мир =>
  144. {
  145. мир.канва = document.createElement("canvas");
  146. мир.канва.id = "канва-threejs";
  147. мир.канва.style = `
  148. position: absolute;
  149. left: 0;
  150. top: 0;
  151. width: 100%;
  152. height: 100%;
  153. `;
  154. var первый = document.body.firstChild;
  155. if (первый)
  156. {
  157. document.body.insertBefore(мир.канва, первый);
  158. }
  159. else
  160. {
  161. document.body.appendChild(мир.канва);
  162. }
  163. };
  164. // // // //
  165. СоздатьМасштаб = мир =>
  166. {
  167. мир.масштаб = 1;
  168. };