munch
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
 
 
 

187 řádky
4.9 KiB

  1. let currentRoom = null;
  2. let dirButtons = [];
  3. let actionButtons = [];
  4. let mode = "explore";
  5. let actions = [];
  6. let time = 9*60;
  7. let newline = " ";
  8. let player = new Player();
  9. function Object(name="Potato") {
  10. this.name = name;
  11. this.actions = [];
  12. }
  13. function Burger() {
  14. Object.call(this, "Burger");
  15. this.actions.push({
  16. "name": "Punch Burger",
  17. "action": function() {
  18. player.health += 10;
  19. update(["You punch the hamburger."]);
  20. }
  21. });
  22. }
  23. function updateExploreCompass() {
  24. for (let i = 0; i < dirButtons.length; i++) {
  25. let button = dirButtons[i];
  26. if (currentRoom.exits[i] == null) {
  27. button.disabled = true;
  28. button.classList.remove("active-compass-button");
  29. button.classList.add("inactive-compass-button");
  30. button.innerHTML = "";
  31. } else {
  32. button.disabled = false;
  33. button.classList.remove("inactive-compass-button");
  34. button.classList.add("active-compass-button");
  35. button.innerHTML = currentRoom.exits[i].name;
  36. }
  37. }
  38. }
  39. function updateExploreActions() {
  40. for (let i = 0; i < actionButtons.length; i++) {
  41. if (i < actions.length)
  42. actionButtons[i].innerHTML = actions[i].name;
  43. else
  44. actionButtons[i].innerHTML = "";
  45. }
  46. }
  47. function updateExplore() {
  48. updateExploreCompass();
  49. updateExploreActions();
  50. }
  51. function updateCombat() {
  52. }
  53. function updateDisplay() {
  54. switch(mode) {
  55. case "explore":
  56. document.getElementById("selector-explore").style.display = "flex";
  57. document.getElementById("selector-combat").style.display = "none";
  58. updateExplore();
  59. break;
  60. case "combat":
  61. document.getElementById("selector-explore").style.display = "none";
  62. document.getElementById("selector-combat").style.display = "flex";
  63. updateCombat();
  64. break;
  65. }
  66. document.getElementById("time").innerHTML = "Time: " + renderTime(time);
  67. document.getElementById("stat-name").innerHTML = "Name: " + player.name;
  68. document.getElementById("stat-health").innerHTML = "Health: " + player.health + "/" + player.maxHealth;
  69. document.getElementById("stat-fullness").innerHTML = "Fullness: " + player.fullness + "/" + player.maxFullness;
  70. }
  71. function advanceTime(amount) {
  72. time = (time + amount) % 1440;
  73. }
  74. function renderTime(time) {
  75. let suffix = (time < 720) ? "AM" : "PM";
  76. let hour = Math.floor((time % 720) / 60);
  77. if (hour == 0)
  78. hour = 12;
  79. let minute = time % 60;
  80. if (minute < 9)
  81. minute = "0" + minute;
  82. return hour + ":" + minute + " " + suffix;
  83. }
  84. function move(direction) {
  85. let target = currentRoom.exits[direction];
  86. if (target == null) {
  87. alert("Tried to move to an empty room!");
  88. return;
  89. }
  90. moveTo(target);
  91. }
  92. function moveTo(room) {
  93. actions = [];
  94. currentRoom = room;
  95. advanceTime(1);
  96. currentRoom.objects.forEach(function (object) {
  97. object.actions.forEach(function (action) {
  98. actions.push(action);
  99. })
  100. })
  101. update(["You move to " + currentRoom.name,currentRoom.description,newline]);
  102. }
  103. window.addEventListener('load', function(event) {
  104. loadActions();
  105. loadCompass();
  106. currentRoom = createWorld();
  107. currentRoom.objects.push(new Burger());
  108. moveTo(currentRoom);
  109. updateDisplay();
  110. });
  111. function update(lines=[]) {
  112. let log = document.getElementById("log");
  113. for (let i=0; i<lines.length; i++) {
  114. let div = document.createElement("div");
  115. div.innerHTML = lines[i];
  116. log.appendChild(div);
  117. }
  118. updateDisplay();
  119. }
  120. function actionClicked(index) {
  121. actions[index].action();
  122. }
  123. function loadActions() {
  124. actionButtons = Array.from( document.querySelectorAll(".action-button"));
  125. for (let i = 0; i < actionButtons.length; i++) {
  126. actionButtons[i].addEventListener("click", function() { actionClicked(i); });
  127. }
  128. }
  129. function loadCompass() {
  130. dirButtons[NORTH_WEST] = document.getElementById("compass-north-west");
  131. dirButtons[NORTH_WEST].addEventListener("click", function() {
  132. move(NORTH_WEST);
  133. });
  134. dirButtons[NORTH] = document.getElementById("compass-north");
  135. dirButtons[NORTH].addEventListener("click", function() {
  136. move(NORTH);
  137. });
  138. dirButtons[NORTH_EAST] = document.getElementById("compass-north-east");
  139. dirButtons[NORTH_EAST].addEventListener("click", function() {
  140. move(NORTH_EAST);
  141. });
  142. dirButtons[WEST] = document.getElementById("compass-west");
  143. dirButtons[WEST].addEventListener("click", function() {
  144. move(WEST);
  145. });
  146. dirButtons[EAST] = document.getElementById("compass-east");
  147. dirButtons[EAST].addEventListener("click", function() {
  148. move(EAST);
  149. });
  150. dirButtons[SOUTH_WEST] = document.getElementById("compass-south-west");
  151. dirButtons[SOUTH_WEST].addEventListener("click", function() {
  152. move(SOUTH_WEST);
  153. });
  154. dirButtons[SOUTH] = document.getElementById("compass-south");
  155. dirButtons[SOUTH].addEventListener("click", function() {
  156. move(SOUTH);
  157. });
  158. dirButtons[SOUTH_EAST] = document.getElementById("compass-south-east");
  159. dirButtons[SOUTH_EAST].addEventListener("click", function() {
  160. move(SOUTH_EAST);
  161. });
  162. }