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

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