/*
 *
 * Реакции
 *
 */


НастроитьМышьИКлаву = мир =>
{
    мир.сцена.input.mouse.disableContextMenu();
    мир.клавиши = мир.сцена.input.keyboard.createCursorKeys();
};


// // // //


УведомитьОМыши = мир =>
{
    var мышь = мир.сцена.input.activePointer;
    const новое = {
        "x": мышь.x,
        "y": мышь.y,
        "нажата": мышь.isDown,
    };
    if (
        мир.мышь &&
        мир.мышь.x == новое.x &&
        мир.мышь.y == новое.y &&
        мир.мышь.нажата == новое.нажата
    ) {
        // Ничего не делаем.
    }
    else
    {
        мир.мышь = новое;
        мир.уведомить("изменили мышь");
    }
};


// // // //


УведомитьОКлаве = мир =>
{
    var новое = {
        "направление": 0,
        "прыжок": false,
    };
    if (мир.клавиши.left.isDown)
    {
        новое.направление = -1;
    }
    else if (мир.клавиши.right.isDown)
    {
        новое.направление = 1;
    }
    if (мир.клавиши.space.isDown || мир.клавиши.up.isDown)
    {
        новое.прыжок = true;
    }
    if (
        мир.клава &&
        мир.клава.направление == новое.направление &&
        мир.клава.прыжок == новое.прыжок
    ) {
        // Ничего не делаем.
    }
    else
    {
        мир.клава = новое;
        мир.уведомить("изменили клаву");
    }
};

// // // //


УведомитьОбУправленииКлавой = мир =>
{
    const естьДвижение = (мир.клава.направление != 0 || мир.клава.прыжок);
    // Начало движения.
    if (!мир.управление && естьДвижение)
    {
        мир.управление = мир.клава;
        мир.уведомить("изменили управление");
    }
    // Окончание движения.
    else if (мир.управление && !естьДвижение)
    {
        мир.управление = null;
        мир.уведомить("изменили управление");
    }
    // Продолжение движения.
    else if (
        (мир.управление && естьДвижение) &&
        (
            (мир.управление.направление != мир.клава.направление) ||
            (мир.управление.прыжок != мир.клава.прыжок)
        )
    ) {
        мир.управление = мир.клава;
        мир.уведомить("изменили управление");
    }
};


// // // //


УведомитьОбУправленииМышью = мир =>
{
    const камера = мир.сцена.cameras.main;
    const ширина = камера.width;
    const высота = камера.height;
    var новое = {
        "направление": 0, // Центр.
        "прыжок": false,
    };
    новое.прыжок = (мир.мышь.y < высота * 0.45);
    if (мир.мышь.x < ширина * 0.45)
    {
        новое.направление = -1; // Лево.
    }
    else if (мир.мышь.x > ширина * 0.55)
    {
        новое.направление = 1; // Право.
    }

    // Начало движения.
    if (!мир.управление && мир.мышь.нажата)
    {
        мир.управление = новое;
        мир.уведомить("изменили управление");
    }
    // Окончание движения.
    else if (мир.управление && !мир.мышь.нажата)
    {
        мир.управление = null;
        мир.уведомить("изменили управление");
    }
    // Продолжение движения.
    else if (
        (мир.управление && мир.мышь.нажата) &&
        (
            (мир.управление.направление != новое.направление) ||
            (мир.управление.прыжок != новое.прыжок)
        )
    ) {
        мир.управление = новое;
        мир.уведомить("изменили управление");
    }
};


/*
 *
 * Последовательность
 *
 */


мир.разобрать(`
создать сцену
    настроить мышь и клаву
обновить сцену
    уведомить о клаве
    уведомить о мыши
изменили мышь
    уведомить об управлении мышью
изменили клаву
    уведомить об управлении клавой
`);