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.

102 lines
4.2KB

  1. function Игра()
  2. {
  3. this.создать = function()
  4. {
  5. мир.физдвижок = Matter.Engine.create({
  6. enableSleeping: true,
  7. gravity: {
  8. y: 2,
  9. },
  10. });
  11. var корень = document.getElementById("корень");
  12. мир.события = new События(мир.uuid);
  13. мир.состояние = new Состояние();
  14. мир.состояние.обработчик = (к, п, з) => { this.обработатьКлюч(к, п, з) };
  15. мир.виды = new Виды(мир.события);
  16. мир.анимации = new Анимации(мир.события);
  17. мир.изображения = new Изображения(мир.события, мир.виды, мир.анимации, корень),
  18. мир.физика = new Физика(мир.события);
  19. мир.тела = new Тела(мир.события, мир.физика, мир.физдвижок.world);
  20. мир.слежение = new Слежение(мир.состояние, мир.изображения, мир.тела);
  21. мир.объекты = new Объекты(мир.состояние, мир.события);
  22. мир.состояниЯ = new Состояния(мир.состояние);
  23. мир.мышь = new Мышь(мир.события);
  24. мир.столкновения = new Столкновения(мир.события, мир.тела, мир.физдвижок);
  25. this.ключники = [
  26. new Заголовок(),
  27. мир.виды,
  28. мир.анимации,
  29. мир.изображения,
  30. мир.физика,
  31. мир.тела,
  32. мир.слежение,
  33. мир.объекты,
  34. мир.состояниЯ,
  35. мир.столкновения,
  36. ];
  37. this.настроитьКлючиGR()
  38. var z64 = мир.параметрыЗапуска()["z64"];
  39. this.исполнитьКод(z64);
  40. this.отслеживатьОбновленияКода();
  41. this.обновить();
  42. };
  43. this.исполнитьКод = function(z64)
  44. {
  45. if (z64)
  46. {
  47. var код = мир.изZ64(z64);
  48. eval(код);
  49. }
  50. };
  51. this.настроитьКлючиGR = function()
  52. {
  53. let адресИгры = window.location.pathname + "/../игра.html?z64=";
  54. мир.grСцена = new grСцена(мир.состояние, мир.состояниЯ, мир.события, мир.тела, адресИгры);
  55. this.ключники.push(мир.grСцена);
  56. мир.grПодсказки = new grПодсказки();
  57. this.ключники.push(мир.grПодсказки);
  58. мир.grРеплики = new grРеплики(мир.события);
  59. this.ключники.push(мир.grРеплики);
  60. мир.grМеню = new grМеню(мир.события, мир.grПодсказки, мир.grРеплики);
  61. }
  62. this.обновить = function()
  63. {
  64. Matter.Engine.update(мир.физдвижок);
  65. мир.анимации.обновить(мир.физдвижок.timing.timestamp);
  66. мир.слежение.обновить();
  67. мир.grСцена.обновить();
  68. var тут = this;
  69. requestAnimationFrame(function() {
  70. тут.обновить();
  71. });
  72. };
  73. this.обработатьКлюч = function(ключ, путь, значение)
  74. {
  75. for (var номер in this.ключники)
  76. {
  77. var ключник = this.ключники[номер];
  78. ключник.обработатьКлюч(ключ, путь, значение);
  79. }
  80. };
  81. this.отслеживатьОбновленияКода = function()
  82. {
  83. var тут = this;
  84. window.addEventListener("message", function(событие) {
  85. тут.исполнитьКод(событие.data);
  86. });
  87. };
  88. // Конструктор.
  89. this.создать();
  90. }