// // // // // Основа избы // // // // мир.разобрать({ заголовок: "Колобку здесь быть", изображения: { дом: { ширина: 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; }; // Запустить звук избы мир.события.уведомить("вошли в избу"); // // // // // Пауки и мыши // // // // мир.разобрать({ объекты: { паук1: { x: 680, y: 300, ширина: 30, вид: { background: "url(р/животные/паук.png) no-repeat scroll 0% 0% / contain", }, физика: { isStatic: false, isSensor: true, }, }, мышь1: { x: 500, y: 555, высота: 70, ширина: 90, вид: { background: "url(р/животные/мышь.png) no-repeat scroll 0% 0% / contain", }, физика: { isStatic: false, isSensor: true, }, }, }, столкновения: { игрокПаук1: { объекты: ["паук1"], тела: ["игрок"], событие: "игрокПаук1", }, игрокМышь1: { объекты: ["мышь1"], тела: ["игрок"], событие: "игрокМышь1", }, леваяСтенаМышь1: { объекты: ["мышь1", "стенаЛевая"], событие: "леваяСтенаМышь1", }, праваяСтенаМышь1: { объекты: ["мышь1", "стенаПравая"], событие: "праваяСтенаМышь1", }, }, движение: { паук1: { объекты: ["паук1"], скорость: [0.7, 1], x: [610, 1080], y: [350, 450], }, мышь1: { объекты: ["мышь1"], скорость: [8, 1.0], x: [0, 2000], y: [590, 590], }, }, }); // // // // // Повреждение игрока // // // // 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 (событие == "игрокПаук1") { this.повредить(1); } else if (событие == "игрокМышь1") { this.повредить(10); } }; this.запомнитьМаску = function() { var за = мир.маскиПрыжков.задано; for (var имя in за) { var з = за[имя]; if (з.тело == имяТела) { this.имя = имя; this.маски = [з["маски.0"], з["маски.1"]]; return; } } }; this.выставитьМаскиПовреждения = function(значение) { var з = мир.маскиПрыжков.задано[this.имя]; з["маски.0"] = значение; з["маски.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 ПовреждениеИгрока( мир.события, мир.изображения.элементы.колобок, "игрок" ); function ПереворачиватьМышь(события, имяМыши) { this.создать = function() { события.подписать(this); }; this.обработатьСобытие = function(событие) { if (событие == "леваяСтенаМышь1") { /**/console.debug("соб. леваяСМ1"); мир.разобрать({ объекты: { мышь1: { вид: { transform: "scaleX(-1)", }, }, }, }); } else if (событие == "праваяСтенаМышь1") { /**/console.debug("соб. праваяСМ1"); мир.разобрать({ объекты: { мышь1: { вид: { transform: "scaleX(1)", }, }, }, }); } }; // Конструктор. this.создать(); } мир.переворачиватьМышь = new ПереворачиватьМышь( мир.события, "мышь1" ); // // // // // Подпол и стены // // // // мир.разобрать({ объекты: { полПодпола: { x: 0, y: 980, ширина: 2000, высота: 50, вид: { background: "url(р/отладка/основа.jpg)", //display: "none", }, физика: { collisionFilter: { category: 10, }, }, }, стенаЛевая: { x: -40, y: 0, высота: 1000, вид: { background: "url(р/отладка/основа.jpg)", display: "none", }, }, стенаПравая: { x: 2000, y: 0, высота: 1000, вид: { background: "url(р/отладка/основа.jpg)", display: "none", }, }, }, });