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

74 lines
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. for (var имя in за)
  28. {
  29. var ст = за[имя];
  30. var имя1 = ст["объекты.0"];
  31. var имя2 = ст["объекты.1"];
  32. var имя2тело = ст["тела.0"];
  33. if (!имя1 || (!имя2 && !имя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. var п2тело = мир.тела.имена[пара.bodyB.id];
  44. if (!п2)
  45. {
  46. п2 = п2тело;
  47. }
  48. if (
  49. !((имя1 == п1) && (имя2 == п2)) &&
  50. !((имя1 == п2) && (имя2 == п1))
  51. ) {
  52. continue;
  53. }
  54. мир.события.уведомить(ст.событие);
  55. }
  56. }
  57. };