Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

72 строки
2.2KB

  1. function Сцена(состояние, события)
  2. {
  3. this.создать = function()
  4. {
  5. this.умолчание = {
  6. скорость: [1, 1],
  7. };
  8. this.задано = {};
  9. события.подписать(this);
  10. };
  11. this.обработатьКлюч = function(ключ, путь, значение)
  12. {
  13. if (путь[0] != "сцена")
  14. {
  15. return;
  16. }
  17. var свойство = путь.slice(1).join(".");
  18. this.задано[свойство] = значение;
  19. };
  20. this.обработатьНажатиеМышиУказатьИНажать = function(x, y, указатель)
  21. {
  22. var тип = this.задано["тип"];
  23. var игрок = this.задано["игрок"];
  24. var цель = this.задано["цель"];
  25. if (!тип || !игрок || !цель || тип != "указать и нажать")
  26. {
  27. return;
  28. }
  29. var тело = мир.тела.тела[цель];
  30. if (!тело)
  31. {
  32. return;
  33. }
  34. var пр = [
  35. тело.bounds.min.x,
  36. тело.bounds.min.y,
  37. тело.bounds.max.x - тело.bounds.min.x,
  38. тело.bounds.max.y - тело.bounds.min.y,
  39. ]
  40. let ширина = пр[2];
  41. пр[0] = x - ширина;
  42. состояние.разобрать({
  43. тела: {
  44. [цель]: {
  45. пр: пр,
  46. },
  47. },
  48. });
  49. };
  50. this.обработатьСобытие = function(событие)
  51. {
  52. let префикс = "мышь/нажатие/";
  53. if (событие.startsWith(префикс))
  54. {
  55. let значения = событие.substring(префикс.length).split("/");
  56. let x = Number(значения[0]);
  57. let y = Number(значения[1]);
  58. let указатель = значения[2];
  59. this.обработатьНажатиеМышиУказатьИНажать(x, y, указатель);
  60. }
  61. };
  62. // Конструктор.
  63. this.создать();
  64. };