a munch adventure
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 
 

140 行
3.5 KiB

  1. "use strict"
  2. let activeModal = null;
  3. const version = "pre-alpha";
  4. let state;
  5. function print(lines) {
  6. (lines.concat([String.fromCharCode(160)])).forEach(line => {
  7. const log = document.querySelector("#log");
  8. const div = document.createElement("div");
  9. div.textContent = line;
  10. log.appendChild(div);
  11. });
  12. log.scrollTop = log.scrollHeight;
  13. }
  14. function refresh() {
  15. updateRoom(state);
  16. updateWorldInfo(state);
  17. updatePlayerInfo(state);
  18. }
  19. function switchModal(to) {
  20. closeModal(activeModal);
  21. openModal(to);
  22. }
  23. function closeModal(modal) {
  24. const div = document.querySelector("#" + modal);
  25. div.classList.remove("modal");
  26. div.classList.add("hidden-modal");
  27. }
  28. function openModal(modal) {
  29. const div = document.querySelector("#" + modal);
  30. div.classList.remove("hidden-modal");
  31. div.classList.add("modal");
  32. activeModal = modal;
  33. }
  34. function returnToStart() {
  35. stopAllSound();
  36. log.innerHTML = "";
  37. document.querySelector("#game").classList.remove("scene");
  38. document.querySelector("#game").classList.add("hidden-scene");
  39. document.querySelector("#pick").classList.remove("hidden-scene");
  40. document.querySelector("#pick").classList.add("scene");
  41. }
  42. // set up the game
  43. function init(story) {
  44. state = {
  45. player: {
  46. items: {
  47. keys: [
  48. ]
  49. },
  50. rooms: {
  51. }
  52. }
  53. };
  54. initWorld(story, state);
  55. initAudio(story, state);
  56. initGame(story, state);
  57. goToRoom(story.intro.start, state);
  58. }
  59. // set up the load screen
  60. function initStart() {
  61. const versionFields = document.querySelectorAll(".version");
  62. const select = document.querySelector("#game-select");
  63. const options = {};
  64. versionFields.forEach(field => {
  65. field.textContent = "Version: " + version;
  66. });
  67. stories.forEach(story => {
  68. const option = document.createElement("option");
  69. option.value = story.id;
  70. option.textContent = story.name;
  71. select.appendChild(option);
  72. options[story.id] = story;
  73. })
  74. const start = document.querySelector("#start-button");
  75. start.addEventListener("click", (event) => {
  76. init(options[select.value]);
  77. document.querySelector("#pick").classList.remove("scene");
  78. document.querySelector("#pick").classList.add("hidden-scene");
  79. document.querySelector("#game").classList.remove("hidden-scene");
  80. document.querySelector("#game").classList.add("scene");
  81. });
  82. const gameMenuButton = document.querySelector("#game-menu-button");
  83. const menuSettings = document.querySelector("#menu-button-settings");
  84. const menuQuit = document.querySelector("#menu-button-quit");
  85. const menuResume = document.querySelector("#menu-button-resume");
  86. const menuSettingsVolume = document.querySelector("#menu-slider-volume");
  87. const menuSettingsClose = document.querySelector("#menu-button-settings-close");
  88. const menuQuitYes = document.querySelector("#menu-button-quit-yes");
  89. const menuQuitNo = document.querySelector("#menu-button-quit-no");
  90. gameMenuButton.addEventListener("click", () => openModal("menu"));
  91. menuSettings.addEventListener("click", () => switchModal("settings"));
  92. menuQuit.addEventListener("click", () => switchModal("quit"));
  93. menuResume.addEventListener("click", () => closeModal("menu"));
  94. menuSettingsVolume.addEventListener("input", () => {
  95. setVolume(parseFloat(menuSettingsVolume.value));
  96. })
  97. menuSettingsClose.addEventListener("click", () => switchModal("menu"));
  98. menuQuitYes.addEventListener("click", () => {
  99. closeModal("quit");
  100. returnToStart();
  101. });
  102. menuQuitNo.addEventListener("click", () => switchModal("menu"));
  103. }
  104. window.addEventListener("load", initStart);