Files
K/игра/109.управление.js

176 lines
4.9 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.

/*
*
* Реакции
*
*/
НастроитьМышьИКлаву = мир =>
{
мир.сцена.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 (
(мир.управление && мир.мышь.нажата) &&
(
(мир.управление.направление != новое.направление) ||
(мир.управление.прыжок != новое.прыжок)
)
) {
мир.управление = новое;
мир.уведомить("изменили управление");
}
};
/*
*
* Последовательность
*
*/
мир.разобрать(`
создать сцену
настроить мышь и клаву
обновить сцену
уведомить о клаве
уведомить о мыши
изменили мышь
уведомить об управлении мышью
изменили клаву
уведомить об управлении клавой
`);