From 50bbe3876e9cf33af7af2bd87a47b19cd6b02549 Mon Sep 17 00:00:00 2001 From: Wing Date: Sat, 4 Jul 2015 01:47:14 +0100 Subject: [PATCH 1/4] Changed prettify a little MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I’ve made the base determination more efficient by using logs to determine how many times 1000 divides into number There’s now an array of suffixes that you can add to at will Added a primitive domCache to the system. Instead of using document.getElementById you should now use gameElements.getElementById This builds a cache on the fly and returns from that. I can’t recommend enough that jQuery (or some other similar library) be used for this instead; it’s a lot more robust than what I cobbled together and has more efficiency programming done. --- .gitignore | 4 + index.html | 1 + main.js | 200 ++++++++++++++++---------------- primitiveDomCache.js | 40 +++++++ updates.js | 269 ++++++++++++++++++------------------------- 5 files changed, 257 insertions(+), 257 deletions(-) create mode 100644 .gitignore create mode 100644 primitiveDomCache.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..cc309a64 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +/nbproject/private/ +nbproject/project.properties + +nbproject/project.xml diff --git a/index.html b/index.html index 24d2b45b..beb22117 100644 --- a/index.html +++ b/index.html @@ -431,6 +431,7 @@
+ diff --git a/main.js b/main.js index c79e1a71..afa1c650 100644 --- a/main.js +++ b/main.js @@ -23,7 +23,7 @@ "use strict"; function toggleSave(updateOnly) { - var elem = document.getElementById("toggleBtn"); + var elem = gameElements.getElementById("toggleBtn"); if (updateOnly) game.global.autoSave = (game.global.autoSave) ? false : true; if (game.global.autoSave) { game.global.autoSave = false; @@ -87,7 +87,7 @@ function save(exportThis) { function load(saveString, autoLoad) { var savegame; if (saveString) { - savegame = JSON.parse(LZString.decompressFromBase64(document.getElementById("importBox").value)); + savegame = JSON.parse(LZString.decompressFromBase64(gameElements.getElementById("importBox").value)); tooltip('hide'); } else if (localStorage.getItem("trimpSave1") !== null) { savegame = JSON.parse(LZString.decompressFromBase64(localStorage.getItem("trimpSave1"))); @@ -97,7 +97,7 @@ function load(saveString, autoLoad) { if (game.global.killSavesBelow > savegame.global.version) { message("I'm so terribly sorry, but your previous save game (version " + savegame.global.version + ") does not work in the new version. This game is still in early alpha, and a lot is still changing! Thank you for helping test!", "Notices"); message("Since you already had a save, and since the game is still alpha, I unlocked a little cheat button for you. It will make you twice as efficient, allowing you to get through the beginning a little faster.", "Notices"); - document.getElementById("cheatTd").style.display = "block"; + gameElements.getElementById("cheatTd").style.display = "block"; return; } else savegame.global.version = game.global.version; if (typeof savegame.global !== 'undefined') { @@ -148,27 +148,27 @@ function load(saveString, autoLoad) { } } - if (game.buildings.Gym.locked === 0) document.getElementById("blockDiv").style.visibility = "visible"; + if (game.buildings.Gym.locked === 0) gameElements.getElementById("blockDiv").style.visibility = "visible"; if (game.global.gridArray.length > 0) { - document.getElementById("battleContainer").style.visibility = "visible"; + gameElements.getElementById("battleContainer").style.visibility = "visible"; fadeIn("EquipmentFilter", 10); fadeIn("equipmentTitleDiv", 10); drawGrid(); - document.getElementById('metal').style.visibility = "visible"; + gameElements.getElementById('metal').style.visibility = "visible"; for (var x = 0; x <= game.global.lastClearedCell; x++) { - document.getElementById("cell" + x).style.backgroundColor = "green"; + gameElements.getElementById("cell" + x).style.backgroundColor = "green"; } - if (game.global.battleClock > 0) document.getElementById("battleTimer").style.visibility = "visible"; + if (game.global.battleClock > 0) gameElements.getElementById("battleTimer").style.visibility = "visible"; } if (game.global.mapGridArray.length > 0) { drawGrid(true); for (var y = 0; y <= game.global.lastClearedMapCell; y++) { - document.getElementById("mapCell" + y).style.backgroundColor = "green"; + gameElements.getElementById("mapCell" + y).style.backgroundColor = "green"; } } else if (game.global.mapGridArray.length === 0 && game.global.mapsActive) game.global.mapsActive = false; if (game.resources.trimps.owned > 0 || game.buildings.Trap.owned > 0) game.buildings.Trap.first(); if (game.global.autoBattle) { - document.getElementById("pauseFight").style.visibility = "visible"; + gameElements.getElementById("pauseFight").style.visibility = "visible"; pauseFight(true); } for (var itemC in game.global.mapsOwnedArray) { @@ -184,13 +184,13 @@ function load(saveString, autoLoad) { filterTabs(tabBool, true); } } - document.getElementById("worldNumber").innerHTML = game.global.world; + gameElements.getElementById("worldNumber").innerHTML = game.global.world; mapsSwitch(true); checkTriggers(true); setGather(game.global.playerGathering); numTab(1); if (game.global.autoCraftModifier > 0) - document.getElementById("foremenCount").innerHTML = (game.global.autoCraftModifier * 2) + " Foremen"; + gameElements.getElementById("foremenCount").innerHTML = (game.global.autoCraftModifier * 2) + " Foremen"; if (game.global.fighting) startFight(); toggleSave(true); } @@ -233,7 +233,7 @@ function addResCheckMax(what, number) { function fireMode(noChange) { if (!noChange) game.global.firing = !game.global.firing; - var elem = document.getElementById("fireBtn"); + var elem = gameElements.getElementById("fireBtn"); if (game.global.firing) { elem.style.background = "rgba(255,0,0,0.5)"; elem.innerHTML = "Firing"; @@ -251,12 +251,12 @@ function setGather(what) { var colorOff = "rgba(0,0,0,1)"; if (typeof toGather === 'undefined' && what != "buildings") return; if (game.global.playerGathering !== "") { - document.getElementById(game.global.playerGathering + "CollectBtn").innerHTML = setGatherTextAs(game.global.playerGathering, false); - document.getElementById(game.global.playerGathering + "CollectBtn").style.background = colorOff; + gameElements.getElementById(game.global.playerGathering + "CollectBtn").innerHTML = setGatherTextAs(game.global.playerGathering, false); + gameElements.getElementById(game.global.playerGathering + "CollectBtn").style.background = colorOff; } game.global.playerGathering = what; - document.getElementById(what + "CollectBtn").innerHTML = setGatherTextAs(what, true); - document.getElementById(what + "CollectBtn").style.background = colorOn; + gameElements.getElementById(what + "CollectBtn").innerHTML = setGatherTextAs(what, true); + gameElements.getElementById(what + "CollectBtn").style.background = colorOn; } function setGatherTextAs(what, on) { @@ -429,7 +429,7 @@ function cancelQueueItem(what) { if (index === 0) { game.global.crafting = ""; game.global.timeLeftOnCraft = 0; - document.getElementById("buildingsBar").style.width = "0%"; + gameElements.getElementById("buildingsBar").style.width = "0%"; } } @@ -457,8 +457,8 @@ function startQueue(what) { } function craftBuildings(makeUp) { - var buildingsBar = document.getElementById("buildingsBar"); - var speedElem = document.getElementById("buildSpeed"); + var buildingsBar = gameElements.getElementById("buildingsBar"); + var speedElem = gameElements.getElementById("buildSpeed"); if (game.global.crafting === "" && game.global.buildingsQueue.length > 0) { setNewCraftItem(); } @@ -482,7 +482,7 @@ function craftBuildings(makeUp) { game.global.buildingsQueue.splice(0, 1); if (game.global.buildingsQueue.length <= 0) { game.global.crafting = ""; - document.getElementById("noQueue").style.display = "block"; + gameElements.getElementById("noQueue").style.display = "block"; return; } var nextCraft = game.global.buildingsQueue[0].split('.')[0]; @@ -495,8 +495,8 @@ function buildBuilding(what) { var toIncrease; building.owned++; if (building.owned == 1 && typeof building.first !== 'undefined') building.first(); - if (document.getElementById(what + "Owned") === null) return; - document.getElementById(what + "Owned").innerHTML = building.owned; + if (gameElements.getElementById(what + "Owned") === null) return; + gameElements.getElementById(what + "Owned").innerHTML = building.owned; if (typeof building.increase === 'undefined') return; var buildingSplit = building.increase.what.split('.'); if (buildingSplit[0] == "global") toIncrease = game.global; @@ -512,7 +512,7 @@ function setNewCraftItem() { var queueItem = game.global.buildingsQueue[0].split('.')[0]; game.global.crafting = queueItem; game.global.timeLeftOnCraft = game.buildings[queueItem].craftTime; - document.getElementById("buildingsBar").style.width = "0%"; + gameElements.getElementById("buildingsBar").style.width = "0%"; } function calculatePercentageBuildingCost(what, resourceToCheck, costModifier){ @@ -533,8 +533,8 @@ function trapThings() { if (trimps.owned < trimps.max && trap.owned >= 1) game.global.timeLeftOnTrap = trimps.speed; else { - document.getElementById("trappingBar").style.width = "0%"; - document.getElementById("TrapOwned").innerHTML = trap.owned; + gameElements.getElementById("trappingBar").style.width = "0%"; + gameElements.getElementById("TrapOwned").innerHTML = trap.owned; return; } } @@ -543,9 +543,9 @@ function trapThings() { trap.owned--; trimps.owned++; game.global.timeLeftOnTrap = -1; - document.getElementById("TrapOwned").innerHTML = trap.owned; + gameElements.getElementById("TrapOwned").innerHTML = trap.owned; } - document.getElementById("trappingBar").style.width = (100 - ((game.global.timeLeftOnTrap / trimps.speed) * 100)) + "%"; + gameElements.getElementById("trappingBar").style.width = (100 - ((game.global.timeLeftOnTrap / trimps.speed) * 100)) + "%"; } function buyJob(what) { @@ -626,13 +626,13 @@ function buyUpgrade(what) { upgrade.done++; var dif = upgrade.allowed - upgrade.done; if (dif > 1) { - document.getElementById(what + "Owned").innerHTML = upgrade.done + "( +" + dif + ")"; + gameElements.getElementById(what + "Owned").innerHTML = upgrade.done + "( +" + dif + ")"; return; } else if (dif == 1) { - document.getElementById(what + "Owned").innerHTML = upgrade.done; + gameElements.getElementById(what + "Owned").innerHTML = upgrade.done; return; } - document.getElementById("upgradesHere").removeChild(document.getElementById(what)); + gameElements.getElementById("upgradesHere").removeChild(gameElements.getElementById(what)); tooltip("hide"); } @@ -669,7 +669,7 @@ function prestigeEquipment(what) { } equipment.level = 0; equipment.prestige++; - if (document.getElementById(what + "Numeral") !== null) document.getElementById(what + "Numeral").innerHTML = romanNumeral(equipment.prestige); + if (gameElements.getElementById(what + "Numeral") !== null) gameElements.getElementById(what + "Numeral").innerHTML = romanNumeral(equipment.prestige); } function createMap() { @@ -866,7 +866,7 @@ function findHomeForSpecial(special, item, array, max){ } function drawGrid(maps) { //maps t or f. This function overwrites the current grid, be carefulz - var grid = (maps) ? document.getElementById("mapGrid") : document.getElementById("grid"); + var grid = (maps) ? gameElements.getElementById("mapGrid") : gameElements.getElementById("grid"); grid.innerHTML = ""; var cols = (maps) ? (game.global.mapGridArray.length / 10) : 10; var counter = 0; @@ -896,10 +896,10 @@ function pauseFight(setup) { if (setup) game.global.pauseFight = (game.global.pauseFight) ? false : true; if (game.global.pauseFight) { game.global.pauseFight = false; - document.getElementById("pauseFight").innerHTML = "Pause"; + gameElements.getElementById("pauseFight").innerHTML = "Pause"; } else { game.global.pauseFight = true; - document.getElementById("pauseFight").innerHTML = "AutoBattle"; + gameElements.getElementById("pauseFight").innerHTML = "AutoBattle"; } } @@ -908,16 +908,16 @@ function recycleMap() { var map = getMapIndex(game.global.lookingAtMap); if (map === null) return; game.global.mapsOwnedArray.splice(map, 1); - document.getElementById("mapsHere").removeChild(document.getElementById(game.global.lookingAtMap)); + gameElements.getElementById("mapsHere").removeChild(gameElements.getElementById(game.global.lookingAtMap)); game.global.lookingAtMap = ""; game.global.currentMapId = ""; game.global.mapsOwned--; game.global.lastClearedMapCell = -1; game.resources.fragments.owned++; - document.getElementById("selectedMapName").innerHTML = "Select a Map!"; - document.getElementById("selectedMapStats").innerHTML = ""; - document.getElementById("selectMapBtn").style.visibility = "hidden"; - document.getElementById("recycleMapBtn").style.visibility = "hidden"; + gameElements.getElementById("selectedMapName").innerHTML = "Select a Map!"; + gameElements.getElementById("selectedMapStats").innerHTML = ""; + gameElements.getElementById("selectMapBtn").style.visibility = "hidden"; + gameElements.getElementById("recycleMapBtn").style.visibility = "hidden"; } @@ -952,36 +952,36 @@ function mapsSwitch(updateOnly) { } else game.global.preMapsActive = true; } if (game.global.preMapsActive) { - document.getElementById("grid").style.display = "none"; - document.getElementById("preMaps").style.display = "block"; - document.getElementById("mapGrid").style.display = "none"; - document.getElementById("mapsBtn").innerHTML = "World"; + gameElements.getElementById("grid").style.display = "none"; + gameElements.getElementById("preMaps").style.display = "block"; + gameElements.getElementById("mapGrid").style.display = "none"; + gameElements.getElementById("mapsBtn").innerHTML = "World"; if (game.global.currentMapId === "") { - document.getElementById("selectMapBtn").style.visibility = "hidden"; - document.getElementById("recycleMapBtn").style.visibility = "hidden"; - document.getElementById("selectedMapName").innerHTML = "Select a Map!"; - document.getElementById("selectedMapStats").innerHTML = ""; + gameElements.getElementById("selectMapBtn").style.visibility = "hidden"; + gameElements.getElementById("recycleMapBtn").style.visibility = "hidden"; + gameElements.getElementById("selectedMapName").innerHTML = "Select a Map!"; + gameElements.getElementById("selectedMapStats").innerHTML = ""; } else { selectMap(game.global.currentMapId, true); - document.getElementById("selectMapBtn").innerHTML = "Continue"; - document.getElementById("selectMapBtn").style.visibility = "visible"; - document.getElementById("recycleMapBtn").style.visibility = "visible"; + gameElements.getElementById("selectMapBtn").innerHTML = "Continue"; + gameElements.getElementById("selectMapBtn").style.visibility = "visible"; + gameElements.getElementById("recycleMapBtn").style.visibility = "visible"; } } else if (game.global.mapsActive) { var currentMapObj = getCurrentMapObject(); - document.getElementById("grid").style.display = "none"; - document.getElementById("preMaps").style.display = "none"; - document.getElementById("mapGrid").style.display = "table"; - document.getElementById("mapsBtn").innerHTML = "World"; - document.getElementById("worldNumber").innerHTML = "Lv: " + currentMapObj.level; - document.getElementById("worldName").innerHTML = currentMapObj.name; + gameElements.getElementById("grid").style.display = "none"; + gameElements.getElementById("preMaps").style.display = "none"; + gameElements.getElementById("mapGrid").style.display = "table"; + gameElements.getElementById("mapsBtn").innerHTML = "World"; + gameElements.getElementById("worldNumber").innerHTML = "Lv: " + currentMapObj.level; + gameElements.getElementById("worldName").innerHTML = currentMapObj.name; } else { - document.getElementById("grid").style.display = "table"; - document.getElementById("preMaps").style.display = "none"; - document.getElementById("mapGrid").style.display = "none"; - document.getElementById("mapsBtn").innerHTML = "Maps"; - document.getElementById("worldNumber").innerHTML = game.global.world; - document.getElementById("worldName").innerHTML = "World"; + gameElements.getElementById("grid").style.display = "table"; + gameElements.getElementById("preMaps").style.display = "none"; + gameElements.getElementById("mapGrid").style.display = "none"; + gameElements.getElementById("mapsBtn").innerHTML = "Maps"; + gameElements.getElementById("worldNumber").innerHTML = game.global.world; + gameElements.getElementById("worldName").innerHTML = "World"; } } @@ -992,14 +992,14 @@ function selectMap(mapId, force) { } var map = getMapIndex(mapId); map = game.global.mapsOwnedArray[map]; - document.getElementById("selectedMapName").innerHTML = map.name; - document.getElementById("selectedMapStats").innerHTML = "Size: " + Math.floor(map.size) + ". Difficulty: " + Math.floor(map.difficulty * 100) + "%. Loot Bonus: " + Math.floor(map.loot * 100) + "%.
There are " + addSpecials(true, true, map) + " items to be earned from level " + map.level + "+ maps."; - if (typeof game.global.mapsOwnedArray[getMapIndex(game.global.lookingAtMap)] !== 'undefined') document.getElementById(game.global.lookingAtMap).style.border = "1px solid white"; - document.getElementById(mapId).style.border = "1px solid red"; + gameElements.getElementById("selectedMapName").innerHTML = map.name; + gameElements.getElementById("selectedMapStats").innerHTML = "Size: " + Math.floor(map.size) + ". Difficulty: " + Math.floor(map.difficulty * 100) + "%. Loot Bonus: " + Math.floor(map.loot * 100) + "%.
There are " + addSpecials(true, true, map) + " items to be earned from level " + map.level + "+ maps."; + if (typeof game.global.mapsOwnedArray[getMapIndex(game.global.lookingAtMap)] !== 'undefined') gameElements.getElementById(game.global.lookingAtMap).style.border = "1px solid white"; + gameElements.getElementById(mapId).style.border = "1px solid red"; game.global.lookingAtMap = mapId; - document.getElementById("selectMapBtn").innerHTML = "Run Map"; - document.getElementById("selectMapBtn").style.visibility = "visible"; - document.getElementById("recycleMapBtn").style.visibility = "visible"; + gameElements.getElementById("selectMapBtn").innerHTML = "Run Map"; + gameElements.getElementById("selectMapBtn").style.visibility = "visible"; + gameElements.getElementById("recycleMapBtn").style.visibility = "visible"; } function runMap() { @@ -1063,18 +1063,18 @@ function battle(force) { function startFight() { game.global.battleCounter = 0; - document.getElementById("badGuyCol").style.visibility = "visible"; + gameElements.getElementById("badGuyCol").style.visibility = "visible"; var cellNum; var cell; var cellElem; if (game.global.mapsActive) { cellNum = game.global.lastClearedMapCell + 1; cell = game.global.mapGridArray[cellNum]; - cellElem = document.getElementById("mapCell" + cellNum); + cellElem = gameElements.getElementById("mapCell" + cellNum); } else { cellNum = game.global.lastClearedCell + 1; cell = game.global.gridArray[cellNum]; - cellElem = document.getElementById("cell" + cellNum); + cellElem = gameElements.getElementById("cell" + cellNum); } cellElem.style.backgroundColor = "yellow"; if (cell.maxHealth == -1) { @@ -1086,10 +1086,10 @@ function startFight() { cell.health *= difficulty; } cell.maxHealth = cell.health; - document.getElementById("badGuyBar").style.width = "100%"; - document.getElementById("badGuyName").innerHTML = cell.name; - document.getElementById("badGuyBar").style.backgroundColor = "blue"; - document.getElementById("badGuyAttack").innerHTML = calculateDamage(cell.attack, true); + gameElements.getElementById("badGuyBar").style.width = "100%"; + gameElements.getElementById("badGuyName").innerHTML = cell.name; + gameElements.getElementById("badGuyBar").style.backgroundColor = "blue"; + gameElements.getElementById("badGuyAttack").innerHTML = calculateDamage(cell.attack, true); } if (game.global.soldierHealth === 0) { var trimpsFighting = game.resources.trimps.maxSoldiers; @@ -1097,18 +1097,18 @@ function startFight() { game.global.soldierHealth = game.global.soldierHealthMax; game.global.soldierCurrentAttack = (game.global.attack * trimpsFighting); game.global.soldierCurrentBlock = Math.floor((game.global.block * (game.jobs.Trainer.owned * (game.jobs.Trainer.modifier / 100)) + game.global.block) * trimpsFighting); - document.getElementById("trimpsFighting").innerHTML = prettify(trimpsFighting, 0); - document.getElementById("goodGuyBar").style.width = "100%"; - document.getElementById("goodGuyBlock").innerHTML = prettify(game.global.soldierCurrentBlock); - document.getElementById("goodGuyAttack").innerHTML = calculateDamage(game.global.soldierCurrentAttack, true); + gameElements.getElementById("trimpsFighting").innerHTML = prettify(trimpsFighting, 0); + gameElements.getElementById("goodGuyBar").style.width = "100%"; + gameElements.getElementById("goodGuyBlock").innerHTML = prettify(game.global.soldierCurrentBlock); + gameElements.getElementById("goodGuyAttack").innerHTML = calculateDamage(game.global.soldierCurrentAttack, true); } game.global.fighting = true; game.global.lastFightUpdate = new Date(); - document.getElementById("goodGuyHealth").innerHTML = prettify(game.global.soldierHealth, 0); - document.getElementById("goodGuyHealthMax").innerHTML = prettify(game.global.soldierHealthMax, 0); - document.getElementById("goodGuyBar").style.backgroundColor = "blue"; - document.getElementById("badGuyHealth").innerHTML = prettify(cell.health, 0); - document.getElementById("badGuyHealthMax").innerHTML = prettify(cell.maxHealth, 0); + gameElements.getElementById("goodGuyHealth").innerHTML = prettify(game.global.soldierHealth, 0); + gameElements.getElementById("goodGuyHealthMax").innerHTML = prettify(game.global.soldierHealthMax, 0); + gameElements.getElementById("goodGuyBar").style.backgroundColor = "blue"; + gameElements.getElementById("badGuyHealth").innerHTML = prettify(cell.health, 0); + gameElements.getElementById("badGuyHealthMax").innerHTML = prettify(cell.maxHealth, 0); } @@ -1125,10 +1125,10 @@ function calculateDamage(number, buildString) { //number = base attack function nextWorld() { game.global.world++; //ga('send', 'event', 'Next World', 'World: ' + game.global.world); - document.getElementById("worldNumber").innerHTML = game.global.world; + gameElements.getElementById("worldNumber").innerHTML = game.global.world; game.global.lastClearedCell = -1; game.global.gridArray = []; - document.getElementById("grid").innerHTML = ""; + gameElements.getElementById("grid").innerHTML = ""; buildGrid(); drawGrid(); } @@ -1147,11 +1147,11 @@ function fight(makeUp) { if (game.global.mapsActive) { cellNum = game.global.lastClearedMapCell + 1; cell = game.global.mapGridArray[cellNum]; - cellElem = document.getElementById("mapCell" + cellNum); + cellElem = gameElements.getElementById("mapCell" + cellNum); } else { cellNum = game.global.lastClearedCell + 1; cell = game.global.gridArray[cellNum]; - cellElem = document.getElementById("cell" + cellNum); + cellElem = gameElements.getElementById("cell" + cellNum); } if (cell.health <= 0) { message("You killed a " + cell.name + "!", "Combat"); @@ -1160,7 +1160,7 @@ function fight(makeUp) { if (game.global.mapsActive) game.global.lastClearedMapCell = cellNum; else game.global.lastClearedCell = cellNum; game.global.fighting = false; - document.getElementById("badGuyCol").style.visibility = "hidden"; + gameElements.getElementById("badGuyCol").style.visibility = "hidden"; var unlock; if (game.global.mapsActive) unlock = game.mapUnlocks[cell.special]; else unlock = game.worldUnlocks[cell.special]; @@ -1204,11 +1204,11 @@ function fight(makeUp) { } game.global.lastFightUpdate = new Date(); if (makeUp) return; - document.getElementById("badGuyHealth").innerHTML = prettify(cell.health, 0); + gameElements.getElementById("badGuyHealth").innerHTML = prettify(cell.health, 0); updateGoodBar(); var percent = ((cell.health / cell.maxHealth) * 100); - document.getElementById("badGuyBar").style.width = percent + "%"; - document.getElementById("badGuyBar").style.backgroundColor = getBarColor(percent); + gameElements.getElementById("badGuyBar").style.width = percent + "%"; + gameElements.getElementById("badGuyBar").style.backgroundColor = getBarColor(percent); /* if (game.jobs.Medic.owned >= 1) setTimeout(heal, 500); */ } @@ -1221,10 +1221,10 @@ function fight(makeUp) { } */ function updateGoodBar() { - document.getElementById("goodGuyHealth").innerHTML = prettify(game.global.soldierHealth, 0); + gameElements.getElementById("goodGuyHealth").innerHTML = prettify(game.global.soldierHealth, 0); var percent = ((game.global.soldierHealth / game.global.soldierHealthMax) * 100); - document.getElementById("goodGuyBar").style.width = percent + "%"; - document.getElementById("goodGuyBar").style.backgroundColor = getBarColor(percent); + gameElements.getElementById("goodGuyBar").style.width = percent + "%"; + gameElements.getElementById("goodGuyBar").style.backgroundColor = getBarColor(percent); } function buyEquipment(what) { @@ -1257,7 +1257,7 @@ function affordOneTier(what, whereFrom, take) { function fadeIn(elem, speed) { var opacity = 0; - elem = document.getElementById(elem); + elem = gameElements.getElementById(elem); elem.style.opacity = 0; if (elem.style.display == "none") elem.style.display = "block"; if (elem.style.visibility == "hidden") elem.style.visibility = "visible"; @@ -1275,7 +1275,7 @@ function fadeIn(elem, speed) { function cheatALittle() { if (game.global.playerModifier <= 2) { game.global.playerModifier = 2; - document.getElementById("cheatTd").style.display = "none"; + gameElements.getElementById("cheatTd").style.display = "none"; message("Your player modifier has been boosted to 200%!", "Notices"); return; } @@ -1319,4 +1319,4 @@ setTimeout(gameTimeout(), (1000 / game.settings.speed)); load(); -document.getElementById("versionNumber").innerHTML = game.global.version; \ No newline at end of file +gameElements.getElementById("versionNumber").innerHTML = game.global.version; \ No newline at end of file diff --git a/primitiveDomCache.js b/primitiveDomCache.js new file mode 100644 index 00000000..9b65dc78 --- /dev/null +++ b/primitiveDomCache.js @@ -0,0 +1,40 @@ +/* Trimps + Copyright (C) 2015 Zach Hood + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program (if you are reading this on the original + author's website, you can find a copy at + ). If not, see + . */ +// primitive element caching +// While I recommend using jQuery for this kind of thing, this should improve performance a little. + +var gameElements = { + nodes : {}, + getElementById:function(id) + { + if(this.nodes[id]) + { + return this.nodes[id]; + } + + var elem = document.getElementById(id); + if(elem === null) + { + return null; + } + + this.nodes[id] = elem; + return elem; + } +}; \ No newline at end of file diff --git a/updates.js b/updates.js index 4d27aabf..4b685d9d 100644 --- a/updates.js +++ b/updates.js @@ -20,13 +20,13 @@ function tooltip(what, isItIn, event) { if (game.global.lockTooltip) return; - var elem = document.getElementById("tooltipDiv"); + var elem = gameElements.getElementById("tooltipDiv"); if (what == "hide"){ elem.style.display = "none"; return; } - if (document.getElementById(what + "Alert") !== null) document.getElementById(what + "Alert").innerHTML = ""; - if (document.getElementById(isItIn + "Alert") !== null) document.getElementById(isItIn + "Alert").innerHTML = ""; + if (gameElements.getElementById(what + "Alert") !== null) gameElements.getElementById(what + "Alert").innerHTML = ""; + if (gameElements.getElementById(isItIn + "Alert") !== null) gameElements.getElementById(isItIn + "Alert").innerHTML = ""; if (event != "update"){ var cordx = 0; var cordy = 0; @@ -166,9 +166,9 @@ function tooltip(what, isItIn, event) { else tooltipText = tipSplit[0] + prettify(toTip[tipSplit[1]]) + tipSplit[2]; } - document.getElementById("tipTitle").innerHTML = what; - document.getElementById("tipText").innerHTML = tooltipText; - document.getElementById("tipCost").innerHTML = costText; + gameElements.getElementById("tipTitle").innerHTML = what; + gameElements.getElementById("tipText").innerHTML = tooltipText; + gameElements.getElementById("tipCost").innerHTML = costText; elem.style.display = "block"; } @@ -177,81 +177,36 @@ function unlockTooltip(){ } function prettify(number) { + var numberTmp = number; number = Math.round(number * 1000000) / 1000000; - var base = 0; - while (number >= 1000){ - number /= 1000; - base++; - } + + // this is the mathematical way of changing base + // and so it's a little more efficient than looping + if(number === 0) + { + return prettifySub(0); + } + var base = Math.floor(Math.log(number)/Math.log(1000)); + number /= Math.pow(1000, base); if (base === 0) return prettifySub(number); + + var suffices = [ + 'K', 'M', 'B', 'T', 'Qa', 'Qi', 'Sx', 'Sp', 'Oc', 'No', 'Dc', 'Ud', + 'Dd', 'Td', 'Qad', 'Qid', 'Sxd', 'Spd', 'Od', 'Nd', 'V' + ]; var suffix; - switch (base) { - case 1: - suffix = "K"; - break; - case 2: - suffix = "M"; - break; - case 3: - suffix = "B"; - break; - case 4: - suffix = "T"; - break; - case 5: - suffix = "Qa"; - break; - case 6: - suffix = "Qi"; - break; - case 7: - suffix = "Sx"; - break; - case 8: - suffix = "Sp"; - break; - case 9: - suffix = "Oc"; - break; - case 10: - suffix = "No"; - break; - case 11: - suffix = "Dc"; - break; - case 12: - suffix = "Ud"; - break; - case 13: - suffix = "Dd"; - break; - case 14: - suffix = "Td"; - break; - case 15: - suffix = "Qad"; - break; - case 16: - suffix = "Qid"; - break; - case 17: - suffix = "Sxd"; - break; - case 18: - suffix = "Spd"; - break; - case 19: - suffix = "Od"; - break; - case 20: - suffix = "Nd"; - break; - case 21: - suffix = "V"; - break; - - } - if (base > 21) suffix = "++"; + if (base >= suffices.length) + { + suffix = suffices[base-1]; + } + else + { + // I strongly recommend using scientific notation instead of ++ + // if the base is 22, 23, or 24 you'll end up with the same indicator + // being shown which will confuse late game players. + return numberTmp.toExponential(3); + } + return prettifySub(number) + suffix; } @@ -306,37 +261,37 @@ function prettifySub(number){ } function resetGame() { - document.getElementById("wood").style.visibility = "hidden"; - document.getElementById("metal").style.visibility = "hidden"; - document.getElementById("trimps").style.visibility = "hidden"; - document.getElementById("gems").style.visibility = "hidden"; - document.getElementById("buyCol").style.visibility = "hidden"; - document.getElementById("unempHide").style.visibility = "hidden"; - document.getElementById("empHide").style.visibility = "hidden"; - document.getElementById("upgradesTitleSpan").innerHTML = "Upgrades (research first)"; - document.getElementById("science").style.visibility = "hidden"; - document.getElementById("battleContainer").style.visibility = "hidden"; - document.getElementById("pauseFight").style.visibility = "hidden"; - document.getElementById("blockDiv").style.visibility = "hidden"; - document.getElementById("badGuyCol").style.visibility = "hidden"; - document.getElementById("jobsHere").innerHTML = ""; - document.getElementById("foremenCount").innerHTML = ""; - document.getElementById("JobsFilter").style.visibility = "hidden"; - document.getElementById("UpgradesFilter").style.visibility = "hidden"; - document.getElementById("EquipmentFilter").style.visibility = "hidden"; - document.getElementById("upgradesHere").innerHTML = ""; - document.getElementById("mapsBtn").style.visibility = "hidden"; - document.getElementById("grid").style.display = "block"; - document.getElementById("preMaps").style.display = "none"; - document.getElementById("mapGrid").style.display = "none"; - document.getElementById("buildingsHere").innerHTML = ""; - document.getElementById("grid").innerHTML = ""; - document.getElementById("equipmentHere").innerHTML = ""; - document.getElementById("buildingsQueue").innerHTML = "Nothing in queue..."; - document.getElementById("log").innerHTML = ""; - document.getElementById("worldNumber").innerHTML = "1"; - document.getElementById("mapsHere").innerHTML = ""; - document.getElementById("sciencePs").innerHTML = "+0/sec"; + gameElements.getElementById("wood").style.visibility = "hidden"; + gameElements.getElementById("metal").style.visibility = "hidden"; + gameElements.getElementById("trimps").style.visibility = "hidden"; + gameElements.getElementById("gems").style.visibility = "hidden"; + gameElements.getElementById("buyCol").style.visibility = "hidden"; + gameElements.getElementById("unempHide").style.visibility = "hidden"; + gameElements.getElementById("empHide").style.visibility = "hidden"; + gameElements.getElementById("upgradesTitleSpan").innerHTML = "Upgrades (research first)"; + gameElements.getElementById("science").style.visibility = "hidden"; + gameElements.getElementById("battleContainer").style.visibility = "hidden"; + gameElements.getElementById("pauseFight").style.visibility = "hidden"; + gameElements.getElementById("blockDiv").style.visibility = "hidden"; + gameElements.getElementById("badGuyCol").style.visibility = "hidden"; + gameElements.getElementById("jobsHere").innerHTML = ""; + gameElements.getElementById("foremenCount").innerHTML = ""; + gameElements.getElementById("JobsFilter").style.visibility = "hidden"; + gameElements.getElementById("UpgradesFilter").style.visibility = "hidden"; + gameElements.getElementById("EquipmentFilter").style.visibility = "hidden"; + gameElements.getElementById("upgradesHere").innerHTML = ""; + gameElements.getElementById("mapsBtn").style.visibility = "hidden"; + gameElements.getElementById("grid").style.display = "block"; + gameElements.getElementById("preMaps").style.display = "none"; + gameElements.getElementById("mapGrid").style.display = "none"; + gameElements.getElementById("buildingsHere").innerHTML = ""; + gameElements.getElementById("grid").innerHTML = ""; + gameElements.getElementById("equipmentHere").innerHTML = ""; + gameElements.getElementById("buildingsQueue").innerHTML = "Nothing in queue..."; + gameElements.getElementById("log").innerHTML = ""; + gameElements.getElementById("worldNumber").innerHTML = "1"; + gameElements.getElementById("mapsHere").innerHTML = ""; + gameElements.getElementById("sciencePs").innerHTML = "+0/sec"; game = null; game = newGame(); @@ -348,15 +303,15 @@ function resetGame() { } function message(messageString, type) { - var log = document.getElementById("log"); + var log = gameElements.getElementById("log"); var displayType = (game.global.messages[type]) ? "block" : "none"; if (type == "Story") messageString = "" + messageString; if (type == "Combat") messageString = "" + messageString; var addId = ""; if (messageString == "Game Saved!") { addId = " id='saveGame'"; - if (document.getElementById('saveGame') !== null){ - log.removeChild(document.getElementById('saveGame')); + if (gameElements.getElementById('saveGame') !== null){ + log.removeChild(gameElements.getElementById('saveGame')); } } if (type == "Notices") messageString = "" + messageString; @@ -382,7 +337,7 @@ function trimMessages(what){ } function filterMessage(what, updateOnly){ //send true for updateOnly - var log = document.getElementById("log"); + var log = gameElements.getElementById("log"); var displayed = game.global.messages[what]; if (!updateOnly){ displayed = (displayed) ? false : true; @@ -390,7 +345,7 @@ function filterMessage(what, updateOnly){ //send true for updateOnly } var toChange = document.getElementsByClassName(what + "Message"); var btnText = (displayed) ? what : what + " off"; - var btnElem = document.getElementById(what + "Filter"); + var btnElem = gameElements.getElementById(what + "Filter"); btnElem.innerHTML = btnText; btnElem.className = ""; btnElem.className = getTabClass(displayed); @@ -410,11 +365,11 @@ function filterTabs (what, updateOnly) { game.global.buyTabs[what] = displayed; } var btnText = (displayed) ? what : what + " off"; - var btnElem = document.getElementById(what + "Filter"); - document.getElementById(what + "Text").innerHTML = btnText; + var btnElem = gameElements.getElementById(what + "Filter"); + gameElements.getElementById(what + "Text").innerHTML = btnText; btnElem.className = ""; btnElem.className = getTabClass(displayed); - document.getElementById(what + "Container").style.display = (displayed) ? "block" : "none"; + gameElements.getElementById(what + "Container").style.display = (displayed) ? "block" : "none"; } @@ -428,7 +383,7 @@ function numTab (what) { else game.global.numTab = what; for (var x = 1; x <= 4; x++){ - document.getElementById("tab" + x).style.background = (what == x) ? "rgba(0,0,0,0.5)" : "rgba(255,255,255,0.25)"; + gameElements.getElementById("tab" + x).style.background = (what == x) ? "rgba(0,0,0,0.5)" : "rgba(255,255,255,0.25)"; var num; switch (x){ case 1: @@ -450,7 +405,7 @@ function numTab (what) { } /* function shrink(what) { //fired by player when clicking shrink on main menu item - var toShrink = document.getElementById(what + "Here"); + var toShrink = gameElements.getElementById(what + "Here"); var alreadyShown = game.global.menu[what]; toShrink.style.display = (alreadyShown) ? "none" : "block"; game.global.menu[what] = (alreadyShown) ? false : true; @@ -465,7 +420,7 @@ function updateSideSize() { //resizes main menu items var percent = Math.floor(72 / count); for (menuItem in game.global.menu) { if (game.global.menu[menuItem]) { - document.getElementById(menuItem + "Here").style.height = percent + "%"; + gameElements.getElementById(menuItem + "Here").style.height = percent + "%"; } } } */ @@ -473,15 +428,15 @@ function updateSideSize() { //resizes main menu items // //Buildings Specific function removeQueueItem(what) { - var elem = document.getElementById("buildingsQueue"); - elem.removeChild(document.getElementById(what + "QueueItem")); - if (game.global.buildingsQueue.length === 0) document.getElementById("noQueue").style.display = "block"; + var elem = gameElements.getElementById("buildingsQueue"); + elem.removeChild(gameElements.getElementById(what + "QueueItem")); + if (game.global.buildingsQueue.length === 0) gameElements.getElementById("noQueue").style.display = "block"; } function addQueueItem(what) { - var elem = document.getElementById("buildingsQueue"); - document.getElementById("noQueue").style.display = "none"; + var elem = gameElements.getElementById("buildingsQueue"); + gameElements.getElementById("noQueue").style.display = "none"; name = what.split('.')[0]; elem.innerHTML += '
' + name + '
'; } @@ -493,10 +448,10 @@ function updateLabels() { //Tried just updating as something changes, but seems //Resources (food, wood, metal, trimps, science). All but science have max and a bar. Per second will be handled in separate function, and called from job loop. for (var item in game.resources){ toUpdate = game.resources[item]; - document.getElementById(item + "Owned").innerHTML = prettify(Math.floor(toUpdate.owned), true); + gameElements.getElementById(item + "Owned").innerHTML = prettify(Math.floor(toUpdate.owned), true); if (toUpdate.max == -1) continue; - document.getElementById(item + "Max").innerHTML = prettify(toUpdate.max); - var bar = document.getElementById(item + "Bar"); + gameElements.getElementById(item + "Max").innerHTML = prettify(toUpdate.max); + var bar = gameElements.getElementById(item + "Bar"); var percentToMax = ((toUpdate.owned / toUpdate.max) * 100); bar.style.backgroundColor = getBarColor(100 - percentToMax); bar.style.width = percentToMax + "%"; @@ -506,15 +461,15 @@ function updateLabels() { //Tried just updating as something changes, but seems for (var itemA in game.buildings){ toUpdate = game.buildings[itemA]; if (toUpdate.locked == 1) continue; - var elem = document.getElementById(itemA + "Owned"); + var elem = gameElements.getElementById(itemA + "Owned"); if (elem === null){ unlockBuilding(itemA); - elem = document.getElementById(itemA + "Owned"); + elem = gameElements.getElementById(itemA + "Owned"); } elem.innerHTML = toUpdate.owned; if (itemA == "Trap") { - document.getElementById("trimpTrapText").innerHTML = toUpdate.owned; - document.getElementById("trimpTrapText2").innerHTML = toUpdate.owned; + gameElements.getElementById("trimpTrapText").innerHTML = toUpdate.owned; + gameElements.getElementById("trimpTrapText2").innerHTML = toUpdate.owned; } } //Jobs, check PS here and stuff. Trimps per second is handled by breed() function @@ -526,8 +481,8 @@ function updateLabels() { //Tried just updating as something changes, but seems updatePs(toUpdate); continue; } - if (document.getElementById(itemB) === null) unlockJob(itemB); - document.getElementById(itemB + "Owned").innerHTML = toUpdate.owned; + if (gameElements.getElementById(itemB) === null) unlockJob(itemB); + gameElements.getElementById(itemB + "Owned").innerHTML = toUpdate.owned; var perSec = (toUpdate.owned * toUpdate.modifier); updatePs(toUpdate); } @@ -535,14 +490,14 @@ function updateLabels() { //Tried just updating as something changes, but seems for (var itemC in game.upgrades){ toUpdate = game.upgrades[itemC]; if (toUpdate.locked == 1) continue; - if (document.getElementById(itemC) === null) unlockUpgrade(itemC, true); + if (gameElements.getElementById(itemC) === null) unlockUpgrade(itemC, true); } //Equipment for (var itemD in game.equipment){ toUpdate = game.equipment[itemD]; if (toUpdate.locked == 1) continue; - if (document.getElementById(itemD) === null) unlockEquipment(itemD); - document.getElementById(itemD + "Owned").innerHTML = toUpdate.level; + if (gameElements.getElementById(itemD) === null) unlockEquipment(itemD); + gameElements.getElementById(itemD + "Owned").innerHTML = toUpdate.level; } } @@ -552,13 +507,13 @@ function updatePs(jobObj, trimps){ //trimps is true/false, send PS as first if t var elem; if (trimps) { psText = jobObj.toFixed(3); - elem = document.getElementById("trimpsPs"); + elem = gameElements.getElementById("trimpsPs"); } else{ var increase = jobObj.increase; psText = (jobObj.owned * jobObj.modifier); if (game.global.playerGathering == increase) psText += game.global.playerModifier; - elem = document.getElementById(increase + "Ps"); + elem = gameElements.getElementById(increase + "Ps"); if (game.resources[increase].owned >= game.resources[increase].max && game.resources[increase].max != -1) psText = 0; psText = psText.toFixed(1); } @@ -574,38 +529,38 @@ function updatePs(jobObj, trimps){ //trimps is true/false, send PS as first if t function updateSideTrimps(){ var trimps = game.resources.trimps; - document.getElementById("trimpsEmployed").innerHTML = prettify(trimps.employed); + gameElements.getElementById("trimpsEmployed").innerHTML = prettify(trimps.employed); var breedCount = (trimps.owned - trimps.employed > 2) ? prettify(Math.floor(trimps.owned - trimps.employed)) : 0; - document.getElementById("trimpsUnemployed").innerHTML = breedCount; - document.getElementById("maxEmployed").innerHTML = prettify(Math.ceil(trimps.max / 2)); + gameElements.getElementById("trimpsUnemployed").innerHTML = breedCount; + gameElements.getElementById("maxEmployed").innerHTML = prettify(Math.ceil(trimps.max / 2)); var free = (Math.ceil(trimps.max / 2) - trimps.employed); free = (free > Math.floor(trimps.owned)) ? Math.floor(trimps.owned - trimps.employed) : free; - document.getElementById("jobsTitleUnemployed").innerHTML = prettify(free) + " free"; + gameElements.getElementById("jobsTitleUnemployed").innerHTML = prettify(free) + " free"; } function unlockBuilding(what) { var locked = game.buildings[what].locked; game.buildings[what].locked = 0; if (game.global.spreadSheetMode) return; - document.getElementById("buildingsHere").innerHTML += '
' + what + '
0
'; + gameElements.getElementById("buildingsHere").innerHTML += '
' + what + '
0
'; if (locked == 1){ - document.getElementById("buildingsAlert").innerHTML = "!"; - document.getElementById(what + "Alert").innerHTML = "!"; + gameElements.getElementById("buildingsAlert").innerHTML = "!"; + gameElements.getElementById(what + "Alert").innerHTML = "!"; } } function unlockJob(what) { - document.getElementById("jobsHere").innerHTML += '
' + what + '
0
'; + gameElements.getElementById("jobsHere").innerHTML += '
' + what + '
0
'; if (game.jobs[what].locked == 1){ - document.getElementById("jobsAlert").innerHTML = "!"; - document.getElementById(what + "Alert").innerHTML = "!"; + gameElements.getElementById("jobsAlert").innerHTML = "!"; + gameElements.getElementById(what + "Alert").innerHTML = "!"; } game.jobs[what].locked = 0; } function unlockMap(what) { //what here is the array index var item = game.global.mapsOwnedArray[what]; - var elem = document.getElementById("mapsHere"); + var elem = gameElements.getElementById("mapsHere"); elem.innerHTML = '
' + item.name + '
Level ' + item.level + '
' + elem.innerHTML; //onmouseover="tooltip(\'' + item.id + '\',\'maps\',event)" onmouseout="tooltip(\'hide\')" } @@ -622,12 +577,12 @@ function unlockUpgrade(what, displayOnly) { if (!displayOnly) { upgrade.allowed++; } - if (document.getElementById(what + "Owned") === null) - document.getElementById("upgradesHere").innerHTML += '
' + what + '
' + done + '
'; - if (dif > 1) document.getElementById(what + "Owned").innerHTML = upgrade.done + "(+" + dif + ")"; + if (gameElements.getElementById(what + "Owned") === null) + gameElements.getElementById("upgradesHere").innerHTML += '
' + what + '
' + done + '
'; + if (dif > 1) gameElements.getElementById(what + "Owned").innerHTML = upgrade.done + "(+" + dif + ")"; if (!displayOnly){ - document.getElementById("upgradesAlert").innerHTML = "!"; - document.getElementById(what + "Alert").innerHTML = "!"; + gameElements.getElementById("upgradesAlert").innerHTML = "!"; + gameElements.getElementById(what + "Alert").innerHTML = "!"; } } @@ -686,12 +641,12 @@ function checkButtons(what) { function updateButtonColor(what, canAfford, isJob) { var color = (canAfford) ? "black" : "grey"; if (isJob && game.global.firing === true) color = (game.jobs[what].owned >= 1) ? "red" : "grey"; - document.getElementById(what).style.backgroundColor = color; + gameElements.getElementById(what).style.backgroundColor = color; } function unlockEquipment(what) { var equipment = game.equipment[what]; - var elem = document.getElementById("equipmentHere"); + var elem = gameElements.getElementById("equipmentHere"); equipment.locked = 0; var numeral = ""; if (equipment.prestige > 1){ From cb717351fe2ed4f167668a4b545c7122c9898cb0 Mon Sep 17 00:00:00 2001 From: Wing Date: Sat, 4 Jul 2015 02:00:41 +0100 Subject: [PATCH 2/4] Cleaned up the prettify changes so that they always work. Had messed up numbers less than 1 --- main.js | 1 + updates.js | 8 +++++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/main.js b/main.js index afa1c650..188a7e1e 100644 --- a/main.js +++ b/main.js @@ -77,6 +77,7 @@ function save(exportThis) { message("Game Saved!", "Notices"); } else { + console.log(saveString, localStorage.getItem('trimpSave1')); message("For some reason, your game is not saving. Make sure you export and back up your save!", "Notices"); } } diff --git a/updates.js b/updates.js index 4b685d9d..b50a0a65 100644 --- a/updates.js +++ b/updates.js @@ -187,24 +187,26 @@ function prettify(number) { return prettifySub(0); } var base = Math.floor(Math.log(number)/Math.log(1000)); + + if (base <= 0) return prettifySub(number); number /= Math.pow(1000, base); - if (base === 0) return prettifySub(number); var suffices = [ 'K', 'M', 'B', 'T', 'Qa', 'Qi', 'Sx', 'Sp', 'Oc', 'No', 'Dc', 'Ud', 'Dd', 'Td', 'Qad', 'Qid', 'Sxd', 'Spd', 'Od', 'Nd', 'V' ]; var suffix; - if (base >= suffices.length) + if (base <= suffices.length && base > 0) { suffix = suffices[base-1]; } else { + // I strongly recommend using scientific notation instead of ++ // if the base is 22, 23, or 24 you'll end up with the same indicator // being shown which will confuse late game players. - return numberTmp.toExponential(3); + return parseFloat(numberTmp).toExponential(3); } return prettifySub(number) + suffix; From 227110189e2e9c06feb7647fc34e2fb6974eba04 Mon Sep 17 00:00:00 2001 From: Wing Date: Sat, 4 Jul 2015 10:43:34 +0100 Subject: [PATCH 3/4] Dom cache now has an observer to remove nodes from itself. --- primitiveDomCache.js | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/primitiveDomCache.js b/primitiveDomCache.js index 9b65dc78..5fded633 100644 --- a/primitiveDomCache.js +++ b/primitiveDomCache.js @@ -21,6 +21,25 @@ var gameElements = { nodes : {}, + observer:new MutationObserver( + function(mutations) + { + mutations.forEach( + function(mutation) + { + for(var i in mutation.removedNodes) + { + var node = mutation.removedNodes[i]; + if(node.id && gameElements.nodes[node.id]) + { + delete(gameElements.nodes[node.id]); + } + } + } + ); + } + ), + observerOptions:{subtree:false, childList:true}, getElementById:function(id) { if(this.nodes[id]) @@ -29,12 +48,18 @@ var gameElements = { } var elem = document.getElementById(id); + if(elem === null) { return null; - } + } + this.observer.observe(elem.parentNode, this.observerOptions); this.nodes[id] = elem; return elem; + }, + removeElement:function(id) + { + } }; \ No newline at end of file From fab426eb9effdd079f776c49f60b566782dbc3f4 Mon Sep 17 00:00:00 2001 From: Wing Date: Sat, 4 Jul 2015 20:26:17 +0100 Subject: [PATCH 4/4] Dom cache now has an observer to remove nodes from itself and reports to the console if there's a problem. --- primitiveDomCache.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/primitiveDomCache.js b/primitiveDomCache.js index 5fded633..32d057d3 100644 --- a/primitiveDomCache.js +++ b/primitiveDomCache.js @@ -42,17 +42,24 @@ var gameElements = { observerOptions:{subtree:false, childList:true}, getElementById:function(id) { + if(!id) + { + return null; + } if(this.nodes[id]) { return this.nodes[id]; } - + console.log('searching for element' +id); var elem = document.getElementById(id); if(elem === null) { - return null; + console.log('Element '+id+' not found'); + return null; } + + console.log('returning element'); this.observer.observe(elem.parentNode, this.observerOptions); this.nodes[id] = elem;