Проверить Matter.js
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

510 line
14KB

  1. // // // //
  2. // Основа избы
  3. // // // //
  4. мир.разобрать({
  5. заголовок: "Колобку здесь быть",
  6. изображения: {
  7. дом: {
  8. ширина: 2000,
  9. высота: 600,
  10. вид: {
  11. background: "url(р/сцены/изба.jpg)",
  12. },
  13. },
  14. },
  15. объекты: {
  16. полСлева: {
  17. x: 0,
  18. y: 580,
  19. ширина: 355,
  20. вид: {
  21. background: "url(р/отладка/основа.jpg)",
  22. display: "none",
  23. },
  24. },
  25. полКрышки: {
  26. x: 357,
  27. y: 580,
  28. ширина: 135,
  29. вид: {
  30. background: "url(р/отладка/основа.jpg)",
  31. display: "none",
  32. },
  33. },
  34. полСправа: {
  35. x: 495,
  36. y: 580,
  37. ширина: 1505,
  38. вид: {
  39. background: "url(р/отладка/основа.jpg)",
  40. display: "none",
  41. },
  42. },
  43. стол: {
  44. x: 1253,
  45. y: 420,
  46. ширина: 610,
  47. вид: {
  48. background: "url(р/отладка/основа.jpg)",
  49. display: "none",
  50. },
  51. физика: {
  52. collisionFilter: {
  53. category: 2,
  54. },
  55. },
  56. },
  57. подоконник: {
  58. x: 1673,
  59. y: 375,
  60. ширина: 200,
  61. вид: {
  62. background: "url(р/отладка/основа.jpg)",
  63. display: "none",
  64. },
  65. физика: {
  66. angle: -0.0698,
  67. collisionFilter: {
  68. category: 2,
  69. },
  70. },
  71. },
  72. },
  73. звуки: {
  74. изба: {
  75. события: ["вошли в избу"],
  76. файл: "р/звуки/387922__setuniman__scheming-1o95.mp3",
  77. повторять: true,
  78. останов: ["покинули избу"],
  79. },
  80. },
  81. });
  82. // // // //
  83. // Игрок
  84. // // // //
  85. мир.разобрать({
  86. изображения: {
  87. колобок: {
  88. ширина: 70,
  89. высота: 70,
  90. вид: {
  91. background: "url(р/колобок/колобок_неподвижен.png)",
  92. //"z-index": 10,
  93. },
  94. },
  95. },
  96. объекты: {
  97. кирпич: {
  98. x: 1170,
  99. y: 350,
  100. высота: 20,
  101. ширина: 40,
  102. вид: {
  103. background: "url(р/отладка/основа.jpg)",
  104. //display: "none",
  105. },
  106. физика: {
  107. isStatic: false,
  108. inertia: Infinity,
  109. },
  110. },
  111. },
  112. игрок: {
  113. объект: "рт",
  114. //объект: "кирпич",
  115. скорость: [5, 12.5],
  116. клавиши: ["ArrowLeft", "ArrowRight", "ArrowUp"],
  117. },
  118. слежение: {
  119. /*
  120. колобок: {
  121. объект: "кирпич",
  122. изображение: "колобок",
  123. смещение: [-35, -60],
  124. скорость: 1,
  125. },
  126. */
  127. камера: {
  128. объект: "рт",
  129. //объект: "кирпич",
  130. скорость: 0.1,
  131. },
  132. },
  133. маскиПрыжков: {
  134. игрок: {
  135. объект: "рт",
  136. //объект: "кирпич",
  137. скорость: -1,
  138. маски: [1, 1|2],
  139. },
  140. },
  141. звуки: {
  142. прыжокИгрока: {
  143. события: ["игрок начал прыжок"],
  144. файл: "р/звуки/331381__qubodup__public-domain-jump-sound.wav",
  145. },
  146. },
  147. });
  148. // // // //
  149. // Платформы и объекты печи
  150. // // // //
  151. мир.разобрать({
  152. объекты: {
  153. фундаментПечи: {
  154. x: 570,
  155. y: 470,
  156. ширина: 550,
  157. вид: {
  158. background: "url(р/отладка/основа.jpg)",
  159. display: "none",
  160. },
  161. физика: {
  162. collisionFilter: {
  163. category: 2,
  164. },
  165. },
  166. },
  167. полка1: {
  168. x: 660,
  169. y: 335,
  170. ширина: 40,
  171. высота: 10,
  172. вид: {
  173. background: "url(р/отладка/основа.jpg)",
  174. display: "none",
  175. },
  176. физика: {
  177. collisionFilter: {
  178. category: 2,
  179. },
  180. },
  181. },
  182. полка2: {
  183. x: 767,
  184. y: 335,
  185. ширина: 40,
  186. высота: 10,
  187. вид: {
  188. background: "url(р/отладка/основа.jpg)",
  189. display: "none",
  190. },
  191. физика: {
  192. collisionFilter: {
  193. category: 2,
  194. },
  195. },
  196. },
  197. полка3: {
  198. x: 855,
  199. y: 335,
  200. ширина: 40,
  201. высота: 10,
  202. вид: {
  203. background: "url(р/отладка/основа.jpg)",
  204. display: "none",
  205. },
  206. физика: {
  207. collisionFilter: {
  208. category: 2,
  209. },
  210. },
  211. },
  212. полкаСамовара: {
  213. x: 975,
  214. y: 355,
  215. ширина: 70,
  216. высота: 10,
  217. вид: {
  218. background: "url(р/отладка/основа.jpg)",
  219. display: "none",
  220. },
  221. физика: {
  222. collisionFilter: {
  223. category: 2,
  224. },
  225. },
  226. },
  227. лежанкаПечки: {
  228. x: 600,
  229. y: 242,
  230. ширина: 330,
  231. высота: 10,
  232. вид: {
  233. background: "url(р/отладка/основа.jpg)",
  234. display: "none",
  235. },
  236. физика: {
  237. collisionFilter: {
  238. category: 2,
  239. },
  240. },
  241. },
  242. основаниеТрубыПечки: {
  243. x: 937,
  244. y: 175,
  245. ширина: 130,
  246. высота: 10,
  247. вид: {
  248. background: "url(р/отладка/основа.jpg)",
  249. display: "none",
  250. },
  251. физика: {
  252. collisionFilter: {
  253. category: 2,
  254. },
  255. },
  256. },
  257. самовар: {
  258. x: 650,
  259. y: 300,
  260. ширина: 70,
  261. высота: 120,
  262. вид: {
  263. background: "url(р/вещи/самовар.png) no-repeat scroll 0% 0% / contain",
  264. },
  265. физика: {
  266. isStatic: false,
  267. //inertia: Infinity,
  268. },
  269. },
  270. },
  271. });
  272. // // // //
  273. // Подкидывание стрелы
  274. // // // //
  275. мир.разобрать({
  276. объекты: {
  277. сенсор: {
  278. x: 1280,
  279. y: 400,
  280. ширина: 120,
  281. вид: {
  282. background: "url(р/отладка/основа.jpg)",
  283. display: "none",
  284. },
  285. физика: {
  286. isStatic: true,
  287. isSensor: true,
  288. },
  289. },
  290. стрела: {
  291. x: 1230,
  292. y: 350,
  293. высота: 30,
  294. ширина: 200,
  295. вид: {
  296. display: "inline-block",
  297. background: "url(р/вещи/стрела.png) no-repeat scroll 0% 0% / contain",
  298. transform: "scaleX(-1)",
  299. },
  300. физика: {
  301. isStatic: false,
  302. inertia: Infinity,
  303. collisionFilter: {
  304. category: 4,
  305. },
  306. },
  307. },
  308. лук: {
  309. x: 1250,
  310. y: 200,
  311. ширина: 100,
  312. вид: {
  313. background: "url(р/отладка/основа.jpg)",
  314. display: "none",
  315. },
  316. физика: {
  317. isStatic: true,
  318. collisionFilter: {
  319. category: 4,
  320. },
  321. },
  322. },
  323. },
  324. столкновения: {
  325. стрелаНачало: {
  326. объекты: ["кирпич", "сенсор"],
  327. событие: "сенсор стрелы",
  328. },
  329. стрелаКонец: {
  330. объекты: ["стрела", "лук"],
  331. событие: "стрела и лук",
  332. },
  333. },
  334. маскиПрыжков: {
  335. стрела: {
  336. объект: "стрела",
  337. скорость: -1,
  338. маски: [0, 2|4]
  339. },
  340. },
  341. звуки: {
  342. зарядкаЛука: {
  343. события: ["закинули стрелу"],
  344. файл: "р/звуки/543927__eminyildirim__pistol-gun-cocking.wav",
  345. },
  346. },
  347. });
  348. function ПодкидываниеСтрелы() {
  349. this.создать = function() {
  350. this.времяСтрелы = null;
  351. this.времяПриземления = null;
  352. this.подкинули = false;
  353. this.закинули = false;
  354. this.завершить = null;
  355. мир.события.подписать(this);
  356. };
  357. this.обработатьСобытие = function(событие) {
  358. if (событие == "сенсор стрелы")
  359. {
  360. this.времяСтрелы = мир.физика.движок.timing.timestamp;
  361. this.подкинуть();
  362. }
  363. else if (событие == "игрок приземлился")
  364. {
  365. this.времяПриземления = мир.физика.движок.timing.timestamp;
  366. this.подкинуть();
  367. }
  368. else if (событие == "игрок начал прыжок")
  369. {
  370. this.времяСтрелы = null;
  371. this.времяПриземления = null;
  372. this.подкинули = false;
  373. }
  374. else if (
  375. (событие == "стрела и лук") &&
  376. this.закинули &&
  377. this.завершить
  378. ) {
  379. мир.события.уведомить("закинули стрелу");
  380. мир.события.отписать(this);
  381. this.завершить();
  382. }
  383. };
  384. this.подкинуть = function() {
  385. if (
  386. this.подкинули ||
  387. !this.времяСтрелы ||
  388. !this.времяПриземления ||
  389. Math.abs(this.времяСтрелы - this.времяПриземления) > 0.00001 ||
  390. Math.abs(мир.объекты.тела.стрела.velocity.y) > 0.00001
  391. ) {
  392. return;
  393. }
  394. this.подкинули = true;
  395. Matter.Body.setVelocity(
  396. мир.объекты.тела.стрела,
  397. { x: 0, y: -мир.игрок.приземление.скорость * 1.2 }
  398. );
  399. if (мир.игрок.приземление.скорость > 16)
  400. {
  401. this.закинули = true;
  402. }
  403. };
  404. // Конструктор.
  405. this.создать();
  406. }
  407. мир.подкидываниеСтрелы = new ПодкидываниеСтрелы();
  408. мир.подкидываниеСтрелы.завершить = function() {
  409. мир.подкидываниеСтрелы = null;
  410. };
  411. // Запустить звук избы
  412. мир.события.уведомить("вошли в избу");
  413. // // // //
  414. // Отладка событий
  415. // // // //
  416. function ОтладкаСобытий() {
  417. this.обработатьСобытие = function(событие) {
  418. if (событие.startsWith("игрокПаук"))
  419. {
  420. console.debug("событие", событие);
  421. }
  422. };
  423. // Конструктор.
  424. мир.события.подписать(this);
  425. }
  426. мир.отладкаСобытий = new ОтладкаСобытий();
  427. // // // //
  428. // Пауки
  429. // // // //
  430. мир.разобрать({
  431. объекты: {
  432. паук1: {
  433. x: 680,
  434. y: 300,
  435. ширина: 30,
  436. вид: {
  437. background: "url(р/животные/паук.png) no-repeat scroll 0% 0% / contain",
  438. },
  439. физика: {
  440. isStatic: false,
  441. isSensor: true,
  442. },
  443. },
  444. },
  445. столкновения: {
  446. игрокПаук1: {
  447. объекты: ["кирпич", "паук1"],
  448. событие: "игрокПаук1",
  449. },
  450. проверкаСенсораИгрокаРТ: {
  451. объекты: ["рт", "паук1"],
  452. событие: "игрокПаукРТ",
  453. },
  454. проверкаСенсораИгрокаРТ1: {
  455. объекты: ["рт1", "паук1"],
  456. событие: "игрокПаукРТ1",
  457. },
  458. проверкаСенсораИгрокаРТ2: {
  459. объекты: ["рт2", "паук1"],
  460. событие: "игрокПаукРТ2",
  461. },
  462. },
  463. движение: {
  464. паук1: {
  465. объекты: ["паук1"],
  466. скорость: [0.7, 1],
  467. x: [610, 1080],
  468. y: [350, 450],
  469. },
  470. },
  471. });