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.

61 lines
1.9KB

  1. function Столкновения(события, тела, физдвижок)
  2. {
  3. this.создать = function()
  4. {
  5. this.задано = {};
  6. Matter.Events.on(
  7. физдвижок,
  8. "collisionActive",
  9. (событие) => { this.обработатьСтолкновение(событие) }
  10. );
  11. };
  12. this.обработатьКлюч = function(ключ, путь, значение)
  13. {
  14. if (путь[0] != "столкновения")
  15. {
  16. return;
  17. }
  18. let имя = путь[1];
  19. let свойство = путь.slice(2).join(".");
  20. if (!this.задано[имя])
  21. {
  22. this.задано[имя] = {};
  23. }
  24. this.задано[имя][свойство] = значение;
  25. };
  26. this.обработатьСтолкновение = function(событие)
  27. {
  28. for (var имя in this.задано)
  29. {
  30. var ст = this.задано[имя];
  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. }
  51. }
  52. };
  53. // Конструктор.
  54. this.создать();
  55. };