better
This commit is contained in:
@@ -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.создать();
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user