Files
mjs/800.пример.json.js

784 lines
21 KiB
JavaScript
Raw Permalink 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.

// // // //
// Основа избы
// // // //
мир.разобрать({
заголовок: "Колобку здесь быть",
изображения: {
дом: {
ширина: 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",
},
},
},
});