98 lines
3.1 KiB
JavaScript
98 lines
3.1 KiB
JavaScript
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.создать();
|
||
}
|