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

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