Files
mjs/200.движение.js

98 lines
3.1 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

function Движение(ключники) {
this.создать = function()
{
this.задано = {};
var тут = this;
ключники.push(function(ключ, путь, значение) {
if (!путь[0].startsWith("движение"))
{
return;
}
тут.обработатьКлюч(ключ, путь, значение);
});
};
this.обработатьКлюч = function(ключ, путь, значение)
{
var имя = путь[1];
var свойство = путь.slice(2).join(".");
if (!this.задано[имя])
{
this.задано[имя] = {};
}
this.задано[имя][свойство] = значение;
};
this.обновить = function()
{
for (var имя in this.задано)
{
var значения = this.задано[имя];
for (var свойство in значения)
{
if (свойство.startsWith("объект"))
{
var объект = значения[свойство];
this.передвинуть(объект, значения);
}
}
}
};
this.передвинуть = function(объект, значения)
{
var тело = мир.объекты.тела[объект];
var скоростьX = значения["скорость.0"];
var скоростьY = значения["скорость.1"];
var началоX = значения["x.0"];
var конецX = значения["x.1"];
var началоY = значения["y.0"];
var конецY = значения["y.1"];
if (
!тело ||
(скоростьX == null) ||
(скоростьY == null) ||
(началоX == null) ||
(началоY == null) ||
(конецX == null) ||
(конецY == null)
) {
return;
}
if (!тело.скоростьX)
{
тело.скоростьX = скоростьX;
}
if (!тело.скоростьY)
{
тело.скоростьY = скоростьY;
}
if (тело.position.x < началоX)
{
тело.скоростьX = скоростьX;
}
else if (тело.position.x > конецX)
{
тело.скоростьX = скоростьX * -1;
}
if (тело.position.y < началоY)
{
тело.скоростьY = скоростьY;
}
else if (тело.position.y > конецY)
{
тело.скоростьY = скоростьY * -1 * мир.физика.движок.gravity.y;
}
Matter.Sleeping.set(тело, false);
Matter.Body.setVelocity(тело, { x: тело.скоростьX, y: тело.скоростьY });
};
// Конструктор.
this.создать();
}