Files
mjs/320.игрок.js

152 lines
4.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

мир.игрок = {
задано: {},
прыжок: {
статус: 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;
мир.действия.совершить("игрокПриземлился");
}
};