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

163 lines
4.7KB

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