433 lines
12 KiB
JavaScript
433 lines
12 KiB
JavaScript
/*
|
||
*
|
||
* Реакции
|
||
*
|
||
*/
|
||
|
||
|
||
ЗагрузитьРесурсыИзбы = мир =>
|
||
{
|
||
мир.сцена.load.audio("звук-избы", "ресурсы/звуки/387922__setuniman__scheming-1o95.mp3");
|
||
мир.сцена.load.audio("звук-зарядки", "ресурсы/звуки/543927__eminyildirim__pistol-gun-cocking.wav");
|
||
|
||
мир.сцена.load.image("основа", "ресурсы/отладка/основа.jpg");
|
||
мир.сцена.load.image("линия", "ресурсы/отладка/линия_вертикальная.png");
|
||
мир.сцена.load.image("изба", "ресурсы/сцены/изба.jpg");
|
||
мир.сцена.load.image("молоко", "ресурсы/вещи/банка_молока.png");
|
||
мир.сцена.load.image("паук", "ресурсы/животные/паук.png");
|
||
мир.сцена.load.image("мышь", "ресурсы/животные/мышь.png");
|
||
мир.сцена.load.image("мышь", "ресурсы/животные/мышь.png");
|
||
мир.сцена.load.image("самовар", "ресурсы/вещи/самовар.png");
|
||
мир.сцена.load.image("стрела", "ресурсы/вещи/стрела.png");
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
СоздатьИзбу = мир =>
|
||
{
|
||
мир.сцена.sound.play("звук-избы", { loop: true });
|
||
|
||
мир.сцена.add.image(0, 0, "изба").setOrigin(0, 0);
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
СоздатьПолыИСтеныКаркаса = мир =>
|
||
{
|
||
var полы = [
|
||
{
|
||
x: 0,
|
||
y: 585,
|
||
ширина: 43,
|
||
},
|
||
{
|
||
x: 300,
|
||
y: 585,
|
||
ширина: 30,
|
||
},
|
||
{
|
||
x: 510,
|
||
y: 585,
|
||
ширина: 200,
|
||
},
|
||
];
|
||
for (var номер in полы)
|
||
{
|
||
var пол = полы[номер];
|
||
var элемент = мир.каркас.create(пол.x, пол.y, "основа").setOrigin(0, 0);
|
||
элемент.setScale(пол.ширина, 1).refreshBody();
|
||
элемент.setVisible(false);
|
||
}
|
||
|
||
var стены = [
|
||
{
|
||
x: 0,
|
||
y: 385,
|
||
высота: 50,
|
||
},
|
||
{
|
||
x: 2000,
|
||
y: 385,
|
||
высота: 50,
|
||
},
|
||
];
|
||
for (var номер in стены)
|
||
{
|
||
var стена = стены[номер];
|
||
var элемент = мир.каркас.create(стена.x, стена.y, "основа");
|
||
элемент.setScale(1, стена.высота).refreshBody();
|
||
элемент.setVisible(false);
|
||
}
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
СоздатьПлатформы = мир =>
|
||
{
|
||
var п = [
|
||
{
|
||
x: 583,
|
||
y: 473,
|
||
ширина: 65,
|
||
},
|
||
// Полка 1.
|
||
{
|
||
x: 666,
|
||
y: 335,
|
||
ширина: 3,
|
||
},
|
||
// Полка молока.
|
||
{
|
||
x: 771,
|
||
y: 335,
|
||
ширина: 3,
|
||
},
|
||
// Полка 3.
|
||
{
|
||
x: 862,
|
||
y: 335,
|
||
ширина: 3,
|
||
},
|
||
// Полка самовара.
|
||
{
|
||
x: 995,
|
||
y: 355,
|
||
ширина: 4,
|
||
},
|
||
{
|
||
x: 620,
|
||
y: 245,
|
||
ширина: 35,
|
||
},
|
||
{
|
||
x: 950,
|
||
y: 180,
|
||
ширина: 12,
|
||
},
|
||
// Стол.
|
||
{
|
||
x: 1270,
|
||
y: 427,
|
||
ширина: 70,
|
||
},
|
||
// Окно.
|
||
{
|
||
x: 1690,
|
||
y: 375,
|
||
ширина: 20,
|
||
},
|
||
];
|
||
for (var номер in п)
|
||
{
|
||
var часть = п[номер];
|
||
var элемент = мир.платформы.create(часть.x, часть.y, "основа").setOrigin(0, 0);
|
||
элемент.setScale(часть.ширина, 1).refreshBody();
|
||
элемент.setVisible(false);
|
||
}
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ПозволитьПлатформамПропускатьПрыжки = мир =>
|
||
{
|
||
мир.платформы.children.iterate(function(платформа) {
|
||
платформа.body.checkCollision.down = false;
|
||
платформа.body.checkCollision.left = false;
|
||
платформа.body.checkCollision.right = false;
|
||
});
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
СоздатьВещи = мир =>
|
||
{
|
||
var молоко = мир.сцена.physics.add.sprite(785, 240, "молоко");
|
||
молоко.setScale(0.4, 0.4).refreshBody();
|
||
молоко.depth = 5;
|
||
мир.вещи.add(молоко);
|
||
|
||
var самовар = мир.сцена.physics.add.sprite(1003, 200, "самовар");
|
||
самовар.setScale(0.25, 0.25).refreshBody();
|
||
самовар.depth = 5;
|
||
мир.вещи.add(самовар);
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
СоздатьПауков = мир =>
|
||
{
|
||
мир.настройкиПауков = [
|
||
{
|
||
x: 620,
|
||
y: 345,
|
||
скорость: 50,
|
||
низ: 550,
|
||
верх: 270,
|
||
},
|
||
{
|
||
x: 785,
|
||
y: 375,
|
||
скорость: 80,
|
||
низ: 400,
|
||
верх: 270,
|
||
},
|
||
{
|
||
x: 930,
|
||
y: 500,
|
||
скорость: 70,
|
||
низ: 550,
|
||
верх: 270,
|
||
},
|
||
{
|
||
x: 1003,
|
||
y: 250,
|
||
скорость: 55,
|
||
низ: 400,
|
||
верх: 200,
|
||
},
|
||
];
|
||
мир.пауки = [];
|
||
мир.нитиПауков = [];
|
||
for (var номер in мир.настройкиПауков)
|
||
{
|
||
var настройки = мир.настройкиПауков[номер];
|
||
var паук = мир.враги.create(настройки.x, настройки.y, "паук");
|
||
паук.body.setVelocityY(настройки.скорость);
|
||
паук.depth = 10;
|
||
мир.пауки.push(паук);
|
||
var нить = мир.сцена.add.image(настройки.x - 1, настройки.верх - 25, "линия").setOrigin(0, 0);
|
||
нить.depth = паук.depth;
|
||
мир.нитиПауков.push(нить);
|
||
}
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
АнимироватьПауков = мир =>
|
||
{
|
||
for (var номер in мир.пауки)
|
||
{
|
||
var паук = мир.пауки[номер];
|
||
var нить = мир.нитиПауков[номер];
|
||
var настройки = мир.настройкиПауков[номер];
|
||
нить.displayHeight = паук.y - нить.y - 5;
|
||
if (паук.y > настройки.низ)
|
||
{
|
||
паук.setVelocityY(-настройки.скорость);
|
||
} else if (паук.y < настройки.верх)
|
||
{
|
||
паук.setVelocityY(настройки.скорость);
|
||
}
|
||
}
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
СоздатьМышей = мир =>
|
||
{
|
||
мир.настройкиМышей= [
|
||
{
|
||
x: 350,
|
||
y: 575,
|
||
скорость: 290,
|
||
},
|
||
{
|
||
x: 740,
|
||
y: 575,
|
||
скорость: 375,
|
||
},
|
||
];
|
||
мир.мыши = [];
|
||
for (var номер in мир.настройкиМышей)
|
||
{
|
||
var настройки = мир.настройкиМышей[номер];
|
||
var мышь = мир.враги.create(настройки.x, настройки.y, "мышь");
|
||
мышь.body.setVelocityX(настройки.скорость);
|
||
мышь.depth = 10;
|
||
мышь.flipX = true;
|
||
мир.мыши.push(мышь);
|
||
}
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
АнимироватьМышей = мир =>
|
||
{
|
||
for (var номер in мир.мыши)
|
||
{
|
||
var мышь= мир.мыши[номер];
|
||
var скорость = мир.настройкиМышей[номер].скорость;
|
||
if (мышь.x > 1950)
|
||
{
|
||
мышь.setVelocityX(-скорость);
|
||
мышь.flipX = false;
|
||
} else if (мышь.x < 50)
|
||
{
|
||
мышь.setVelocityX(скорость);
|
||
мышь.flipX = true;
|
||
}
|
||
}
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
СоздатьСтрелы = мир =>
|
||
{
|
||
мир.стрелаЗаряжена = false;
|
||
|
||
// Кучка стрел.
|
||
var группаСтрел = мир.сцена.physics.add.staticGroup();
|
||
var стрелы = группаСтрел.create(1270, 405, "основа").setOrigin(0, 0);
|
||
стрелы.setScale(25, 2).refreshBody();
|
||
стрелы.body.checkCollision.down = false;
|
||
стрелы.setVisible(false);
|
||
var столкновение = мир.сцена.physics.add.collider(мир.колобок, стрелы);
|
||
столкновение.collideCallback = function(a, b) {
|
||
мир.состояниеКолобка.прыжокПоСтрелам = true;
|
||
};
|
||
|
||
// Стрела в луку.
|
||
мир.стрелаКЛуку = мир.сцена.physics.add.sprite(1250, 380, "стрела").setOrigin(0, 0);
|
||
мир.стрелаКЛуку.setScale(0.5, 0.5).refreshBody();
|
||
мир.стрелаКЛуку.depth = 15;
|
||
|
||
// Учитываем платформы.
|
||
мир.сцена.physics.add.collider(мир.стрелаКЛуку, мир.каркас);
|
||
мир.сцена.physics.add.collider(мир.стрелаКЛуку, мир.платформы);
|
||
|
||
// Платформа для стрелы у лука, чтобы стрела оставалась в луке.
|
||
var платформы = мир.сцена.physics.add.staticGroup();
|
||
var платформаЛука = платформы.create(1280, 200, "основа").setOrigin(0, 0);
|
||
платформаЛука.body.checkCollision.down = false;
|
||
var столкновениеЛука = мир.сцена.physics.add.collider(мир.стрелаКЛуку, платформаЛука);
|
||
платформаЛука.setVisible(false);
|
||
|
||
// Определение заряда стрелы.
|
||
столкновениеЛука.collideCallback = function заряд(a, b) {
|
||
if (мир.стрелаКЛуку.body.touching.down && !мир.стрелаЗаряжена)
|
||
{
|
||
мир.стрелаЗаряжена = true;
|
||
мир.уведомить("стрела заряжена");
|
||
}
|
||
}
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ОтследитьПрыжокПоСтрелам = мир =>
|
||
{
|
||
мир.состояниеКолобка.прыжокПоСтрелам = null;
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ПроверитьНаличиеПрыжкаПоСтрелам = мир =>
|
||
{
|
||
if (!мир.состояниеКолобка.прыжокПоСтрелам)
|
||
{
|
||
return;
|
||
}
|
||
мир.уведомить("прыжок по платформе стрел");
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ПодкидыватьСтрелуКЛуку = мир =>
|
||
{
|
||
if (!мир.стрелаКЛуку.body.touching.down || мир.стрелаЗаряжена)
|
||
{
|
||
return;
|
||
}
|
||
var скорость = мир.состояниеКолобка.скоростьПадения * 0.9;
|
||
мир.стрелаКЛуку.setVelocityY(-скорость);
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ВоспроизвестиЗвукЗарядкиСтрелы = мир =>
|
||
{
|
||
мир.сцена.sound.play("звук-зарядки");
|
||
};
|
||
|
||
|
||
/*
|
||
*
|
||
* Последовательность
|
||
*
|
||
*/
|
||
|
||
|
||
мир.разобрать(`
|
||
загрузить ресурсы сцены
|
||
загрузить ресурсы избы
|
||
создать сцену
|
||
создать избу
|
||
создать полы и стены каркаса
|
||
создать платформы
|
||
позволить платформам пропускать прыжки
|
||
создать вещи
|
||
создать пауков
|
||
создать мышей
|
||
создать стрелы
|
||
обновить сцену
|
||
анимировать пауков
|
||
анимировать мышей
|
||
колобок начал прыжок
|
||
отследить прыжок по стрелам
|
||
колобок закончил прыжок
|
||
проверить наличие прыжка по стрелам
|
||
прыжок по платформе стрел
|
||
подкидывать стрелу к луку
|
||
стрела заряжена
|
||
воспроизвести звук зарядки стрелы
|
||
`);
|
||
|