152 lines
4.5 KiB
JavaScript
152 lines
4.5 KiB
JavaScript
мир.игрок = {
|
||
задано: {},
|
||
прыжок: {
|
||
статус: 0,
|
||
время: new Date(),
|
||
скоростьОтсутствия: 0.0001,
|
||
},
|
||
приземление: {
|
||
скорость: 0,
|
||
},
|
||
тело: null,
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
мир.ключники.push(function(ключ, путь, значение){
|
||
if (!ключ.startsWith("игрок"))
|
||
{
|
||
return;
|
||
}
|
||
|
||
var свойство = путь.slice(1).join(".");
|
||
мир.игрок.задано[свойство] = значение;
|
||
});
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
мир.игрок.обновить = function() {
|
||
мир.игрок.тело = мир.объекты.тела[мир.игрок.задано.объект];
|
||
if (!мир.игрок.тело)
|
||
{
|
||
return;
|
||
}
|
||
|
||
мир.игрок.переместить();
|
||
мир.игрок.задатьМаскуСтолкновения();
|
||
мир.игрок.отслеживатьПрыжкиПриземления();
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
мир.игрок.переместить = function()
|
||
{
|
||
var к = [
|
||
мир.игрок.задано["клавиши.0"],
|
||
мир.игрок.задано["клавиши.1"],
|
||
//мир.игрок.задано["клавиши.2"],
|
||
];
|
||
var влево = (мир.ввод.клавиши[к[0]] == true);
|
||
var вправо = (мир.ввод.клавиши[к[1]] == true);
|
||
|
||
var скоростьГ = мир.игрок.задано["скорость.0"];
|
||
var скоростьX = 0;
|
||
var скоростьВ = мир.игрок.задано["скорость.1"];
|
||
var скоростьY = (мир.игрок.прыжок.статус == 1) ? -скоростьВ : мир.игрок.тело.velocity.y;
|
||
|
||
if (влево)
|
||
{
|
||
скоростьX = -скоростьГ;
|
||
}
|
||
else if (вправо)
|
||
{
|
||
скоростьX = скоростьГ;
|
||
}
|
||
|
||
Matter.Sleeping.set(мир.игрок.тело, false);
|
||
Matter.Body.setVelocity(мир.игрок.тело, { x: скоростьX, y: скоростьY });
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
мир.игрок.задатьМаскуСтолкновения = function()
|
||
{
|
||
var прыжок = мир.игрок.тело.velocity.y < -1;
|
||
var маска = прыжок ? 1 : (1 | 2);
|
||
мир.игрок.тело.collisionFilter.mask = маска;
|
||
|
||
/*
|
||
if (тело.velocity.y < мир.игрок.minv)
|
||
{
|
||
мир.игрок.minv = тело.velocity.y;
|
||
}
|
||
if (тело.velocity.y > мир.игрок.maxv)
|
||
{
|
||
мир.игрок.maxv = тело.velocity.y;
|
||
}
|
||
document.getElementById("отладка").innerHTML = `min: ${мир.игрок.minv} max: ${мир.игрок.maxv}`;
|
||
|
||
if (Math.abs(мир.игрок.было - тело.velocity.y) > 0.001)
|
||
{
|
||
мир.игрок.было = тело.velocity.y;
|
||
console.debug("vel", мир.игрок.было);
|
||
}
|
||
*/
|
||
|
||
};
|
||
|
||
|
||
// // // /
|
||
|
||
|
||
мир.игрок.отслеживатьПрыжкиПриземления = function()
|
||
{
|
||
if (мир.игрок.прыжок.статус == 1)
|
||
{
|
||
мир.игрок.прыжок.статус = 2;
|
||
мир.действия.совершить("игрокВПрыжке");
|
||
}
|
||
var нетДвижения = (Math.abs(мир.игрок.тело.velocity.y) < мир.игрок.прыжок.скоростьОтсутствия);
|
||
var клавиша = мир.игрок.задано["клавиши.2"];
|
||
var вверх = (мир.ввод.клавиши[клавиша] == true);
|
||
if (
|
||
мир.игрок.прыжок.статус == 0 &&
|
||
вверх &&
|
||
нетДвижения
|
||
) {
|
||
мир.игрок.прыжок.статус = 1;
|
||
мир.игрок.приземление.скорость = 0;
|
||
мир.действия.совершить("игрокНачалПрыжок");
|
||
}
|
||
|
||
if (мир.игрок.прыжок.статус != 2)
|
||
{
|
||
return;
|
||
}
|
||
|
||
var скорость = мир.игрок.тело.velocity.y;
|
||
if (скорость > мир.игрок.приземление.скорость)
|
||
{
|
||
мир.игрок.приземление.скорость = скорость;
|
||
}
|
||
|
||
var сейчас = new Date();
|
||
var прошло = сейчас - мир.игрок.прыжок.время;
|
||
if (
|
||
(прошло > 20) &&
|
||
нетДвижения
|
||
) {
|
||
мир.игрок.прыжок.время = сейчас;
|
||
мир.игрок.прыжок.статус = 0;
|
||
мир.действия.совершить("игрокПриземлился");
|
||
}
|
||
};
|