munch
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 

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