Bladeren bron

Only add/remove upgrade classes if needed.

The last state of the upgrade buttons are now cached. This ensures that
the classList is perturbed *only* if this would actually change the
appearance, and seems to be far faster than just adding something
to the classList over and over
tags/v0.0.6
Fen Dweller 5 jaren geleden
bovenliggende
commit
9d14b4a4e6
Geen bekende sleutel gevonden voor deze handtekening in de database GPG sleutel-ID: E80B35A6F11C3656
1 gewijzigde bestanden met toevoegingen van 35 en 5 verwijderingen
  1. +35
    -5
      gorge.js

+ 35
- 5
gorge.js Bestand weergeven

@@ -309,6 +309,7 @@ function switchShowOwnedUpgrades() {
function displayUpgrades(owned) {
if (owned) {
Object.entries(ownedUpgrades).forEach(([key, val]) => {

let button = cache.upgradeButtons[key];
if (val) {
button.classList.remove("hidden");
@@ -320,20 +321,29 @@ function displayUpgrades(owned) {
else {
for (let id of remainingUpgrades) {
let button = cache.upgradeButtons[id];
let visible = states.upgrades[id].visible;
let available = states.upgrades[id].available;

if (ownedUpgrades[id]) {
if (ownedUpgrades[id] && visible !== false) {
button.classList.add("hidden");
states.upgrades[id].visible = false;
continue;
}
if (upgradeReachable(id)) {

if (upgradeReachable(id) && visible !== true) {
button.classList.remove("hidden");
} else {
states.upgrades[id].visible = true;
} else if (!upgradeReachable(id) && visible !== false) {
button.classList.add("hidden");
states.upgrades[id].visible = false;
}
if (upgradeAvailable(id)) {

if (upgradeAvailable(id) && available !== true) {
button.classList.remove("upgrade-button-inactive");
} else {
states.upgrades[id].available = true;
} else if (!upgradeAvailable(id) && available !== false) {
button.classList.add("upgrade-button-inactive");
states.upgrades[id].available = false;
}
}

@@ -419,6 +429,7 @@ function setup() {
load();
unlockAtStart();
initializeCaches();
initializeStates();
updateAll();

}
@@ -453,6 +464,25 @@ function initializeCaches() {
cache.upgradeButtons = upgradeButtons;
}

const states = {};

// we can keep track of some things, like whether
// specific upgrades are currently visible. this
// way, we don't have to set them visible every tick;
// we can just check if they've been handled already

function initializeStates() {
const upgradeStates = {};

Object.keys(upgrades).forEach(key => {
upgradeStates[key] = {
visible: undefined,
available: undefined
}
});

states.upgrades = upgradeStates;
}
function unlockAtStart() {
unlockBuilding("micro");



Laden…
Annuleren
Opslaan