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