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

113 lines
3.4KB

  1. СоздатьОтладочнуюСферуВЦентреКорня = мир =>
  2. {
  3. var форма = new THREE.SphereBufferGeometry(0.5, 32, 32);
  4. var сфера = new THREE.Mesh(форма);
  5. сфера.material = new THREE.MeshLambertMaterial({ color: 0xAA00AA });
  6. мир.кореньСценыМаджонга.add(сфера);
  7. };
  8. // // // //
  9. ЦентрироватьФишкиСцены = мир =>
  10. {
  11. var мин = {
  12. "x": 1000000,
  13. "z": 1000000,
  14. };
  15. var макс = {
  16. "x": 0,
  17. "z": 0,
  18. };
  19. for (var номер in мир.фишкиСцены)
  20. {
  21. const ф = мир.фишкиСцены[номер];
  22. if (ф.position.x < мин.x)
  23. {
  24. мин.x = ф.position.x;
  25. }
  26. if (ф.position.x > макс.x)
  27. {
  28. макс.x = ф.position.x;
  29. }
  30. if (ф.position.z < мин.z)
  31. {
  32. мин.z = ф.position.z;
  33. }
  34. if (ф.position.z > макс.z)
  35. {
  36. макс.z = ф.position.z;
  37. }
  38. }
  39. // Убираем пустоту слева.
  40. мир.кореньСценыМаджонга.position.x -= мин.x;
  41. мир.кореньСценыМаджонга.position.z -= мин.z;
  42. // Центрируем остаток.
  43. мир.кореньСценыМаджонга.position.x -= (макс.x - мин.x) / 2;
  44. мир.кореньСценыМаджонга.position.z -= (макс.z - мин.z) / 2;
  45. };
  46. // // // //
  47. ЗадатьМатериалыФишкамСцены = мир =>
  48. {
  49. for (var н in мир.фишкиСцены)
  50. {
  51. var ф = мир.фишкиСцены[н];
  52. var г = мир.фишкиМаджонга[н]["🚩"];
  53. var м = мир.материалыФишекСцены[г];
  54. ф.material = м;
  55. }
  56. };
  57. // // // //
  58. УбратьСтарыеФишкиСцены = мир =>
  59. {
  60. if (мир.сценаМаджонга.children.length)
  61. {
  62. мир.сценаМаджонга.remove(мир.кореньСценыМаджонга);
  63. }
  64. мир.кореньСценыМаджонга = new THREE.Group();
  65. мир.сценаМаджонга.add(мир.кореньСценыМаджонга);
  66. мир.фишкиСцены = [];
  67. };
  68. // // // //
  69. СоздатьНовыеФишкиСцены = мир =>
  70. {
  71. var фишка = мир.модельФишкиСцены;
  72. var границы = фишка.geometry.boundingBox;
  73. var размеры = [
  74. (границы.max.x - границы.min.x) / 2,
  75. (границы.max.z - границы.min.z) / 2,
  76. (границы.max.y - границы.min.y),
  77. ];
  78. var отступ = мир.отступМеждуФишкамиСцены;
  79. for (var номер in мир.фишкиМаджонга)
  80. {
  81. // Узел сцены.
  82. var фм = мир.фишкиМаджонга[номер];
  83. var ф = фишка.clone();
  84. ф.userData = номер;
  85. мир.фишкиСцены.push(ф);
  86. мир.кореньСценыМаджонга.add(ф);
  87. // Расположение.
  88. var п = фм["📍"];
  89. var слой = п[0];
  90. var ряд = п[1];
  91. var столбец = п[2];
  92. ф.position.x = столбец * (размеры[0] + отступ);
  93. ф.position.z = ряд * (размеры[1] + отступ);
  94. ф.position.y = слой * (размеры[2] + отступ);
  95. }
  96. };