|
- "use strict";
-
- let belongings = {};
-
- let ownedUpgrades = {};
-
- let resources = {};
-
- let updateRate = 60;
-
- function calculateProductivity() {
- let productivity = 0;
- for (const [key, value] of Object.entries(belongings)) {
- productivity += productivityOf(key);
- }
- return productivity;
- }
-
- // here's where upgrades will go :3
-
- function productivityOf(type) {
- let baseProd = buildings[type].prod;
-
- for (const [key, value] of Object.entries(upgrades)) {
- if (!ownedUpgrades[key]) {
- continue;
- }
- console.log(value);
- if (value.effect.type == "prod-2x") {
- if (value.effect.target == key) {
- baseProd *= 2;
- }
- }
- }
- return baseProd * belongings[type].count;
- }
-
- function costOfBuilding(type) {
- let baseCost = buildings[type].cost
-
- let countCost = baseCost * Math.pow(1.15, belongings[type].count);
-
- return Math.round(countCost);
- }
-
- function buyBuilding(type) {
- let cost = costOfBuilding(type);
-
- if (resources.food >= cost) {
- belongings[type].count += 1;
- resources.food -= cost;
- }
-
- }
- // update stuff
-
- function updateResources() {
- addResources();
- displayResources();
- displayBuildings();
- displayUpgrades();
-
- setTimeout(updateResources, 1000/updateRate);
- }
-
- function addResources() {
- resources.food += calculateProductivity() * 1 / updateRate;
- }
-
- function displayResources() {
- document.getElementById("resource-food").innerText = "Food: " + render(resources.food);
-
- document.getElementById("productivity").innerText = (Math.round(calculateProductivity() * 10) / 10) + " food/sec";
- }
-
- function displayBuildings() {
- for (const [key, value] of Object.entries(belongings)) {
- let button = document.querySelector("#building-" + key);
-
- document.querySelector("#building-" + key + " > .building-button-name").innerText = value.count + " " + (value.count == 1 ? buildings[key].name : buildings[key].plural);
- document.querySelector("#building-" + key + " > .building-button-cost").innerText = costOfBuilding(key) + " food";
-
- if (costOfBuilding(key) > resources.food) {
- button.classList.add("building-button-disabled");
- } else {
- button.classList.remove("building-button-disabled");
- }
- }
- }
-
- function canAfford(cost) {
- for (const [resource, amount] of Object.entries(cost)) {
- if (resources[resource] < amount) {
- return false;
- }
- }
-
- return true;
- }
-
- function spend(cost) {
- for (const [resource, amount] of Object.entries(cost)) {
- resources[resource] -= amount;
- }
- }
-
- function displayUpgrades() {
- for (const [key, value] of Object.entries(upgrades)) {
- let button = document.querySelector("#upgrade-" + key);
-
- if (ownedUpgrades[key]) {
- button.style.display = "none";
- return;
- }
- if (canAfford(upgrades[key].cost)) {
- button.classList.remove("upgrade-button-inactive");
- } else {
- button.classList.add("upgrade-button-inactive");
- }
- }
- }
-
- function buyUpgrade(id) {
- if (ownedUpgrades[id]) {
- return;
- }
-
- let upgrade = upgrades[id];
-
- if (!canAfford(upgrade.cost)) {
- return;
- }
-
- spend(upgrade.cost);
-
- ownedUpgrades[id] = true;
- }
-
- function eatMicro() {
- resources.food += 1;
- }
- // setup stuff lol
-
- // we'll initialize the dict of buildings we can own
-
- function setup() {
- initializeData();
- createButtons();
- createDisplays();
- registerListeners();
-
- }
-
- function initializeData() {
- for (const [key, value] of Object.entries(buildings)) {
- belongings[key] = {};
- belongings[key].count = 0;
- }
-
- for (const [key, value] of Object.entries(upgrades)) {
- ownedUpgrades[key] = false;
- }
- }
-
- function registerListeners() {
- document.querySelectorAll(".building-button").forEach(function(button) {
- let id = button.id.replace("building-", "");
- button.addEventListener("click", function() { buyBuilding(id); });
- });
-
- document.querySelector("#tasty-micro").addEventListener("click", eatMicro);
- }
-
- function createButtons() {
- createBuildings();
- createUpgrades();
- }
-
- function createBuildings() {
- let container = document.querySelector("#buildings-area");
-
- for (const [key, value] of Object.entries(buildings)) {
- let button = document.createElement("div");
- button.classList.add("building-button");
- button.id = "building-" + key;
- let buttonName = document.createElement("div");
- buttonName.classList.add("building-button-name");
- let buttonCost = document.createElement("div");
- buttonCost.classList.add("building-button-cost");
-
- button.appendChild(buttonName);
- button.appendChild(buttonCost);
-
- container.appendChild(button);
- }
- }
-
- function createUpgrades() {
- let container = document.querySelector("#upgrades-list");
-
- for (const [key, value] of Object.entries(upgrades)) {
- let button = document.createElement("div");
- button.classList.add("upgrade-button");
- button.id = "upgrade-" + key;
- let buttonName = document.createElement("div");
- buttonName.classList.add("upgrade-button-name");
- buttonName.innerText = value.name;
- button.appendChild(buttonName);
-
- button.addEventListener("mousemove", function(e) { upgradeTooltip(key, e); });
- button.addEventListener("mouseleave", function() { upgradeTooltipRemove(); });
- button.addEventListener("click", function() { buyUpgrade(key); });
-
- container.appendChild(button);
- }
- }
-
- function createDisplays() {
- let resourceList = document.querySelector("#resource-list");
-
- for (const [key, value] of Object.entries(resourceTypes)) {
- resources[key] = 0;
-
- let line = document.createElement("div");
-
- line.id = "resource-" + key;
-
- resourceList.appendChild(line);
- }
- }
- function renderCost(cost) {
- let list = [];
-
- for (const [key, value] of Object.entries(cost)) {
- list.push(value + " " + resourceTypes[key].name);
- }
-
- return list.join(", ");
- }
-
- function upgradeTooltip(id, event) {
-
- let tooltip = document.querySelector("#upgrade-tooltip");
-
- tooltip.style.setProperty("display", "block");
-
- let tooltipDesc = document.querySelector("#upgrade-tooltip-desc");
-
- tooltipDesc.innerText = upgrades[id].desc;
-
- let tooltipEffect = document.querySelector("#upgrade-tooltip-effect");
-
- tooltipEffect.innerText = upgrade_types[upgrades[id].effect.type].desc(buildings[upgrades[id].effect.target].name);
-
- let tooltipCost = document.querySelector("#upgrade-tooltip-cost");
-
- tooltipCost.innerText = renderCost(upgrades[id].cost);
-
- let yOffset = tooltip.parentElement.getBoundingClientRect().y;
-
- let yTrans = Math.round(event.clientY - yOffset);
- tooltip.style.setProperty("transform", "translate(-220px, " + yTrans + "px)");
- }
-
- function upgradeTooltipRemove() {
- let tooltip = document.querySelector("#upgrade-tooltip");
-
- tooltip.style.setProperty("display", "none");
-
- }
-
- window.onload = function() {
- setup();
-
- setTimeout(updateResources, 1000/updateRate);
- }
|