|
|
@@ -1,12 +1,10 @@ |
|
|
|
function Сцена(состояние, события, тела, адресИгры) |
|
|
|
function Сцена(состояние, состояниЯ, события, тела, адресИгры) |
|
|
|
{ |
|
|
|
this.создать = function() |
|
|
|
{ |
|
|
|
this.умолчание = { |
|
|
|
скорость: [1, 1], |
|
|
|
}; |
|
|
|
this.задано = {}; |
|
|
|
this.сцены = null; |
|
|
|
this.состояниеИгрока = null; |
|
|
|
события.подписать(this); |
|
|
|
}; |
|
|
|
|
|
|
@@ -38,6 +36,38 @@ function Сцена(состояние, события, тела, адресИг |
|
|
|
запрос.send(); |
|
|
|
}; |
|
|
|
|
|
|
|
this.задатьСостояниеИгрока = function(идёт, направление) |
|
|
|
{ |
|
|
|
let стоятьЛ = this.задано["игрок.стоять.0"]; |
|
|
|
let стоятьП = this.задано["игрок.стоять.1"]; |
|
|
|
let идтиЛ = this.задано["игрок.идти.0"]; |
|
|
|
let идтиП = this.задано["игрок.идти.1"]; |
|
|
|
if (!стоятьЛ || !стоятьП || !идтиЛ || !идтиП) |
|
|
|
{ |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
var название = идтиЛ; |
|
|
|
if (идёт && направление > 0) |
|
|
|
{ |
|
|
|
название = идтиП; |
|
|
|
} |
|
|
|
else if (!идёт && направление < 0) |
|
|
|
{ |
|
|
|
название = стоятьЛ; |
|
|
|
} |
|
|
|
else if (!идёт && направление > 0) |
|
|
|
{ |
|
|
|
название = стоятьП; |
|
|
|
} |
|
|
|
|
|
|
|
if (this.состояниеИгрока != название) |
|
|
|
{ |
|
|
|
состояниЯ.применить(название); |
|
|
|
this.состояниеИгрока = название; |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
this.обновить = function() |
|
|
|
{ |
|
|
|
this.переместитьИгрока(); |
|
|
@@ -60,19 +90,17 @@ function Сцена(состояние, события, тела, адресИг |
|
|
|
|
|
|
|
this.обработатьНажатиеМышиУказатьИНажать = function(x, y, указатель) |
|
|
|
{ |
|
|
|
var тип = this.задано["тип"]; |
|
|
|
var игрок = this.задано["игрок"]; |
|
|
|
var цель = this.задано["цель"]; |
|
|
|
if (!тип || !игрок || !цель || тип != "указать и нажать") |
|
|
|
let цель = this.задано["цель"]; |
|
|
|
if (!this.типИгрыУказатьИНажать() || !цель) |
|
|
|
{ |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
var тело = тела.тела[цель]; |
|
|
|
let тело = тела.тела[цель]; |
|
|
|
if (!тело) |
|
|
|
{ |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
var пр = [ |
|
|
|
тело.bounds.min.x, |
|
|
|
тело.bounds.min.y, |
|
|
@@ -112,15 +140,15 @@ function Сцена(состояние, события, тела, адресИг |
|
|
|
|
|
|
|
this.переместитьИгрока = function() |
|
|
|
{ |
|
|
|
let тип = this.задано["тип"]; |
|
|
|
let игрок = this.задано["игрок"]; |
|
|
|
let цель = this.задано["цель"]; |
|
|
|
let скоростьX = this.задано["скорость.0"]; |
|
|
|
if (!тип || !игрок || !цель || !скоростьX || тип != "указать и нажать") |
|
|
|
let объект = this.задано["игрок.объект"]; |
|
|
|
let скоростьX = this.задано["игрок.скорость.0"]; |
|
|
|
if (!this.типИгрыУказатьИНажать() || !цель || !объект || !скоростьX) |
|
|
|
{ |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
let игрок = `объекты-${объект}`; |
|
|
|
let телоЦели = тела.тела[цель]; |
|
|
|
let телоИгрока = тела.тела[игрок]; |
|
|
|
if (!телоЦели || !телоИгрока) |
|
|
@@ -132,13 +160,15 @@ function Сцена(состояние, события, тела, адресИг |
|
|
|
let цельX = телоЦели.position.x; |
|
|
|
let ширина = телоЦели.bounds.max.x - телоЦели.bounds.min.x; |
|
|
|
let расстояние = цельX - игрокX; |
|
|
|
let направление = расстояние > 0 ? 1 : -1; |
|
|
|
|
|
|
|
if (Math.abs(расстояние) < ширина / 2) |
|
|
|
{ |
|
|
|
this.задатьСостояниеИгрока(false, направление); |
|
|
|
return; |
|
|
|
} |
|
|
|
let направление = расстояние > 0 ? 1 : -1; |
|
|
|
|
|
|
|
|
|
|
|
this.задатьСостояниеИгрока(true, направление); |
|
|
|
Matter.Sleeping.set(телоИгрока, false); |
|
|
|
Matter.Body.setVelocity(телоИгрока, { x: скоростьX * направление, y: 0 }); |
|
|
|
}; |
|
|
@@ -149,6 +179,12 @@ function Сцена(состояние, события, тела, адресИг |
|
|
|
eval(код); |
|
|
|
}; |
|
|
|
|
|
|
|
this.типИгрыУказатьИНажать = function() |
|
|
|
{ |
|
|
|
var тип = this.задано["тип"]; |
|
|
|
return тип && тип == "указать и нажать"; |
|
|
|
}; |
|
|
|
|
|
|
|
// Конструктор. |
|
|
|
this.создать(); |
|
|
|
}; |