Проверить 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.

585 lines
16KB

  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. ширина: 70,
  97. высота: 70,
  98. вид: {
  99. background: "url(р/отладка/основа.jpg)",
  100. },
  101. },
  102. изоПодошваИгрока: {
  103. ширина: 40,
  104. высота: 20,
  105. вид: {
  106. background: "url(р/отладка/основа.jpg)",
  107. },
  108. },
  109. },
  110. тела: {
  111. подошваИгрока: {
  112. x: 100,
  113. y: 450,
  114. ширина: 40,
  115. высота: 20,
  116. часть: true,
  117. физика: {
  118. isStatic: false,
  119. inertia: Infinity,
  120. },
  121. },
  122. сенсорИгрока: {
  123. x: 100,
  124. y: 400,
  125. ширина: 70,
  126. высота: 70,
  127. часть: true,
  128. физика: {
  129. isSensor: true,
  130. isStatic: false,
  131. },
  132. },
  133. игрок: {
  134. части: ["подошваИгрока", "сенсорИгрока"],
  135. физика: {
  136. isStatic: false,
  137. inertia: Infinity,
  138. },
  139. },
  140. },
  141. объекты: {
  142. кирпич: {
  143. x: 100,
  144. y: 350,
  145. высота: 20,
  146. ширина: 40,
  147. вид: {
  148. background: "url(р/отладка/основа.jpg)",
  149. //display: "none",
  150. },
  151. физика: {
  152. isStatic: false,
  153. inertia: Infinity,
  154. },
  155. },
  156. /*
  157. сенсорИгрока: {
  158. x: 170,
  159. y: 350,
  160. высота: 70,
  161. ширина: 70,
  162. вид: {
  163. background: "url(р/отладка/основа.jpg)",
  164. },
  165. физика: {
  166. isSensor: true,
  167. },
  168. },
  169. игрок: {
  170. x: 100,
  171. y: 350,
  172. части: ["кирпич", "сенсорИгрока"],
  173. физика: {
  174. isStatic: false,
  175. inertia: Infinity,
  176. },
  177. },
  178. */
  179. },
  180. игрок: {
  181. объект: "кирпич",
  182. скорость: [5, 12.5],
  183. клавиши: ["ArrowLeft", "ArrowRight", "ArrowUp"],
  184. },
  185. слежение: {
  186. колобок: {
  187. объект: "кирпич",
  188. изображение: "колобок",
  189. смещение: [-35, -60],
  190. скорость: 1,
  191. },
  192. камера: {
  193. объект: "кирпич",
  194. скорость: 0.1,
  195. },
  196. сенсорИгрока: {
  197. тело: "сенсорИгрока",
  198. изображение: "изоСенсорИгрока",
  199. смещение: [-35, -35],
  200. },
  201. подошваИгрока: {
  202. тело: "подошваИгрока",
  203. изображение: "изоПодошваИгрока",
  204. смещение: [-20, -10],
  205. },
  206. },
  207. маскиПрыжков: {
  208. игрок: {
  209. объект: "кирпич",
  210. скорость: -1,
  211. маски: [1, 1|2],
  212. },
  213. },
  214. звуки: {
  215. прыжокИгрока: {
  216. события: ["игрок начал прыжок"],
  217. файл: "р/звуки/331381__qubodup__public-domain-jump-sound.wav",
  218. },
  219. },
  220. });
  221. // // // //
  222. // Платформы и объекты печи
  223. // // // //
  224. мир.разобрать({
  225. объекты: {
  226. фундаментПечи: {
  227. x: 570,
  228. y: 470,
  229. ширина: 550,
  230. вид: {
  231. background: "url(р/отладка/основа.jpg)",
  232. display: "none",
  233. },
  234. физика: {
  235. collisionFilter: {
  236. category: 2,
  237. },
  238. },
  239. },
  240. полка1: {
  241. x: 660,
  242. y: 335,
  243. ширина: 40,
  244. высота: 10,
  245. вид: {
  246. background: "url(р/отладка/основа.jpg)",
  247. display: "none",
  248. },
  249. физика: {
  250. collisionFilter: {
  251. category: 2,
  252. },
  253. },
  254. },
  255. полка2: {
  256. x: 767,
  257. y: 335,
  258. ширина: 40,
  259. высота: 10,
  260. вид: {
  261. background: "url(р/отладка/основа.jpg)",
  262. display: "none",
  263. },
  264. физика: {
  265. collisionFilter: {
  266. category: 2,
  267. },
  268. },
  269. },
  270. полка3: {
  271. x: 855,
  272. y: 335,
  273. ширина: 40,
  274. высота: 10,
  275. вид: {
  276. background: "url(р/отладка/основа.jpg)",
  277. display: "none",
  278. },
  279. физика: {
  280. collisionFilter: {
  281. category: 2,
  282. },
  283. },
  284. },
  285. полкаСамовара: {
  286. x: 975,
  287. y: 355,
  288. ширина: 70,
  289. высота: 10,
  290. вид: {
  291. background: "url(р/отладка/основа.jpg)",
  292. display: "none",
  293. },
  294. физика: {
  295. collisionFilter: {
  296. category: 2,
  297. },
  298. },
  299. },
  300. лежанкаПечки: {
  301. x: 600,
  302. y: 242,
  303. ширина: 330,
  304. высота: 10,
  305. вид: {
  306. background: "url(р/отладка/основа.jpg)",
  307. display: "none",
  308. },
  309. физика: {
  310. collisionFilter: {
  311. category: 2,
  312. },
  313. },
  314. },
  315. основаниеТрубыПечки: {
  316. x: 937,
  317. y: 175,
  318. ширина: 130,
  319. высота: 10,
  320. вид: {
  321. background: "url(р/отладка/основа.jpg)",
  322. display: "none",
  323. },
  324. физика: {
  325. collisionFilter: {
  326. category: 2,
  327. },
  328. },
  329. },
  330. самовар: {
  331. x: 650,
  332. y: 300,
  333. ширина: 70,
  334. высота: 120,
  335. вид: {
  336. background: "url(р/вещи/самовар.png) no-repeat scroll 0% 0% / contain",
  337. },
  338. физика: {
  339. isStatic: false,
  340. //inertia: Infinity,
  341. },
  342. },
  343. },
  344. });
  345. // // // //
  346. // Подкидывание стрелы
  347. // // // //
  348. мир.разобрать({
  349. объекты: {
  350. сенсор: {
  351. x: 1280,
  352. y: 400,
  353. ширина: 120,
  354. вид: {
  355. background: "url(р/отладка/основа.jpg)",
  356. display: "none",
  357. },
  358. физика: {
  359. isStatic: true,
  360. isSensor: true,
  361. },
  362. },
  363. стрела: {
  364. x: 1230,
  365. y: 350,
  366. высота: 30,
  367. ширина: 200,
  368. вид: {
  369. display: "inline-block",
  370. background: "url(р/вещи/стрела.png) no-repeat scroll 0% 0% / contain",
  371. transform: "scaleX(-1)",
  372. },
  373. физика: {
  374. isStatic: false,
  375. inertia: Infinity,
  376. collisionFilter: {
  377. category: 4,
  378. },
  379. },
  380. },
  381. лук: {
  382. x: 1250,
  383. y: 200,
  384. ширина: 100,
  385. вид: {
  386. background: "url(р/отладка/основа.jpg)",
  387. display: "none",
  388. },
  389. физика: {
  390. isStatic: true,
  391. collisionFilter: {
  392. category: 4,
  393. },
  394. },
  395. },
  396. },
  397. столкновения: {
  398. стрелаНачало: {
  399. объекты: ["кирпич", "сенсор"],
  400. событие: "сенсор стрелы",
  401. },
  402. стрелаКонец: {
  403. объекты: ["стрела", "лук"],
  404. событие: "стрела и лук",
  405. },
  406. },
  407. маскиПрыжков: {
  408. стрела: {
  409. объект: "стрела",
  410. скорость: -1,
  411. маски: [0, 2|4]
  412. },
  413. },
  414. звуки: {
  415. зарядкаЛука: {
  416. события: ["закинули стрелу"],
  417. файл: "р/звуки/543927__eminyildirim__pistol-gun-cocking.wav",
  418. },
  419. },
  420. });
  421. function ПодкидываниеСтрелы() {
  422. this.создать = function() {
  423. this.времяСтрелы = null;
  424. this.времяПриземления = null;
  425. this.подкинули = false;
  426. this.закинули = false;
  427. this.завершить = null;
  428. мир.события.подписать(this);
  429. };
  430. this.обработатьСобытие = function(событие) {
  431. if (событие == "сенсор стрелы")
  432. {
  433. this.времяСтрелы = мир.физика.движок.timing.timestamp;
  434. this.подкинуть();
  435. }
  436. else if (событие == "игрок приземлился")
  437. {
  438. this.времяПриземления = мир.физика.движок.timing.timestamp;
  439. this.подкинуть();
  440. }
  441. else if (событие == "игрок начал прыжок")
  442. {
  443. this.времяСтрелы = null;
  444. this.времяПриземления = null;
  445. this.подкинули = false;
  446. }
  447. else if (
  448. (событие == "стрела и лук") &&
  449. this.закинули &&
  450. this.завершить
  451. ) {
  452. мир.события.уведомить("закинули стрелу");
  453. мир.события.отписать(this);
  454. this.завершить();
  455. }
  456. };
  457. this.подкинуть = function() {
  458. if (
  459. this.подкинули ||
  460. !this.времяСтрелы ||
  461. !this.времяПриземления ||
  462. Math.abs(this.времяСтрелы - this.времяПриземления) > 0.00001 ||
  463. Math.abs(мир.объекты.тела.стрела.velocity.y) > 0.00001
  464. ) {
  465. return;
  466. }
  467. this.подкинули = true;
  468. Matter.Body.setVelocity(
  469. мир.объекты.тела.стрела,
  470. { x: 0, y: -мир.игрок.приземление.скорость * 1.2 }
  471. );
  472. if (мир.игрок.приземление.скорость > 16)
  473. {
  474. this.закинули = true;
  475. }
  476. };
  477. // Конструктор.
  478. this.создать();
  479. }
  480. мир.подкидываниеСтрелы = new ПодкидываниеСтрелы();
  481. мир.подкидываниеСтрелы.завершить = function() {
  482. мир.подкидываниеСтрелы = null;
  483. };
  484. // Запустить звук избы
  485. мир.события.уведомить("вошли в избу");
  486. // // // //
  487. // Отладка событий
  488. // // // //
  489. function ОтладкаСобытий() {
  490. this.обработатьСобытие = function(событие) {
  491. if (событие.startsWith("игрокПаук"))
  492. {
  493. console.debug("событие", событие);
  494. }
  495. };
  496. // Конструктор.
  497. мир.события.подписать(this);
  498. }
  499. мир.отладкаСобытий = new ОтладкаСобытий();
  500. // // // //
  501. // Пауки
  502. // // // //
  503. мир.разобрать({
  504. объекты: {
  505. паук1: {
  506. x: 680,
  507. y: 300,
  508. ширина: 30,
  509. вид: {
  510. background: "url(р/животные/паук.png) no-repeat scroll 0% 0% / contain",
  511. },
  512. физика: {
  513. isStatic: false,
  514. isSensor: true,
  515. },
  516. },
  517. },
  518. столкновения: {
  519. игрокПаук1: {
  520. объекты: ["кирпич", "паук1"],
  521. событие: "игрокПаук1",
  522. },
  523. /*
  524. проверкаСенсораИгрокаРТ: {
  525. объекты: ["рт", "паук1"],
  526. событие: "игрокПаукРТ",
  527. },
  528. проверкаСенсораИгрокаРТ1: {
  529. объекты: ["рт1", "паук1"],
  530. событие: "игрокПаукРТ1",
  531. },
  532. проверкаСенсораИгрокаРТ2: {
  533. объекты: ["рт2", "паук1"],
  534. событие: "игрокПаукРТ2",
  535. },
  536. */
  537. },
  538. движение: {
  539. паук1: {
  540. объекты: ["паук1"],
  541. скорость: [0.7, 1],
  542. x: [610, 1080],
  543. y: [350, 450],
  544. },
  545. },
  546. });