Колобок на Phaser
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.

176 lines
4.9KB

  1. /*
  2. *
  3. * Реакции
  4. *
  5. */
  6. НастроитьМышьИКлаву = мир =>
  7. {
  8. мир.сцена.input.mouse.disableContextMenu();
  9. мир.клавиши = мир.сцена.input.keyboard.createCursorKeys();
  10. };
  11. // // // //
  12. УведомитьОМыши = мир =>
  13. {
  14. var мышь = мир.сцена.input.activePointer;
  15. const новое = {
  16. "x": мышь.x,
  17. "y": мышь.y,
  18. "нажата": мышь.isDown,
  19. };
  20. if (
  21. мир.мышь &&
  22. мир.мышь.x == новое.x &&
  23. мир.мышь.y == новое.y &&
  24. мир.мышь.нажата == новое.нажата
  25. ) {
  26. // Ничего не делаем.
  27. }
  28. else
  29. {
  30. мир.мышь = новое;
  31. мир.уведомить("изменили мышь");
  32. }
  33. };
  34. // // // //
  35. УведомитьОКлаве = мир =>
  36. {
  37. var новое = {
  38. "направление": 0,
  39. "прыжок": false,
  40. };
  41. if (мир.клавиши.left.isDown)
  42. {
  43. новое.направление = -1;
  44. }
  45. else if (мир.клавиши.right.isDown)
  46. {
  47. новое.направление = 1;
  48. }
  49. if (мир.клавиши.space.isDown || мир.клавиши.up.isDown)
  50. {
  51. новое.прыжок = true;
  52. }
  53. if (
  54. мир.клава &&
  55. мир.клава.направление == новое.направление &&
  56. мир.клава.прыжок == новое.прыжок
  57. ) {
  58. // Ничего не делаем.
  59. }
  60. else
  61. {
  62. мир.клава = новое;
  63. мир.уведомить("изменили клаву");
  64. }
  65. };
  66. // // // //
  67. УведомитьОбУправленииКлавой = мир =>
  68. {
  69. const естьДвижение = (мир.клава.направление != 0 || мир.клава.прыжок);
  70. // Начало движения.
  71. if (!мир.управление && естьДвижение)
  72. {
  73. мир.управление = мир.клава;
  74. мир.уведомить("изменили управление");
  75. }
  76. // Окончание движения.
  77. else if (мир.управление && !естьДвижение)
  78. {
  79. мир.управление = null;
  80. мир.уведомить("изменили управление");
  81. }
  82. // Продолжение движения.
  83. else if (
  84. (мир.управление && естьДвижение) &&
  85. (
  86. (мир.управление.направление != мир.клава.направление) ||
  87. (мир.управление.прыжок != мир.клава.прыжок)
  88. )
  89. ) {
  90. мир.управление = мир.клава;
  91. мир.уведомить("изменили управление");
  92. }
  93. };
  94. // // // //
  95. УведомитьОбУправленииМышью = мир =>
  96. {
  97. const камера = мир.сцена.cameras.main;
  98. const ширина = камера.width;
  99. const высота = камера.height;
  100. var новое = {
  101. "направление": 0, // Центр.
  102. "прыжок": false,
  103. };
  104. новое.прыжок = (мир.мышь.y < высота * 0.45);
  105. if (мир.мышь.x < ширина * 0.45)
  106. {
  107. новое.направление = -1; // Лево.
  108. }
  109. else if (мир.мышь.x > ширина * 0.55)
  110. {
  111. новое.направление = 1; // Право.
  112. }
  113. // Начало движения.
  114. if (!мир.управление && мир.мышь.нажата)
  115. {
  116. мир.управление = новое;
  117. мир.уведомить("изменили управление");
  118. }
  119. // Окончание движения.
  120. else if (мир.управление && !мир.мышь.нажата)
  121. {
  122. мир.управление = null;
  123. мир.уведомить("изменили управление");
  124. }
  125. // Продолжение движения.
  126. else if (
  127. (мир.управление && мир.мышь.нажата) &&
  128. (
  129. (мир.управление.направление != новое.направление) ||
  130. (мир.управление.прыжок != новое.прыжок)
  131. )
  132. ) {
  133. мир.управление = новое;
  134. мир.уведомить("изменили управление");
  135. }
  136. };
  137. /*
  138. *
  139. * Последовательность
  140. *
  141. */
  142. мир.разобрать(`
  143. создать сцену
  144. настроить мышь и клаву
  145. обновить сцену
  146. уведомить о клаве
  147. уведомить о мыши
  148. изменили мышь
  149. уведомить об управлении мышью
  150. изменили клаву
  151. уведомить об управлении клавой
  152. `);