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

111 lines
3.0 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.

мир.игрок = {
задано: {},
обновить: function() {
переместитьИгрока();
задатьИгрокуМаскуСтолкновения();
},
ограничитель: null,
};
// // // //
мир.ключники.push(function(ключ, путь, значение){
if (!ключ.startsWith("игрок"))
{
return;
}
var свойство = путь.slice(1).join(".");
мир.игрок.задано[свойство] = значение;
одинРазСоздатьОграничитель();
});
// // // //
function одинРазСоздатьОграничитель()
{
if (мир.игрок.ограничитель)
{
return;
}
var игрок = мир.объекты.тела["игрок"];
var объект = мир.объекты.тела["колобок"];
if (!игрок || !объект)
{
return;
}
мир.игрок.ограничитель = Matter.Constraint.create({
bodyA: игрок,
bodyB: объект,
stiffness: 1,
});
Matter.Composite.add(мир.физика.движок.world, мир.игрок.ограничитель);
console.debug("создан ограничитель");
}
// // // //
function переместитьИгрока()
{
//var тело = мир.объекты.тела[мир.игрок.задано.объект];
var тело = мир.объекты.тела["игрок"];
if (!тело)
{
return;
}
var к = [
мир.игрок.задано["клавиши.0"],
мир.игрок.задано["клавиши.1"],
мир.игрок.задано["клавиши.2"],
];
var влево = (мир.ввод.клавиши[к[0]] == true);
var вправо = (мир.ввод.клавиши[к[1]] == true);
var вверх = (мир.ввод.клавиши[к[2]] == true);
var скоростьГ = мир.игрок.задано["скорость.0"];
var скоростьВ = мир.игрок.задано["скорость.1"];
var скоростьY = (вверх && Math.abs(тело.velocity.y) <= 0.00001) ? -скоростьВ : тело.velocity.y;
var скоростьX = 0;
if (влево)
{
скоростьX = -скоростьГ;
}
else if (вправо)
{
скоростьX = скоростьГ;
}
Matter.Sleeping.set(тело, false);
Matter.Body.setVelocity(тело, { x: скоростьX, y: скоростьY });
}
// // // //
function задатьИгрокуМаскуСтолкновения()
{
//var тело = мир.объекты.тела[мир.игрок.задано.объект];
var тело = мир.объекты.тела["игрок"];
if (!тело)
{
return;
}
var прыжок = тело.velocity.y < -1;
var маска = прыжок ? 1 : (1 | 2);
тело.collisionFilter.mask = маска;
}