better
This commit is contained in:
@@ -34,6 +34,7 @@
|
|||||||
<script src="игра/140.Тела.js"></script>
|
<script src="игра/140.Тела.js"></script>
|
||||||
<script src="игра/160.Слежение.js"></script>
|
<script src="игра/160.Слежение.js"></script>
|
||||||
<script src="игра/180.Объекты.js"></script>
|
<script src="игра/180.Объекты.js"></script>
|
||||||
|
<script src="игра/190.Состояния.js"></script>
|
||||||
<script src="игра/200.Сцена.js"></script>
|
<script src="игра/200.Сцена.js"></script>
|
||||||
<script src="игра/220.Мышь.js"></script>
|
<script src="игра/220.Мышь.js"></script>
|
||||||
<script src="игра/240.Столкновения.js"></script>
|
<script src="игра/240.Столкновения.js"></script>
|
||||||
|
|||||||
@@ -8,14 +8,11 @@ function Анимации(события)
|
|||||||
|
|
||||||
this.запустить = function(имя, элемент)
|
this.запустить = function(имя, элемент)
|
||||||
{
|
{
|
||||||
let ключ = `${элемент.id}-${имя}`;
|
/**/console.debug("ИГР Анимации.запустить", имя, элемент, this.анимации);
|
||||||
// Останавливаем прошлый экземпляр этой анимации на том же элементе.
|
// Останавливаем прошлый экземпляр этой анимации на том же элементе.
|
||||||
if (ключ in this.анимации)
|
this.остановить(имя, элемент);
|
||||||
{
|
|
||||||
this.анимации[ключ].остановить();
|
|
||||||
delete this.анимации[ключ];
|
|
||||||
}
|
|
||||||
// Запускаем новый экземпляр анимации на том же элементе.
|
// Запускаем новый экземпляр анимации на том же элементе.
|
||||||
|
let ключ = `${элемент.id}`;//-${имя}`;
|
||||||
this.анимации[ключ] = new Анимация(элемент, this.задано[имя]);
|
this.анимации[ключ] = new Анимация(элемент, this.задано[имя]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -37,6 +34,17 @@ function Анимации(события)
|
|||||||
события.уведомить(`анимации/${имя}`);
|
события.уведомить(`анимации/${имя}`);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
this.остановить = function(имя, элемент)
|
||||||
|
{
|
||||||
|
let ключ = `${элемент.id}`;//-${имя}`;
|
||||||
|
if (ключ in this.анимации)
|
||||||
|
{
|
||||||
|
this.анимации[ключ].остановить();
|
||||||
|
delete this.анимации[ключ];
|
||||||
|
}
|
||||||
|
/**/console.debug("ИГР Анимации.остановить", имя, элемент, this.анимации);
|
||||||
|
}
|
||||||
|
|
||||||
// Конструктор.
|
// Конструктор.
|
||||||
this.создать();
|
this.создать();
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
function Состояния()
|
function Состояния(состояние)
|
||||||
{
|
{
|
||||||
this.создать = function()
|
this.создать = function()
|
||||||
{
|
{
|
||||||
@@ -7,17 +7,8 @@ function Состояния()
|
|||||||
|
|
||||||
this.применить = function(имя)
|
this.применить = function(имя)
|
||||||
{
|
{
|
||||||
/*
|
console.debug("ИГР Состояния.применить", имя, this.задано[имя]);
|
||||||
let ключ = `${элемент.id}-${имя}`;
|
состояние.разобратьВыпрямленный(this.задано[имя]);
|
||||||
// Останавливаем прошлый экземпляр этой анимации на том же элементе.
|
|
||||||
if (ключ in this.анимации)
|
|
||||||
{
|
|
||||||
this.анимации[ключ].остановить();
|
|
||||||
delete this.анимации[ключ];
|
|
||||||
}
|
|
||||||
// Запускаем новый экземпляр анимации на том же элементе.
|
|
||||||
this.анимации[ключ] = new Анимация(элемент, this.задано[имя]);
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this.обработатьКлюч = function(ключ, путь, значение)
|
this.обработатьКлюч = function(ключ, путь, значение)
|
||||||
|
|||||||
@@ -1,12 +1,10 @@
|
|||||||
function Сцена(состояние, события, тела, адресИгры)
|
function Сцена(состояние, состояниЯ, события, тела, адресИгры)
|
||||||
{
|
{
|
||||||
this.создать = function()
|
this.создать = function()
|
||||||
{
|
{
|
||||||
this.умолчание = {
|
|
||||||
скорость: [1, 1],
|
|
||||||
};
|
|
||||||
this.задано = {};
|
this.задано = {};
|
||||||
this.сцены = null;
|
this.сцены = null;
|
||||||
|
this.состояниеИгрока = null;
|
||||||
события.подписать(this);
|
события.подписать(this);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -38,6 +36,38 @@ function Сцена(состояние, события, тела, адресИг
|
|||||||
запрос.send();
|
запрос.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.обновить = function()
|
||||||
{
|
{
|
||||||
this.переместитьИгрока();
|
this.переместитьИгрока();
|
||||||
@@ -60,19 +90,17 @@ function Сцена(состояние, события, тела, адресИг
|
|||||||
|
|
||||||
this.обработатьНажатиеМышиУказатьИНажать = function(x, y, указатель)
|
this.обработатьНажатиеМышиУказатьИНажать = function(x, y, указатель)
|
||||||
{
|
{
|
||||||
var тип = this.задано["тип"];
|
let цель = this.задано["цель"];
|
||||||
var игрок = this.задано["игрок"];
|
if (!this.типИгрыУказатьИНажать() || !цель)
|
||||||
var цель = this.задано["цель"];
|
|
||||||
if (!тип || !игрок || !цель || тип != "указать и нажать")
|
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
let тело = тела.тела[цель];
|
||||||
var тело = тела.тела[цель];
|
|
||||||
if (!тело)
|
if (!тело)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var пр = [
|
var пр = [
|
||||||
тело.bounds.min.x,
|
тело.bounds.min.x,
|
||||||
тело.bounds.min.y,
|
тело.bounds.min.y,
|
||||||
@@ -112,15 +140,15 @@ function Сцена(состояние, события, тела, адресИг
|
|||||||
|
|
||||||
this.переместитьИгрока = function()
|
this.переместитьИгрока = function()
|
||||||
{
|
{
|
||||||
let тип = this.задано["тип"];
|
|
||||||
let игрок = this.задано["игрок"];
|
|
||||||
let цель = this.задано["цель"];
|
let цель = this.задано["цель"];
|
||||||
let скоростьX = this.задано["скорость.0"];
|
let объект = this.задано["игрок.объект"];
|
||||||
if (!тип || !игрок || !цель || !скоростьX || тип != "указать и нажать")
|
let скоростьX = this.задано["игрок.скорость.0"];
|
||||||
|
if (!this.типИгрыУказатьИНажать() || !цель || !объект || !скоростьX)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let игрок = `объекты-${объект}`;
|
||||||
let телоЦели = тела.тела[цель];
|
let телоЦели = тела.тела[цель];
|
||||||
let телоИгрока = тела.тела[игрок];
|
let телоИгрока = тела.тела[игрок];
|
||||||
if (!телоЦели || !телоИгрока)
|
if (!телоЦели || !телоИгрока)
|
||||||
@@ -132,13 +160,15 @@ function Сцена(состояние, события, тела, адресИг
|
|||||||
let цельX = телоЦели.position.x;
|
let цельX = телоЦели.position.x;
|
||||||
let ширина = телоЦели.bounds.max.x - телоЦели.bounds.min.x;
|
let ширина = телоЦели.bounds.max.x - телоЦели.bounds.min.x;
|
||||||
let расстояние = цельX - игрокX;
|
let расстояние = цельX - игрокX;
|
||||||
|
let направление = расстояние > 0 ? 1 : -1;
|
||||||
|
|
||||||
if (Math.abs(расстояние) < ширина / 2)
|
if (Math.abs(расстояние) < ширина / 2)
|
||||||
{
|
{
|
||||||
|
this.задатьСостояниеИгрока(false, направление);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let направление = расстояние > 0 ? 1 : -1;
|
|
||||||
|
|
||||||
|
this.задатьСостояниеИгрока(true, направление);
|
||||||
Matter.Sleeping.set(телоИгрока, false);
|
Matter.Sleeping.set(телоИгрока, false);
|
||||||
Matter.Body.setVelocity(телоИгрока, { x: скоростьX * направление, y: 0 });
|
Matter.Body.setVelocity(телоИгрока, { x: скоростьX * направление, y: 0 });
|
||||||
};
|
};
|
||||||
@@ -149,6 +179,12 @@ function Сцена(состояние, события, тела, адресИг
|
|||||||
eval(код);
|
eval(код);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
this.типИгрыУказатьИНажать = function()
|
||||||
|
{
|
||||||
|
var тип = this.задано["тип"];
|
||||||
|
return тип && тип == "указать и нажать";
|
||||||
|
};
|
||||||
|
|
||||||
// Конструктор.
|
// Конструктор.
|
||||||
this.создать();
|
this.создать();
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -19,9 +19,9 @@ function Игра()
|
|||||||
мир.тела = new Тела(мир.события, мир.физика, мир.физдвижок.world);
|
мир.тела = new Тела(мир.события, мир.физика, мир.физдвижок.world);
|
||||||
мир.слежение = new Слежение(мир.состояние, мир.изображения, мир.тела);
|
мир.слежение = new Слежение(мир.состояние, мир.изображения, мир.тела);
|
||||||
мир.объекты = new Объекты(мир.состояние, мир.события);
|
мир.объекты = new Объекты(мир.состояние, мир.события);
|
||||||
мир.состояниЯ = new Состояния();
|
мир.состояниЯ = new Состояния(мир.состояние);
|
||||||
let адресИгры = window.location.pathname + "/../игра.html?z64=";
|
let адресИгры = window.location.pathname + "/../игра.html?z64=";
|
||||||
мир.сцена = new Сцена(мир.состояние, мир.события, мир.тела, адресИгры);
|
мир.сцена = new Сцена(мир.состояние, мир.состояниЯ, мир.события, мир.тела, адресИгры);
|
||||||
мир.мышь = new Мышь(мир.события);
|
мир.мышь = new Мышь(мир.события);
|
||||||
мир.столкновения = new Столкновения(мир.события, мир.тела, мир.физдвижок);
|
мир.столкновения = new Столкновения(мир.события, мир.тела, мир.физдвижок);
|
||||||
мир.подсказки = new Подсказки();
|
мир.подсказки = new Подсказки();
|
||||||
|
|||||||
Reference in New Issue
Block a user