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.

110 lines
3.3KB

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