|
- // // // //
- // Основа избы
- // // // //
-
-
- мир.разобрать({
- заголовок: "Колобку здесь быть",
- изображения: {
- дом: {
- ширина: 2000,
- высота: 600,
- вид: {
- background: "url(р/сцены/изба.jpg)",
- },
- },
- },
- объекты: {
- полСлева: {
- x: 0,
- y: 580,
- ширина: 355,
- вид: {
- background: "url(р/отладка/основа.jpg)",
- display: "none",
- },
- },
- /*
- полКрышки: {
- x: 357,
- y: 580,
- ширина: 135,
- вид: {
- background: "url(р/отладка/основа.jpg)",
- display: "none",
- },
- },
- */
- полСправа: {
- x: 495,
- y: 580,
- ширина: 1505,
- вид: {
- background: "url(р/отладка/основа.jpg)",
- display: "none",
- },
- },
- стол: {
- x: 1253,
- y: 420,
- ширина: 610,
- вид: {
- background: "url(р/отладка/основа.jpg)",
- display: "none",
- },
- физика: {
- collisionFilter: {
- category: 2,
- },
- },
- },
- подоконник: {
- x: 1673,
- y: 375,
- ширина: 200,
- вид: {
- background: "url(р/отладка/основа.jpg)",
- display: "none",
- },
- физика: {
- angle: -0.0698,
- collisionFilter: {
- category: 2,
- },
- },
- },
- },
- звуки: {
- изба: {
- события: ["вошли в избу"],
- файл: "р/звуки/387922__setuniman__scheming-1o95.mp3",
- повторять: true,
- останов: ["покинули избу"],
- },
- },
- });
-
-
-
- // // // //
- // Игрок
- // // // //
-
-
- мир.разобрать({
- изображения: {
- колобок: {
- ширина: 70,
- высота: 70,
- вид: {
- background: "url(р/колобок/колобок_неподвижен.png)",
- //"z-index": 10,
- },
- },
- изоСенсорИгрока: {
- ширина: 70,
- высота: 70,
- вид: {
- background: "url(р/отладка/основа.jpg)",
- },
- },
- изоПодошваИгрока: {
- ширина: 40,
- высота: 20,
- вид: {
- background: "url(р/отладка/основа.jpg)",
- },
- },
- },
- тела: {
- подошваИгрока: {
- x: 100,
- y: 450,
- ширина: 40,
- высота: 20,
- часть: true,
- физика: {
- isStatic: false,
- inertia: Infinity,
- },
- },
- сенсорИгрока: {
- x: 100,
- y: 400,
- ширина: 70,
- высота: 70,
- часть: true,
- физика: {
- isSensor: true,
- isStatic: false,
- },
- },
- игрок: {
- части: ["подошваИгрока", "сенсорИгрока"],
- физика: {
- isStatic: false,
- inertia: Infinity,
- },
- },
- },
- объекты: {
- /*
- кирпич: {
- x: 100,
- y: 350,
- высота: 20,
- ширина: 40,
- вид: {
- background: "url(р/отладка/основа.jpg)",
- //display: "none",
- },
- физика: {
- isStatic: false,
- inertia: Infinity,
- },
- },
- */
- },
- игрок: {
- //объект: "кирпич",
- тело: "игрок",
- скорость: [5, 12.5],
- клавиши: ["ArrowLeft", "ArrowRight", "ArrowUp"],
- },
- слежение: {
- колобок: {
- //объект: "кирпич",
- тело: "игрок",
- изображение: "колобок",
- смещение: [-35, -35],
- скорость: 1,
- },
- камера: {
- //объект: "кирпич",
- тело: "игрок",
- скорость: 0.1,
- },
- /*
- сенсорИгрока: {
- тело: "сенсорИгрока",
- изображение: "изоСенсорИгрока",
- смещение: [-35, -35],
- },
- */
- /*
- подошваИгрока: {
- тело: "подошваИгрока",
- изображение: "изоПодошваИгрока",
- смещение: [-20, -10],
- },
- */
- },
- маскиПрыжков: {
- игрок: {
- //объект: "кирпич",
- тело: "игрок",
- скорость: -1,
- маски: [1, 1|2],
- },
- },
- звуки: {
- прыжокИгрока: {
- события: ["игрок начал прыжок"],
- файл: "р/звуки/331381__qubodup__public-domain-jump-sound.wav",
- },
- },
- });
-
-
-
- // // // //
- // Платформы и объекты печи
- // // // //
-
-
- мир.разобрать({
- объекты: {
- фундаментПечи: {
- x: 570,
- y: 470,
- ширина: 550,
- вид: {
- background: "url(р/отладка/основа.jpg)",
- display: "none",
- },
- физика: {
- collisionFilter: {
- category: 2,
- },
- },
- },
- полка1: {
- x: 660,
- y: 335,
- ширина: 40,
- высота: 10,
- вид: {
- background: "url(р/отладка/основа.jpg)",
- display: "none",
- },
- физика: {
- collisionFilter: {
- category: 2,
- },
- },
- },
- полка2: {
- x: 767,
- y: 335,
- ширина: 40,
- высота: 10,
- вид: {
- background: "url(р/отладка/основа.jpg)",
- display: "none",
- },
- физика: {
- collisionFilter: {
- category: 2,
- },
- },
- },
- полка3: {
- x: 855,
- y: 335,
- ширина: 40,
- высота: 10,
- вид: {
- background: "url(р/отладка/основа.jpg)",
- display: "none",
- },
- физика: {
- collisionFilter: {
- category: 2,
- },
- },
- },
- полкаСамовара: {
- x: 975,
- y: 355,
- ширина: 70,
- высота: 10,
- вид: {
- background: "url(р/отладка/основа.jpg)",
- display: "none",
- },
- физика: {
- collisionFilter: {
- category: 2,
- },
- },
- },
- лежанкаПечки: {
- x: 600,
- y: 242,
- ширина: 330,
- высота: 10,
- вид: {
- background: "url(р/отладка/основа.jpg)",
- display: "none",
- },
- физика: {
- collisionFilter: {
- category: 2,
- },
- },
- },
- основаниеТрубыПечки: {
- x: 937,
- y: 175,
- ширина: 130,
- высота: 10,
- вид: {
- background: "url(р/отладка/основа.jpg)",
- display: "none",
- },
- физика: {
- collisionFilter: {
- category: 2,
- },
- },
- },
- самовар: {
- x: 650,
- y: 300,
- ширина: 70,
- высота: 120,
- вид: {
- background: "url(р/вещи/самовар.png) no-repeat scroll 0% 0% / contain",
- },
- физика: {
- isStatic: false,
- //inertia: Infinity,
- },
- },
- },
- });
-
-
-
- // // // //
- // Подкидывание стрелы
- // // // //
-
-
- мир.разобрать({
- объекты: {
- сенсор: {
- x: 1280,
- y: 400,
- ширина: 120,
- вид: {
- background: "url(р/отладка/основа.jpg)",
- display: "none",
- },
- физика: {
- isStatic: true,
- isSensor: true,
- },
- },
- стрела: {
- x: 1230,
- y: 350,
- высота: 30,
- ширина: 200,
- вид: {
- display: "inline-block",
- background: "url(р/вещи/стрела.png) no-repeat scroll 0% 0% / contain",
- transform: "scaleX(-1)",
- },
- физика: {
- isStatic: false,
- inertia: Infinity,
- collisionFilter: {
- category: 4,
- },
- },
- },
- лук: {
- x: 1250,
- y: 200,
- ширина: 100,
- вид: {
- background: "url(р/отладка/основа.jpg)",
- display: "none",
- },
- физика: {
- isStatic: true,
- collisionFilter: {
- category: 4,
- },
- },
- },
- },
- столкновения: {
- стрелаНачало: {
- объекты: ["сенсор"],
- тела: ["игрок"],
- событие: "сенсор стрелы",
- },
- стрелаКонец: {
- объекты: ["стрела", "лук"],
- событие: "стрела и лук",
- },
- },
- маскиПрыжков: {
- стрела: {
- объект: "стрела",
- скорость: -1,
- маски: [0, 2|4]
- },
- },
- звуки: {
- зарядкаЛука: {
- события: ["закинули стрелу"],
- файл: "р/звуки/543927__eminyildirim__pistol-gun-cocking.wav",
- },
- },
- });
-
- function ПодкидываниеСтрелы() {
- this.создать = function() {
- this.времяСтрелы = null;
- this.времяПриземления = null;
- this.подкинули = false;
- this.закинули = false;
- this.завершить = null;
-
- мир.события.подписать(this);
- };
-
- this.обработатьСобытие = function(событие) {
- if (событие == "сенсор стрелы")
- {
- this.времяСтрелы = мир.физика.движок.timing.timestamp;
- this.подкинуть();
- }
- else if (событие == "игрок приземлился")
- {
- this.времяПриземления = мир.физика.движок.timing.timestamp;
- this.подкинуть();
- }
- else if (событие == "игрок начал прыжок")
- {
- this.времяСтрелы = null;
- this.времяПриземления = null;
- this.подкинули = false;
- }
- else if (
- (событие == "стрела и лук") &&
- this.закинули &&
- this.завершить
- ) {
- мир.события.уведомить("закинули стрелу");
- мир.события.отписать(this);
- this.завершить();
- }
- };
-
- this.подкинуть = function() {
- if (
- this.подкинули ||
- !this.времяСтрелы ||
- !this.времяПриземления ||
- Math.abs(this.времяСтрелы - this.времяПриземления) > 0.00001 ||
- Math.abs(мир.объекты.тела.стрела.velocity.y) > 0.00001
- ) {
- return;
- }
-
- this.подкинули = true;
- Matter.Body.setVelocity(
- мир.объекты.тела.стрела,
- { x: 0, y: -мир.игрок.приземление.скорость * 1.2 }
- );
-
- if (мир.игрок.приземление.скорость > 16)
- {
- this.закинули = true;
- }
- };
-
- // Конструктор.
- this.создать();
- }
-
- мир.подкидываниеСтрелы = new ПодкидываниеСтрелы();
- мир.подкидываниеСтрелы.завершить = function() {
- мир.подкидываниеСтрелы = null;
- };
-
-
- // Запустить звук избы
- мир.события.уведомить("вошли в избу");
-
-
-
- // // // //
- // Отладка событий
- // // // //
-
-
- function ОтладкаСобытий() {
- this.обработатьСобытие = function(событие) {
- if (событие.startsWith("игрокПаук"))
- {
- //console.debug("событие", событие);
- }
- };
-
- // Конструктор.
- мир.события.подписать(this);
- }
-
- мир.отладкаСобытий = new ОтладкаСобытий();
-
-
-
- // // // //
- // Пауки
- // // // //
-
- мир.разобрать({
- объекты: {
- паук1: {
- x: 680,
- y: 300,
- ширина: 30,
- вид: {
- background: "url(р/животные/паук.png) no-repeat scroll 0% 0% / contain",
- },
- физика: {
- isStatic: false,
- isSensor: true,
- },
- },
- },
- столкновения: {
- игрокПаук1: {
- объекты: ["паук1"],
- тела: ["игрок"],
- событие: "игрокПаук1",
- },
- },
- движение: {
- паук1: {
- объекты: ["паук1"],
- скорость: [0.7, 1],
- x: [610, 1080],
- y: [350, 450],
- },
- },
- });
-
-
- // // // //
- // Повреждение игрока
- // // // //
-
-
- function ПовреждениеИгрока(события, колобок, имяТела)
- {
- this.создать = function()
- {
- события.подписать(this);
- this.создатьМигание();
- this.запомнитьМаску();
- this.повреждение = null;
- };
-
- this.создатьМигание = function()
- {
- var вид = document.createElement('style')
- вид.innerText = `
- .мигание
- {
- animation: мигатель 0.5s linear infinite;
- }
-
- @keyframes мигатель
- {
- 50%
- {
- opacity: 0;
- }
- }
- `;
- document.head.appendChild(вид)
- };
-
- this.обработатьСобытие = function(событие)
- {
- if (событие.startsWith("игрокПаук"))
- {
- this.повредить();
- }
- };
-
- this.запомнитьМаску = function()
- {
- var за = мир.маскиПрыжков.задано;
- for (var имя in за)
- {
- var з = за[имя];
- if (з.тело == имяТела)
- {
- this.имя = имя;
- this.маски = [з["маски.0"], з["маски.1"]];
- return;
- }
- }
- };
-
- this.выставитьМаскиПовреждения = function()
- {
- var з = мир.маскиПрыжков.задано[this.имя];
- з["маски.0"] = 1;
- з["маски.1"] = 1;
- };
-
- this.вернутьПервоначальныеМаски = function()
- {
- var з = мир.маскиПрыжков.задано[this.имя];
- з["маски.0"] = this.маски[0];
- з["маски.1"] = this.маски[1];
- };
-
- this.повредить = function()
- {
- if (!this.повреждение)
- {
- колобок.classList.add("мигание");
- this.выставитьМаскиПовреждения();
- }
- this.повреждение = new Date();
- var тут = this;
- setTimeout(
- function() { тут.возможноПрекратить() },
- 5000
- );
-
- };
-
- this.возможноПрекратить = function()
- {
- if (!this.повреждение)
- {
- return;
- }
-
- var сейчас = new Date();
- var прошло = сейчас - this.повреждение;
- if (прошло > 4990)
- {
- колобок.classList.remove("мигание")
- this.вернутьПервоначальныеМаски();
- this.повреждение = null;
- }
- };
-
- // Конструктор.
- this.создать();
- }
-
- мир.повреждениеИгрока = new ПовреждениеИгрока(
- мир.события,
- мир.изображения.элементы.колобок,
- "игрок"
- );
-
-
- // // // //
- // Подпол и стены
- // // // //
-
-
- мир.разобрать({
- объекты: {
- полПодпола: {
- x: 0,
- y: 980,
- ширина: 2000,
- высота: 50,
- вид: {
- background: "url(р/отладка/основа.jpg)",
- //display: "none",
- },
- },
- стенаЛевая: {
- x: -40,
- y: 0,
- высота: 1000,
- вид: {
- background: "url(р/отладка/основа.jpg)",
- display: "none",
- },
- },
- стенаПравая: {
- x: 2000,
- y: 0,
- высота: 1000,
- вид: {
- background: "url(р/отладка/основа.jpg)",
- display: "none",
- },
- },
- },
- });
|