munch
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.
 
 
 

155 lines
4.2 KiB

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