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

143 行
3.6 KiB

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