diff --git a/4.1/игра/200.Сцена.js b/4.1/игра/200.Сцена.js index edb8d94..da2a84d 100644 --- a/4.1/игра/200.Сцена.js +++ b/4.1/игра/200.Сцена.js @@ -1,4 +1,4 @@ -function Сцена(состояние, события) +function Сцена(состояние, события, тела) { this.создать = function() { @@ -9,6 +9,11 @@ function Сцена(состояние, события) события.подписать(this); }; + this.обновить = function() + { + this.переместитьИгрока(); + }; + this.обработатьКлюч = function(ключ, путь, значение) { if (путь[0] != "сцена") @@ -30,7 +35,7 @@ function Сцена(состояние, события) return; } - var тело = мир.тела.тела[цель]; + var тело = тела.тела[цель]; if (!тело) { return; @@ -66,6 +71,39 @@ function Сцена(состояние, события) } }; + this.переместитьИгрока = function() + { + let тип = this.задано["тип"]; + let игрок = this.задано["игрок"]; + let цель = this.задано["цель"]; + let скоростьX = this.задано["скорость.0"]; + if (!тип || !игрок || !цель || !скоростьX || тип != "указать и нажать") + { + return; + } + + let телоЦели = тела.тела[цель]; + let телоИгрока = тела.тела[игрок]; + if (!телоЦели || !телоИгрока) + { + return; + } + + let игрокX = телоИгрока.position.x; + let цельX = телоЦели.position.x; + let ширина = телоЦели.bounds.max.x - телоЦели.bounds.min.x; + let расстояние = цельX - игрокX; + + if (Math.abs(расстояние) < ширина / 2) + { + return; + } + let направление = расстояние > 0 ? 1 : -1; + + Matter.Sleeping.set(телоИгрока, false); + Matter.Body.setVelocity(телоИгрока, { x: скоростьX * направление, y: 0 }); + }; + // Конструктор. this.создать(); }; diff --git a/4.1/игра/700.Игра.js b/4.1/игра/700.Игра.js index 2d96886..91719c9 100644 --- a/4.1/игра/700.Игра.js +++ b/4.1/игра/700.Игра.js @@ -18,7 +18,7 @@ function Игра() мир.тела = new Тела(мир.события, мир.физика, мир.физдвижок.world); мир.слежение = new Слежение(мир.состояние, мир.изображения, мир.тела); мир.объекты = new Объекты(мир.состояние); - мир.сцена = new Сцена(мир.состояние, мир.события); + мир.сцена = new Сцена(мир.состояние, мир.события, мир.тела); мир.мышь = new Мышь(мир.события); this.ключники = [ new Заголовок(), @@ -50,6 +50,7 @@ function Игра() { Matter.Engine.update(мир.физдвижок); мир.слежение.обновить(); + мир.сцена.обновить(); var тут = this; requestAnimationFrame(function() {