Основа Маджонга | Mahjong's base
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.

сцена|scene.js 5.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. const ИМЯ = "ОМ | MB";
  2. const ИМЯ_МОДУЛЯ_РЕСУРСОВ = "Ресурсы Маджонга | Mahjong resources";
  3. // // // //
  4. ЦентрироватьСцену = мир =>
  5. {
  6. // мир.корень.position
  7. };
  8. // // // //
  9. ОтобразитьРаскладкуОднойФишкой = мир =>
  10. {
  11. var границы = мир.фишка.geometry.boundingBox;
  12. var размеры = [
  13. (границы.max.x - границы.min.x) / 2,
  14. (границы.max.z - границы.min.z) / 2,
  15. границы.max.y - границы.min.y,
  16. ];
  17. const позиции = мир.раскладкаKMahjongg.позиции;
  18. мир.фишки = [];
  19. for (var номер in позиции)
  20. {
  21. var фишка = мир.фишка.clone();
  22. мир.фишки.push(фишка);
  23. мир.корень.add(фишка);
  24. var позиция = позиции[номер];
  25. var слой = позиция[0];
  26. var ряд = позиция[1];
  27. var столбец = позиция[2];
  28. фишка.position.x = столбец * размеры[0];
  29. фишка.position.z = ряд * размеры[1];
  30. фишка.position.y = слой;
  31. }
  32. };
  33. // // // //
  34. ЗагрузитьРаскладку = мир =>
  35. {
  36. var модуль = мир.модули.модульПоИмени(ИМЯ_МОДУЛЯ_РЕСУРСОВ);
  37. //var ресурс = "/cat.layout";
  38. var ресурс = "/X_shaped.layout";
  39. var содержимое = модуль.содержимое[ресурс];
  40. мир.раскладкаKMahjongg = {
  41. "содержимое": содержимое,
  42. };
  43. };
  44. // // // //
  45. ПовернутьФишку = мир =>
  46. {
  47. мир.фишка.rotation.x += 0.03;
  48. мир.фишка.rotation.y += 0.02;
  49. };
  50. // // // //
  51. Отладка = мир =>
  52. {
  53. console.debug("Отладка", Date());
  54. };
  55. // // // //
  56. ЗапуститьТаймерПоворотаФишки = мир =>
  57. {
  58. setInterval(
  59. function() {
  60. мир.уведомить("поворот фишки");
  61. },
  62. 60
  63. );
  64. };
  65. // // // //
  66. ПодготовитьСцену = мир =>
  67. {
  68. var коэффициент = 2;
  69. var расстояние = 20;
  70. мир.камера.position.y = расстояние * коэффициент;
  71. мир.камера.position.z = расстояние;
  72. мир.камера.lookAt(new THREE.Vector3(0, 0, 0));
  73. мир.свет = new THREE.DirectionalLight(0xffffff, 1);
  74. мир.свет.position.set(-0.5, 1, 0.5).normalize();
  75. мир.сцена.add(мир.свет);
  76. мир.корень = new THREE.Group();
  77. мир.сцена.add(мир.корень);
  78. };
  79. // // // //
  80. ПодготовитьФишку = мир =>
  81. {
  82. var материал = new THREE.MeshLambertMaterial({map: мир.текстураФишки});
  83. мир.фишка.material = материал;
  84. };
  85. // // // //
  86. ЗагрузитьТекстуруФишкиИзМодуля = мир =>
  87. {
  88. var модуль = мир.модули.модульПоИмени(ИМЯ_МОДУЛЯ_РЕСУРСОВ);
  89. var ресурс = "/текстура.png";
  90. var содержимое = модуль.содержимое[ресурс];
  91. var b64 = base64js.fromByteArray(new Uint8Array(содержимое));
  92. var адрес = `data:image/png;base64,${b64}`;
  93. мир.загрузчикТекстур.load(
  94. адрес,
  95. function(текстура) {
  96. мир.текстураФишки = текстура;
  97. мир.текстураФишки.flipY = false;
  98. мир.уведомить("загрузили текстуру фишки из модуля");
  99. },
  100. null,
  101. function(error) {
  102. console.error("ОШИБКА | ERROR", error);
  103. }
  104. );
  105. };
  106. // // // //
  107. СоздатьЗагрузчикТекстур = мир =>
  108. {
  109. мир.загрузчикТекстур = new THREE.TextureLoader();
  110. };
  111. // // // //
  112. ЗагрузитьФишку = мир =>
  113. {
  114. var модуль = мир.модули.модульПоИмени(ИМЯ_МОДУЛЯ_РЕСУРСОВ);
  115. var ресурс = "/фишка.gltf";
  116. var адрес = `${window.location.origin}${ресурс}`;
  117. THREE.Cache.enabled = true;
  118. THREE.Cache.add(адрес, модуль.содержимое[ресурс]);
  119. мир.загрузчикGLTF.load(
  120. адрес,
  121. function(gltf) {
  122. // Вычленяем Mesh.
  123. gltf.scene.traverse(function(ребёнок) {
  124. if (ребёнок.isMesh)
  125. {
  126. мир.фишка = ребёнок;
  127. }
  128. });
  129. мир.уведомить("загрузили фишку");
  130. },
  131. null,
  132. function(error) {
  133. console.error("ОШИБКА | ERROR", error);
  134. }
  135. );
  136. };
  137. // // // //
  138. СоздатьЗагрузчикGLTF = мир =>
  139. {
  140. мир.загрузчикGLTF = new THREE.GLTFLoader();
  141. };