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

543 lines
15KB

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