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

187 lines
5.1 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 элемент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: 0,
},
};
var тело1 = Matter.Bodies.rectangle(1100, 190, 70, 10, фи);
//Matter.Composite.add(мир.физика.движок.world, тело1);
var элемент2 = document.createElement("div");
элемент2.style.position = "absolute";
элемент2.style.display = "block";
элемент2.style.transformOrigin = "center";
элемент2.style.width = `70px`;
элемент2.style.height = `70px`;
элемент2.style.background = "url(р/колобок/колобок_неподвижен.png)",
document.getElementById("корень").appendChild(элемент2);
var ф2 = {
isStatic: false,
inertia: Infinity,
collisionFilter: {
mask: 0,
},
};
var тело2 = Matter.Bodies.rectangle(1100, 150, 70, 70, ф2);
//Matter.Composite.add(мир.физика.движок.world, тело2);
var тело = Matter.Body.create({
parts: [тело1, тело2],
isStatic: false,
collisionFilter: {
mask: 4,
},
});
Matter.Composite.add(мир.физика.движок.world, тело);
мир.игрок.раз = {
элемент1: элемент1,
тело1: тело1,
элемент2: элемент2,
тело2: тело2,
тело: тело,
}
console.debug("создано раз");
}
// // // //
function обновитьРаз()
{
if (!мир.игрок.раз)
{
return;
}
мир.синхронизироватьЭлементТело(мир.игрок.раз.элемент1, мир.игрок.раз.тело1);
мир.синхронизироватьЭлементТело(мир.игрок.раз.элемент2, мир.игрок.раз.тело2);
}
// // // //
function переместитьИгрока()
{
if (!мир.игрок.раз)
{
return;
}
//var тело = мир.объекты.тела[мир.игрок.задано.объект];
//var тело = мир.объекты.тела["игрок"];
//var тело = мир.игрок.раз.тело1;
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 задатьИгрокуМаскуСтолкновения()
{
if (!мир.игрок.раз)
{
return;
}
//var тело = мир.объекты.тела[мир.игрок.задано.объект];
//var тело = мир.объекты.тела["игрок"];
//var тело = мир.игрок.раз.тело1;
var тело = мир.игрок.раз.тело;
if (!тело)
{
return;
}
var прыжок = тело.velocity.y < -1;
var маска = прыжок ? 1 : (1 | 2);
тело.collisionFilter.mask = маска;
}