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.

111 lines
3.2KB

  1. function Объекты(состояние)
  2. {
  3. this.создать = function()
  4. {
  5. this.умолчание = {
  6. пр: [0, 0, 40, 20],
  7. };
  8. this.задано = {};
  9. };
  10. this.обновитьИзображение = function(имя)
  11. {
  12. let имяИзо = `объекты-${имя}`;
  13. let за = this.задано[имя];
  14. let пр = this.пр(имя);
  15. var описание = {
  16. ширина: пр[2],
  17. высота: пр[3],
  18. вид: {},
  19. };
  20. for (var ключ in за)
  21. {
  22. if (ключ.startsWith("вид."))
  23. {
  24. var к = ключ.substring(4);
  25. var значение = за[ключ];
  26. описание.вид[к] = значение;
  27. }
  28. }
  29. состояние.разобрать({
  30. изображения: {
  31. [имяИзо]: описание,
  32. },
  33. });
  34. };
  35. this.обновитьСлежение = function(имя)
  36. {
  37. let имяС = `объекты-${имя}`;
  38. let пр = this.пр(имя);
  39. состояние.разобрать({
  40. слежение: {
  41. [имяС]: {
  42. изображение: имяС,
  43. тело: имяС,
  44. смещение: [-пр[2] / 2, -пр[3] / 2],
  45. },
  46. },
  47. });
  48. };
  49. this.обработатьКлюч = function(ключ, путь, значение)
  50. {
  51. if (путь[0] != "объекты")
  52. {
  53. return;
  54. }
  55. let имя = путь[1];
  56. let свойство = путь.slice(2).join(".");
  57. if (!this.задано[имя])
  58. {
  59. this.задано[имя] = {};
  60. }
  61. this.задано[имя][свойство] = значение;
  62. let пр = свойство.startsWith("пр.");
  63. if (пр)
  64. {
  65. this.пересоздатьТело(имя);
  66. this.обновитьСлежение(имя);
  67. }
  68. this.обновитьИзображение(имя);
  69. };
  70. this.пересоздатьТело = function(имя)
  71. {
  72. let имяТела = `объекты-${имя}`;
  73. let пр = this.пр(имя);
  74. состояние.разобрать({
  75. тела: {
  76. [имяТела]: {
  77. x: пр[0],
  78. y: пр[1],
  79. ширина: пр[2],
  80. высота: пр[3],
  81. физика: {
  82. isStatic: false,
  83. },
  84. },
  85. },
  86. });
  87. };
  88. this.пр = function(имя)
  89. {
  90. let за = this.задано[имя];
  91. let пр = this.умолчание.пр;
  92. return [
  93. за["пр.0"] ? за["пр.0"] : пр[0],
  94. за["пр.1"] ? за["пр.1"] : пр[1],
  95. за["пр.2"] ? за["пр.2"] : пр[2],
  96. за["пр.3"] ? за["пр.3"] : пр[3],
  97. ];
  98. };
  99. // Конструктор.
  100. this.создать();
  101. };