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

98 lines
3.1KB

  1. function Движение(ключники) {
  2. this.создать = function()
  3. {
  4. this.задано = {};
  5. var тут = this;
  6. ключники.push(function(ключ, путь, значение) {
  7. if (!путь[0].startsWith("движение"))
  8. {
  9. return;
  10. }
  11. тут.обработатьКлюч(ключ, путь, значение);
  12. });
  13. };
  14. this.обработатьКлюч = function(ключ, путь, значение)
  15. {
  16. var имя = путь[1];
  17. var свойство = путь.slice(2).join(".");
  18. if (!this.задано[имя])
  19. {
  20. this.задано[имя] = {};
  21. }
  22. this.задано[имя][свойство] = значение;
  23. };
  24. this.обновить = function()
  25. {
  26. for (var имя in this.задано)
  27. {
  28. var значения = this.задано[имя];
  29. for (var свойство in значения)
  30. {
  31. if (свойство.startsWith("объект"))
  32. {
  33. var объект = значения[свойство];
  34. this.передвинуть(объект, значения);
  35. }
  36. }
  37. }
  38. };
  39. this.передвинуть = function(объект, значения)
  40. {
  41. var тело = мир.объекты.тела[объект];
  42. var скоростьX = значения["скорость.0"];
  43. var скоростьY = значения["скорость.1"];
  44. var началоX = значения["x.0"];
  45. var конецX = значения["x.1"];
  46. var началоY = значения["y.0"];
  47. var конецY = значения["y.1"];
  48. if (
  49. !тело ||
  50. (скоростьX == null) ||
  51. (скоростьY == null) ||
  52. (началоX == null) ||
  53. (началоY == null) ||
  54. (конецX == null) ||
  55. (конецY == null)
  56. ) {
  57. return;
  58. }
  59. if (!тело.скоростьX)
  60. {
  61. тело.скоростьX = скоростьX;
  62. }
  63. if (!тело.скоростьY)
  64. {
  65. тело.скоростьY = скоростьY;
  66. }
  67. if (тело.position.x < началоX)
  68. {
  69. тело.скоростьX = скоростьX;
  70. }
  71. else if (тело.position.x > конецX)
  72. {
  73. тело.скоростьX = скоростьX * -1;
  74. }
  75. if (тело.position.y < началоY)
  76. {
  77. тело.скоростьY = скоростьY;
  78. }
  79. else if (тело.position.y > конецY)
  80. {
  81. тело.скоростьY = скоростьY * -1 * мир.физика.движок.gravity.y;
  82. }
  83. Matter.Sleeping.set(тело, false);
  84. Matter.Body.setVelocity(тело, { x: тело.скоростьX, y: тело.скоростьY });
  85. };
  86. // Конструктор.
  87. this.создать();
  88. }