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.

295 line
8.0KB

  1. /*
  2. *
  3. * Реакции
  4. *
  5. */
  6. ЗагрузитьРесурсыКолобка= мир =>
  7. {
  8. мир.сцена.load.spritesheet(
  9. "колобок",
  10. "ресурсы/колобок/колобок.png",
  11. {
  12. frameWidth: 97,
  13. frameHeight: 94,
  14. }
  15. );
  16. мир.сцена.load.audio("прыжок", "ресурсы/звуки/331381__qubodup__public-domain-jump-sound.wav");
  17. мир.сцена.load.audio("повреждение", "ресурсы/звуки/437650__dersuperanton__getting-hit-damage-scream.wav");
  18. };
  19. // // // //
  20. СоздатьКолобка = мир =>
  21. {
  22. мир.колобок = мир.сцена.physics.add.sprite(100, 500, "колобок");
  23. мир.колобок.depth = 10;
  24. мир.колобок.body.setSize(50);
  25. // Портит анимацию прыжков!
  26. //мир.колобок.setBounceY(0.1);
  27. // Следить за колобком камерой.
  28. const камера = мир.сцена.cameras.main;
  29. камера.startFollow(мир.колобок, false, 0.1, 0.1);
  30. мир.состояниеКолобка = {
  31. мигать: false,
  32. мигание: { },
  33. прыгучесть: -570,
  34. коэффициентПрыгучести: 1,
  35. };
  36. };
  37. // // // //
  38. СоздатьАнимацииКолобка = мир =>
  39. {
  40. var анимации = мир.сцена.anims;
  41. анимации.create({
  42. key: "колобок-неподвижен",
  43. frames: [{ key: "колобок", frame: 0 }],
  44. frameRate: 20,
  45. })
  46. анимации.create({
  47. key: "колобок-движение",
  48. frames: мир.сцена.anims.generateFrameNumbers("колобок", { start: 23, end: 1 }),
  49. frameRate: 20,
  50. repeat: -1,
  51. })
  52. анимации.create({
  53. key: "колобок-прыжок",
  54. frames: [{ key: "колобок", frame: 24 }],
  55. frameRate: 20,
  56. })
  57. };
  58. // // // //
  59. НастроитьСтолкновениеКолобка = мир =>
  60. {
  61. мир.сцена.physics.add.collider(мир.колобок, мир.каркас);
  62. мир.столкновениеВещи = мир.сцена.physics.add.collider(мир.колобок, мир.вещи);
  63. мир.столкновениеПлатформы = мир.сцена.physics.add.collider(мир.колобок, мир.платформы);
  64. var столкновениеВраги = мир.сцена.physics.add.collider(мир.колобок, мир.враги);
  65. столкновениеВраги.overlapOnly = true;
  66. столкновениеВраги.collideCallback = function(a, b) {
  67. мир.уведомить("столкновение с врагом");
  68. };
  69. };
  70. // // // //
  71. ПереместитьКолобка = мир =>
  72. {
  73. if (!мир.управление)
  74. {
  75. мир.колобок.setVelocityX(0);
  76. return;
  77. }
  78. var x = 0;
  79. if (мир.управление.направление == -1)
  80. {
  81. x = -200;
  82. мир.колобок.flipX = true;
  83. }
  84. else if (мир.управление.направление == 1)
  85. {
  86. x = 200;
  87. мир.колобок.flipX = false;
  88. }
  89. мир.колобок.setVelocityX(x);
  90. if (мир.управление.прыжок && мир.колобок.body.touching.down)
  91. {
  92. var скорость = мир.состояниеКолобка.прыгучесть * мир.состояниеКолобка.коэффициентПрыгучести;
  93. мир.колобок.setVelocityY(скорость);
  94. мир.сцена.sound.play("прыжок");
  95. }
  96. };
  97. // // // //
  98. АнимироватьКолобка = мир =>
  99. {
  100. var есть = "";
  101. if (мир.колобок.anims.currentAnim)
  102. {
  103. есть = мир.колобок.anims.currentAnim.key;
  104. }
  105. var надо = "колобок-неподвижен";
  106. if (мир.управление && мир.управление.прыжок && !мир.колобок.body.touching.down)
  107. {
  108. надо = "колобок-прыжок";
  109. }
  110. else if (мир.колобок.body.velocity.x != 0)
  111. {
  112. надо = "колобок-движение";
  113. }
  114. if (есть != надо)
  115. {
  116. мир.колобок.anims.play(надо);
  117. мир.уведомить("изменили анимацию колобка");
  118. }
  119. };
  120. // // // //
  121. ОтключитьСтолкновениеСПлатформамиИВещами = мир =>
  122. {
  123. мир.столкновениеПлатформы.active = false;
  124. мир.столкновениеВещи.active = false;
  125. };
  126. // // // //
  127. ВключитьСтолкновениеСПлатформамиИВещами = мир =>
  128. {
  129. мир.столкновениеПлатформы.active = true;
  130. мир.столкновениеВещи.active = true;
  131. };
  132. // // // //
  133. ОстановитьПередвижениеВещей = мир =>
  134. {
  135. var вещи = мир.вещи.getChildren();
  136. for (var н in вещи)
  137. {
  138. var вещь = вещи[н];
  139. if (вещь.body.touching.down)
  140. {
  141. вещь.body.stop();
  142. }
  143. }
  144. };
  145. // // // //
  146. НачатьМиганиеКолобка = мир =>
  147. {
  148. var конец = new Date();
  149. конец.setSeconds(конец.getSeconds() + 8);
  150. мир.состояниеКолобка.мигание.окончание = конец;
  151. var звук = мир.сцена.sound.get("повреждение");
  152. if (!звук || !звук.isPlaying)
  153. {
  154. мир.сцена.sound.play("повреждение");
  155. }
  156. if (мир.состояниеКолобка.мигать)
  157. {
  158. return;
  159. }
  160. мир.состояниеКолобка.мигать = true;
  161. мир.состояниеКолобка.мигание = {
  162. шаг: 0.1,
  163. цель: 0,
  164. };
  165. мир.уведомить("начали мигать колобка");
  166. };
  167. // // // //
  168. МигатьКолобка = мир =>
  169. {
  170. if (!мир.состояниеКолобка.мигать)
  171. {
  172. return;
  173. }
  174. var м = мир.состояниеКолобка.мигание;
  175. var сейчас = new Date();
  176. if (м.окончание - сейчас < 0)
  177. {
  178. мир.состояниеКолобка.мигать = false;
  179. мир.колобок.alpha = 1;
  180. мир.уведомить("закончили мигать колобка");
  181. return;
  182. }
  183. var к = (м.цель == 1) ? 1 : -1;
  184. мир.колобок.alpha += к * м.шаг;
  185. if ((мир.колобок.alpha <= 0) || (мир.колобок.alpha >= 1))
  186. {
  187. м.цель = к * -1;
  188. }
  189. };
  190. // // // //
  191. УменьшитьПрыгучестьКолобка = мир =>
  192. {
  193. мир.состояниеКолобка.коэффициентПрыгучести = 0.6;
  194. };
  195. // // // //
  196. ВосстановитьПрыгучестьКолобка = мир =>
  197. {
  198. мир.состояниеКолобка.коэффициентПрыгучести = 1;
  199. };
  200. /*
  201. *
  202. * Последовательность
  203. *
  204. */
  205. мир.разобрать(`
  206. загрузить ресурсы сцены
  207. загрузить ресурсы колобка
  208. создать сцену
  209. создать колобка
  210. создать анимации колобка
  211. настроить столкновение колобка
  212. столкновение с врагом
  213. начать мигание колобка
  214. обновить сцену
  215. переместить колобка
  216. анимировать колобка
  217. мигать колобка
  218. остановить передвижение вещей
  219. начали мигать колобка
  220. отключить столкновение с платформами и вещами
  221. уменьшить прыгучесть колобка
  222. закончили мигать колобка
  223. включить столкновение с платформами и вещами
  224. восстановить прыгучесть колобка
  225. `);