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