|
|
@@ -0,0 +1,97 @@ |
|
|
|
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.создать(); |
|
|
|
} |