diff --git a/4.1/игра.html b/4.1/игра.html
index 3eaef90..041cb7f 100644
--- a/4.1/игра.html
+++ b/4.1/игра.html
@@ -34,6 +34,7 @@
+
diff --git a/4.1/игра/080.Анимации.js b/4.1/игра/080.Анимации.js
index 153aab8..2529ee5 100644
--- a/4.1/игра/080.Анимации.js
+++ b/4.1/игра/080.Анимации.js
@@ -8,14 +8,11 @@ function Анимации(события)
this.запустить = function(имя, элемент)
{
- let ключ = `${элемент.id}-${имя}`;
+ /**/console.debug("ИГР Анимации.запустить", имя, элемент, this.анимации);
// Останавливаем прошлый экземпляр этой анимации на том же элементе.
- if (ключ in this.анимации)
- {
- this.анимации[ключ].остановить();
- delete this.анимации[ключ];
- }
+ this.остановить(имя, элемент);
// Запускаем новый экземпляр анимации на том же элементе.
+ let ключ = `${элемент.id}`;//-${имя}`;
this.анимации[ключ] = new Анимация(элемент, this.задано[имя]);
}
@@ -37,6 +34,17 @@ function Анимации(события)
события.уведомить(`анимации/${имя}`);
};
+ this.остановить = function(имя, элемент)
+ {
+ let ключ = `${элемент.id}`;//-${имя}`;
+ if (ключ in this.анимации)
+ {
+ this.анимации[ключ].остановить();
+ delete this.анимации[ключ];
+ }
+ /**/console.debug("ИГР Анимации.остановить", имя, элемент, this.анимации);
+ }
+
// Конструктор.
this.создать();
};
diff --git a/4.1/игра/190.Состояния.js b/4.1/игра/190.Состояния.js
index c67a53f..9e9ca1c 100644
--- a/4.1/игра/190.Состояния.js
+++ b/4.1/игра/190.Состояния.js
@@ -1,4 +1,4 @@
-function Состояния()
+function Состояния(состояние)
{
this.создать = function()
{
@@ -7,17 +7,8 @@ function Состояния()
this.применить = function(имя)
{
- /*
- let ключ = `${элемент.id}-${имя}`;
- // Останавливаем прошлый экземпляр этой анимации на том же элементе.
- if (ключ in this.анимации)
- {
- this.анимации[ключ].остановить();
- delete this.анимации[ключ];
- }
- // Запускаем новый экземпляр анимации на том же элементе.
- this.анимации[ключ] = new Анимация(элемент, this.задано[имя]);
- */
+ console.debug("ИГР Состояния.применить", имя, this.задано[имя]);
+ состояние.разобратьВыпрямленный(this.задано[имя]);
}
this.обработатьКлюч = function(ключ, путь, значение)
diff --git a/4.1/игра/200.Сцена.js b/4.1/игра/200.Сцена.js
index 727bc18..99de01b 100644
--- a/4.1/игра/200.Сцена.js
+++ b/4.1/игра/200.Сцена.js
@@ -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.создать();
};
diff --git a/4.1/игра/700.Игра.js b/4.1/игра/700.Игра.js
index cb598d1..46eedee 100644
--- a/4.1/игра/700.Игра.js
+++ b/4.1/игра/700.Игра.js
@@ -19,9 +19,9 @@ function Игра()
мир.тела = new Тела(мир.события, мир.физика, мир.физдвижок.world);
мир.слежение = new Слежение(мир.состояние, мир.изображения, мир.тела);
мир.объекты = new Объекты(мир.состояние, мир.события);
- мир.состояниЯ = new Состояния();
+ мир.состояниЯ = new Состояния(мир.состояние);
let адресИгры = window.location.pathname + "/../игра.html?z64=";
- мир.сцена = new Сцена(мир.состояние, мир.события, мир.тела, адресИгры);
+ мир.сцена = new Сцена(мир.состояние, мир.состояниЯ, мир.события, мир.тела, адресИгры);
мир.мышь = new Мышь(мир.события);
мир.столкновения = new Столкновения(мир.события, мир.тела, мир.физдвижок);
мир.подсказки = new Подсказки();