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

87 lines
2.7KB

  1. мир = {
  2. ключники: [],
  3. выставленныеЗначения: {},
  4. };
  5. мир.выпрямить = function(obj)
  6. {
  7. // https://stackoverflow.com/a/42121920
  8. var newObj = {};
  9. for (var key in obj)
  10. {
  11. if (typeof obj[key] === 'object' && obj[key] !== null)
  12. {
  13. var temp = мир.выпрямить(obj[key])
  14. for (var key2 in temp)
  15. {
  16. newObj[key + "." + key2] = temp[key2];
  17. }
  18. }
  19. else
  20. {
  21. newObj[key] = obj[key];
  22. }
  23. }
  24. return newObj;
  25. };
  26. мир.лишьНовыеЗначения = function(значения) {
  27. var новые = {};
  28. for (var ключ in значения)
  29. {
  30. var было = мир.выставленныеЗначения[ключ];
  31. var стало = значения[ключ];
  32. if (!(было != null && было == стало))
  33. {
  34. новые[ключ] = стало;
  35. мир.выставленныеЗначения[ключ] = стало;
  36. }
  37. }
  38. return новые;
  39. };
  40. мир.разобрать = function(словарь) {
  41. var значения = мир.лишьНовыеЗначения(мир.выпрямить(словарь));
  42. for (var ключ in значения)
  43. {
  44. var путь = ключ.split(".");
  45. var значение = значения[ключ];
  46. for (var номер in мир.ключники)
  47. {
  48. мир.ключники[номер](ключ, путь, значение);
  49. }
  50. }
  51. };
  52. мир.задать = function(словарь, полныйКлюч, значение) {
  53. var путь = полныйКлюч.split(".");
  54. var пройти = путь.length - 1;
  55. var вложенность = словарь;
  56. for (var номер = 0; номер < пройти; ++номер)
  57. {
  58. var ключ = путь[номер];
  59. if (!(ключ in вложенность))
  60. {
  61. вложенность[ключ] = {};
  62. вложенность = вложенность[ключ];
  63. }
  64. }
  65. // Значение в конце вложенности.
  66. var ключ = путь[пройти];
  67. вложенность[ключ] = значение;
  68. };
  69. мир.синхронизироватьЭлементТело = function(элемент, тело) {
  70. if (тело.isSleeping)
  71. {
  72. return false;
  73. }
  74. let x = тело.position.x - элемент.offsetWidth / 2;
  75. let y = тело.position.y - элемент.offsetHeight / 2;
  76. let угол = тело.angle;
  77. элемент.style.transform = `translate(${x}px, ${y}px) rotate(${угол}rad)`;
  78. return true;
  79. };