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.

82 lines
2.5KB

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