61 lines
1.9 KiB
JavaScript
61 lines
1.9 KiB
JavaScript
function Столкновения(события, тела, физдвижок)
|
|
{
|
|
this.создать = function()
|
|
{
|
|
this.задано = {};
|
|
Matter.Events.on(
|
|
физдвижок,
|
|
"collisionActive",
|
|
(событие) => { this.обработатьСтолкновение(событие) }
|
|
);
|
|
};
|
|
|
|
this.обработатьКлюч = function(ключ, путь, значение)
|
|
{
|
|
if (путь[0] != "столкновения")
|
|
{
|
|
return;
|
|
}
|
|
|
|
let имя = путь[1];
|
|
let свойство = путь.slice(2).join(".");
|
|
if (!this.задано[имя])
|
|
{
|
|
this.задано[имя] = {};
|
|
}
|
|
this.задано[имя][свойство] = значение;
|
|
};
|
|
|
|
this.обработатьСтолкновение = function(событие)
|
|
{
|
|
for (var имя in this.задано)
|
|
{
|
|
var ст = this.задано[имя];
|
|
var имя1 = ст["тела.0"];
|
|
var имя2 = ст["тела.1"];
|
|
if (!имя1 || !имя2 || !ст.событие)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var пары = событие.pairs;
|
|
for (var номер in пары)
|
|
{
|
|
var пара = пары[номер];
|
|
var п1 = тела.имена[пара.bodyA.id];
|
|
var п2 = тела.имена[пара.bodyB.id];
|
|
if (
|
|
!((имя1 == п1) && (имя2 == п2)) &&
|
|
!((имя1 == п2) && (имя2 == п1))
|
|
) {
|
|
continue;
|
|
}
|
|
мир.события.уведомить(ст.событие);
|
|
}
|
|
}
|
|
};
|
|
|
|
// Конструктор.
|
|
this.создать();
|
|
};
|