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.

70 lines
2.4KB

  1. function Игра()
  2. {
  3. this.создать = function()
  4. {
  5. var корень = document.getElementById("корень");
  6. мир.события = new События();
  7. мир.состояние = new Состояние();
  8. мир.состояние.обработчик = (к, п, з) => { this.обработатьКлюч(к, п, з) };
  9. мир.физика = new Физика();
  10. мир.изображения = new Изображения(корень),
  11. мир.тела = new Тела(мир.физика.движок.world);
  12. мир.слежение = new Слежение(мир.изображения, мир.тела);
  13. мир.объекты = new Объекты(мир.состояние);
  14. мир.вид = new Вид(мир.события);
  15. this.ключники = [
  16. new Заголовок(),
  17. мир.изображения,
  18. мир.тела,
  19. мир.слежение,
  20. мир.объекты,
  21. мир.вид,
  22. ];
  23. var z64 = мир.параметрыЗапуска()["z64"];
  24. this.исполнитьКод(z64);
  25. this.отслеживатьОбновленияКода();
  26. this.обновить();
  27. };
  28. this.исполнитьКод = function(z64)
  29. {
  30. if (z64)
  31. {
  32. var код = мир.изZ64(z64);
  33. eval(код);
  34. }
  35. };
  36. this.обновить = function()
  37. {
  38. мир.физика.обновить();
  39. мир.слежение.обновить();
  40. var тут = this;
  41. requestAnimationFrame(function() {
  42. тут.обновить();
  43. });
  44. };
  45. this.обработатьКлюч = function(ключ, путь, значение)
  46. {
  47. for (var номер in this.ключники)
  48. {
  49. var ключник = this.ключники[номер];
  50. ключник.обработатьКлюч(ключ, путь, значение);
  51. }
  52. };
  53. this.отслеживатьОбновленияКода = function()
  54. {
  55. var тут = this;
  56. window.addEventListener("message", function(событие) {
  57. тут.исполнитьКод(событие.data);
  58. });
  59. };
  60. // Конструктор.
  61. this.создать();
  62. }