72 lines
2.2 KiB
JavaScript
72 lines
2.2 KiB
JavaScript
function Сцена(состояние, события)
|
|
{
|
|
this.создать = function()
|
|
{
|
|
this.умолчание = {
|
|
скорость: [1, 1],
|
|
};
|
|
this.задано = {};
|
|
события.подписать(this);
|
|
};
|
|
|
|
this.обработатьКлюч = function(ключ, путь, значение)
|
|
{
|
|
if (путь[0] != "сцена")
|
|
{
|
|
return;
|
|
}
|
|
|
|
var свойство = путь.slice(1).join(".");
|
|
this.задано[свойство] = значение;
|
|
};
|
|
|
|
this.обработатьНажатиеМышиУказатьИНажать = function(x, y, указатель)
|
|
{
|
|
var тип = this.задано["тип"];
|
|
var игрок = this.задано["игрок"];
|
|
var цель = this.задано["цель"];
|
|
if (!тип || !игрок || !цель || тип != "указать и нажать")
|
|
{
|
|
return;
|
|
}
|
|
|
|
var тело = мир.тела.тела[цель];
|
|
if (!тело)
|
|
{
|
|
return;
|
|
}
|
|
var пр = [
|
|
тело.bounds.min.x,
|
|
тело.bounds.min.y,
|
|
тело.bounds.max.x - тело.bounds.min.x,
|
|
тело.bounds.max.y - тело.bounds.min.y,
|
|
]
|
|
let ширина = пр[2];
|
|
пр[0] = x - ширина;
|
|
|
|
состояние.разобрать({
|
|
тела: {
|
|
[цель]: {
|
|
пр: пр,
|
|
},
|
|
},
|
|
});
|
|
};
|
|
|
|
this.обработатьСобытие = function(событие)
|
|
{
|
|
let префикс = "мышь/нажатие/";
|
|
if (событие.startsWith(префикс))
|
|
{
|
|
let значения = событие.substring(префикс.length).split("/");
|
|
let x = Number(значения[0]);
|
|
let y = Number(значения[1]);
|
|
let указатель = значения[2];
|
|
this.обработатьНажатиеМышиУказатьИНажать(x, y, указатель);
|
|
}
|
|
};
|
|
|
|
// Конструктор.
|
|
this.создать();
|
|
};
|