Проверить Matter.js
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.

136 lines
3.8KB

  1. мир.столкновения = {
  2. задано: {},
  3. };
  4. // // // //
  5. мир.ключники.push(function(ключ, путь, значение){
  6. if (!путь[0].startsWith("столкновения"))
  7. {
  8. return;
  9. }
  10. var действие = путь[1];
  11. var объект = путь.slice(2).join(".");
  12. if (!мир.столкновения.задано[действие])
  13. {
  14. мир.столкновения.задано[действие] = {};
  15. }
  16. мир.столкновения.задано[действие][объект] = значение;
  17. });
  18. // // // //
  19. мир.столкновения.создать = function()
  20. {
  21. Matter.Events.on(мир.физика.движок, "collisionActive", мир.столкновения.обработать);
  22. };
  23. // // // //
  24. мир.столкновения.обработать = function(событие)
  25. {
  26. var за = мир.столкновения.задано;
  27. var вывод = "";
  28. for (var действие in за)
  29. {
  30. var имя1 = за[действие]["0"];
  31. var имя2 = за[действие]["1"];
  32. if (!имя1 || !имя2)
  33. {
  34. continue;
  35. }
  36. var пары = событие.pairs;
  37. for (var номер in пары)
  38. {
  39. var пара = пары[номер];
  40. var п1 = мир.объекты.имена[пара.bodyA.id];
  41. var п2 = мир.объекты.имена[пара.bodyB.id];
  42. if (
  43. !((имя1 == п1) && (имя2 == п2)) &&
  44. !((имя1 == п2) && (имя2 == п1))
  45. ) {
  46. continue;
  47. }
  48. вывод += `${имя1} x ${имя2}, `;
  49. console.debug("столкновение ожидаемых объектов", пара.bodyA.id, пара.bodyB.id);
  50. }
  51. }
  52. document.getElementById("отладка").innerHTML = вывод;
  53. };
  54. // // // //
  55. /*
  56. мир.слежение.элемент = function(задано)
  57. {
  58. var id = null;
  59. var изображение = задано["изображение"];
  60. if (изображение)
  61. {
  62. id = мир.изображения.элементы[изображение].id;
  63. }
  64. return document.getElementById(id);
  65. };
  66. // // // //
  67. мир.слежение.обновитьЭлемент = function(элемент, тело, задано, умолчание, формула)
  68. {
  69. if (!элемент || !тело)
  70. {
  71. return;
  72. }
  73. var скорость = задано.скорость ? задано.скорость : умолчание.скорость;
  74. var смещениеX = задано["смещение.0"] ? задано["смещение.0"] : умолчание.смещение[0];
  75. var смещениеY = задано["смещение.1"] ? задано["смещение.1"] : умолчание.смещение[1];
  76. // Сейчас.
  77. var x0 = 0;
  78. if (элемент.style.left.endsWith("px"))
  79. {
  80. x0 = элемент.style.left.slice(0, -2);
  81. }
  82. var y0 = 0;
  83. if (элемент.style.top.endsWith("px"))
  84. {
  85. y0 = элемент.style.top.slice(0, -2);
  86. }
  87. // Цель.
  88. var x1 = тело.position.x + смещениеX;
  89. var y1 = тело.position.y + смещениеY;
  90. // Более точная настройка.
  91. // Сейчас лишь для камеры.
  92. if (формула)
  93. {
  94. var итог = формула(x1, y1);
  95. x1 = итог[0];
  96. y1 = итог[1];
  97. }
  98. // Плавно.
  99. function lerp(v0, v1, t) {
  100. return v0 * (1 - t) + v1 * t;
  101. }
  102. var x = lerp(x0, x1, скорость);
  103. var y = lerp(y0, y1, скорость);
  104. элемент.style.left = `${x}px`;
  105. элемент.style.top = `${y}px`;
  106. };
  107. */