Проверить Matter.js
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

74 рядки
2.0KB

  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 ст = за[имя];
  31. var имя1 = ст["объекты.0"];
  32. var имя2 = ст["объекты.1"];
  33. if (!имя1 || !имя2 || !ст.действие)
  34. {
  35. continue;
  36. }
  37. var пары = событие.pairs;
  38. for (var номер in пары)
  39. {
  40. var пара = пары[номер];
  41. var п1 = мир.объекты.имена[пара.bodyA.id];
  42. var п2 = мир.объекты.имена[пара.bodyB.id];
  43. if (
  44. !((имя1 == п1) && (имя2 == п2)) &&
  45. !((имя1 == п2) && (имя2 == п1))
  46. ) {
  47. continue;
  48. }
  49. мир.действия.совершить(ст.действие);
  50. вывод += `${имя1} x ${имя2}, `;
  51. console.debug("столкновение ожидаемых объектов", пара.bodyA.id, пара.bodyB.id);
  52. }
  53. }
  54. document.getElementById("отладка").innerHTML = вывод;
  55. };