мир.игрок = {
    задано: {},
    обновить: 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(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: 1,
        },
    };
    var тело2 = Matter.Bodies.rectangle(1100, 150, 70, 70, ф2);
    Matter.Composite.add(мир.физика.движок.world, тело2);



    var ограничитель = Matter.Constraint.create({
                bodyA: тело1,
                bodyB: тело2,
                stiffness: 1,
            });
    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 });

Matter.Sleeping.set(мир.игрок.раз.тело2, false);
Matter.Body.setVelocity(мир.игрок.раз.тело2, { x: скоростьX, y: скоростьY });
}


// // // //


function задатьИгрокуМаскуСтолкновения()
{

if (!мир.игрок.раз)
{
    return;
}

    //var тело = мир.объекты.тела[мир.игрок.задано.объект];
//var тело = мир.объекты.тела["игрок"];
var тело = мир.игрок.раз.тело1;
//var тело = мир.игрок.раз.тело;
    if (!тело)
    {
        return;
    }

    var прыжок = тело.velocity.y < -1;
    var маска = прыжок ? 1 : (1 | 2);
    тело.collisionFilter.mask = маска;
}