154 lines
3.8 KiB
JavaScript
154 lines
3.8 KiB
JavaScript
мир.игрок = {
|
||
задано: {},
|
||
обновить: function() {
|
||
переместитьИгрока();
|
||
задатьИгрокуМаскуСтолкновения();
|
||
обновитьРаз();
|
||
},
|
||
раз: null,
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
мир.ключники.push(function(ключ, путь, значение){
|
||
if (!ключ.startsWith("игрок"))
|
||
{
|
||
return;
|
||
}
|
||
|
||
var свойство = путь.slice(1).join(".");
|
||
мир.игрок.задано[свойство] = значение;
|
||
|
||
одинРазСоздать();
|
||
|
||
});
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
function одинРазСоздать()
|
||
{
|
||
if (мир.игрок.раз)
|
||
{
|
||
return;
|
||
}
|
||
|
||
var элемент1 = document.createElement("div");
|
||
элемент1.style.position = "absolute";
|
||
элемент1.style.display = "block";
|
||
элемент1.style.transformOrigin = "center";
|
||
элемент1.style.width = `70px`;
|
||
элемент1.style.height = `10px`;
|
||
элемент1.style.background = "url(р/отладка/основа.jpg)",
|
||
document.getElementById("корень").appendChild(элемент1);
|
||
|
||
var фи = {
|
||
isStatic: false,
|
||
inertia: Infinity,
|
||
collisionFilter: {
|
||
mask: 1,
|
||
},
|
||
};
|
||
var тело1 = Matter.Bodies.rectangle(1170, 150, 70, 10, фи);
|
||
|
||
Matter.Composite.add(мир.физика.движок.world, тело1);
|
||
|
||
мир.игрок.раз = {
|
||
элемент1: элемент1,
|
||
тело1: тело1,
|
||
//элемент2: ,
|
||
//тело2: ,
|
||
}
|
||
|
||
console.debug("создано раз");
|
||
}
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
function обновитьРаз()
|
||
{
|
||
if (!мир.игрок.раз)
|
||
{
|
||
return;
|
||
}
|
||
|
||
мир.синхронизироватьЭлементТело(мир.игрок.раз.элемент1, мир.игрок.раз.тело1);
|
||
|
||
}
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
function переместитьИгрока()
|
||
{
|
||
|
||
if (!мир.игрок.раз)
|
||
{
|
||
return;
|
||
}
|
||
|
||
//var тело = мир.объекты.тела[мир.игрок.задано.объект];
|
||
//var тело = мир.объекты.тела["игрок"];
|
||
var тело = мир.игрок.раз.тело1;
|
||
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 задатьИгрокуМаскуСтолкновения()
|
||
{
|
||
|
||
if (!мир.игрок.раз)
|
||
{
|
||
return;
|
||
}
|
||
|
||
//var тело = мир.объекты.тела[мир.игрок.задано.объект];
|
||
//var тело = мир.объекты.тела["игрок"];
|
||
var тело = мир.игрок.раз.тело1;
|
||
if (!тело)
|
||
{
|
||
return;
|
||
}
|
||
|
||
var прыжок = тело.velocity.y < -1;
|
||
var маска = прыжок ? 1 : (1 | 2);
|
||
тело.collisionFilter.mask = маска;
|
||
}
|