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

427 lines
13KB

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