let exec = {}; exec.doNothing = function() { } exec.intersectThings = function() { } exec.addCube = function () { cubePos.push([Math.random() * 1000 - 500, Math.random() * 1000 - 500, Math.random() * 30 - 200, Math.random() * 2 - 1, Math.random() * 2 - 1, Math.random() * 2 - 1 ]) } upgrades = [ { 'name': 'Set', 'price': 30, 'exec': 'addCube', 'desc': 'Clicks and waiting generate more nil' }, { 'name': 'Union', 'price': 1000, 'exec': 'doNothing', 'desc': 'Earlier-bought Sets are more powerful' }, { 'name': 'Intersection', 'price': 1000, 'exec': 'intersectThings', 'desc': 'Sets become easier to click' } ]; let hud2 = document.querySelector('.hud'); function updateText(button, price, name, cc) { button.textContent = `Buy ${name} (${cc}x) for ${numify(price)} nil` } for (let upgrade of upgrades) { let button = document.createElement("div"); button.classList.add('item'); let cc = counts[upgrade.exec]; if (!counts[upgrade.exec]) cc = counts[upgrade.exec] = 0; let price = upgrade.price * (1.02 ** cc); updateText(button, price, upgrade.name, cc); hud2.appendChild(button); button.addEventListener('click', () => { if (nothingness < price) return; counts[upgrade.exec]++; cc = counts[upgrade.exec]; price = upgrade.price * (1.02 ** counts[upgrade.exec]); nothingness -= price / 1.02; updateText(button, price, upgrade.name, cc); exec[upgrade.exec](); }) let desc = document.createElement('div'); desc.classList.add('desc'); desc.textContent = upgrade.desc; hud2.appendChild(desc); } let cubesI = (counts.addCube || 0) * 1; for (let i = 0; i < cubesI; i++) { exec.addCube(); }