diff --git a/main.js b/main.js
index eb4c47157..3ab242d74 100644
--- a/main.js
+++ b/main.js
@@ -10,6 +10,12 @@
const version = "1.4"; // generator version
document.title += " v" + version;
+// Switches to disable/enable logging features
+const INFO = 0;
+const TIME = 0;
+const WARN = 1;
+const ERROR = 1;
+
// if map version is not stored, clear localStorage and show a message
if (rn(localStorage.getItem("version"), 2) !== rn(version, 2)) {
localStorage.clear();
@@ -142,7 +148,7 @@ void function checkLoadParameters() {
// of there is a valid maplink, try to load .map file from URL
if (params.get("maplink")) {
- console.warn("Load map from URL");
+ WARN && console.warn("Load map from URL");
const maplink = params.get("maplink");
const pattern = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
const valid = pattern.test(maplink);
@@ -152,7 +158,7 @@ void function checkLoadParameters() {
// if there is a seed (user of MFCG provided), generate map for it
if (params.get("seed")) {
- console.warn("Generate map for seed");
+ WARN && console.warn("Generate map for seed");
generateMapOnLoad();
return;
}
@@ -161,24 +167,24 @@ void function checkLoadParameters() {
if (onloadMap.value === "saved") {
ldb.get("lastMap", blob => {
if (blob) {
- console.warn("Load last saved map");
+ WARN && console.warn("Load last saved map");
try {
uploadMap(blob);
}
catch(error) {
- console.error(error);
- console.warn("Cannot load stored map, random map to be generated");
+ ERROR && console.error(error);
+ WARN && console.warn("Cannot load stored map, random map to be generated");
generateMapOnLoad();
}
} else {
- console.error("No map stored, random map to be generated");
+ ERROR && console.error("No map stored, random map to be generated");
generateMapOnLoad();
}
});
return;
}
- console.warn("Generate random map");
+ WARN && console.warn("Generate random map");
generateMapOnLoad();
}()
@@ -197,7 +203,7 @@ function loadMapFromURL(maplink, random) {
}
function showUploadErrorMessage(error, URL, random) {
- console.error(error);
+ ERROR && console.error(error);
alertMessage.innerHTML = `Cannot load map from the ${link(URL, "link provided")}.
${random?`A new random map is generated. `:''}
Please ensure the linked file is reachable and CORS is allowed on server side`;
@@ -249,7 +255,7 @@ function focusOn() {
// find burg for MFCG and focus on it
function findBurgForMFCG(params) {
const cells = pack.cells, burgs = pack.burgs;
- if (pack.burgs.length < 2) {console.error("Cannot select a burg for MFCG"); return;}
+ if (pack.burgs.length < 2) {ERROR && console.error("Cannot select a burg for MFCG"); return;}
// used for selection
const size = +params.get("size");
@@ -274,7 +280,7 @@ function findBurgForMFCG(params) {
// select a burg with closest population from selection
const selected = d3.scan(selection, (a, b) => Math.abs(a.population - size) - Math.abs(b.population - size));
const burgId = selection[selected].i;
- if (!burgId) {console.error("Cannot select a burg for MFCG"); return;}
+ if (!burgId) {ERROR && console.error("Cannot select a burg for MFCG"); return;}
const b = burgs[burgId];
const referrer = new URL(document.referrer);
@@ -507,7 +513,7 @@ function generate() {
const timeStart = performance.now();
invokeActiveZooming();
generateSeed();
- console.group("Generated Map " + seed);
+ INFO && console.group("Generated Map " + seed);
applyMapSize();
randomizeOptions();
placePoints();
@@ -548,12 +554,12 @@ function generate() {
addZones();
Names.getMapName();
- console.warn(`TOTAL: ${rn((performance.now()-timeStart)/1000,2)}s`);
+ WARN && console.warn(`TOTAL: ${rn((performance.now()-timeStart)/1000,2)}s`);
showStatistics();
- console.groupEnd("Generated Map " + seed);
+ INFO && console.groupEnd("Generated Map " + seed);
}
catch(error) {
- console.error(error);
+ ERROR && console.error(error);
clearMainTip();
alertMessage.innerHTML = `An error is occured on map generation. Please retry.
@@ -586,35 +592,35 @@ function generateSeed() {
// Place points to calculate Voronoi diagram
function placePoints() {
- console.time("placePoints");
+ TIME && console.time("placePoints");
const cellsDesired = 10000 * densityInput.value; // generate 10k points for each densityInput point
const spacing = grid.spacing = rn(Math.sqrt(graphWidth * graphHeight / cellsDesired), 2); // spacing between points before jirrering
grid.boundary = getBoundaryPoints(graphWidth, graphHeight, spacing);
grid.points = getJitteredGrid(graphWidth, graphHeight, spacing); // jittered square grid
grid.cellsX = Math.floor((graphWidth + 0.5 * spacing) / spacing);
grid.cellsY = Math.floor((graphHeight + 0.5 * spacing) / spacing);
- console.timeEnd("placePoints");
+ TIME && console.timeEnd("placePoints");
}
// calculate Delaunay and then Voronoi diagram
function calculateVoronoi(graph, points) {
- console.time("calculateDelaunay");
+ TIME && console.time("calculateDelaunay");
const n = points.length;
const allPoints = points.concat(grid.boundary);
const delaunay = Delaunator.from(allPoints);
- console.timeEnd("calculateDelaunay");
+ TIME && console.timeEnd("calculateDelaunay");
- console.time("calculateVoronoi");
+ TIME && console.time("calculateVoronoi");
const voronoi = Voronoi(delaunay, allPoints, n);
graph.cells = voronoi.cells;
graph.cells.i = n < 65535 ? Uint16Array.from(d3.range(n)) : Uint32Array.from(d3.range(n)); // array of indexes
graph.vertices = voronoi.vertices;
- console.timeEnd("calculateVoronoi");
+ TIME && console.timeEnd("calculateVoronoi");
}
// Mark features (ocean, lakes, islands)
function markFeatures() {
- console.time("markFeatures");
+ TIME && console.time("markFeatures");
Math.seedrandom(seed); // restart Math.random() to get the same result on heightmap edit in Erase mode
const cells = grid.cells, heights = grid.cells.h;
cells.f = new Uint16Array(cells.i.length); // cell feature number
@@ -648,7 +654,7 @@ function markFeatures() {
queue[0] = cells.f.findIndex(f => !f); // find unmarked cell
}
- console.timeEnd("markFeatures");
+ TIME && console.timeEnd("markFeatures");
}
// How to handle lakes generated near seas? They can be both open or closed.
@@ -658,7 +664,7 @@ function openNearSeaLakes() {
if (templateInput.value === "Atoll") return; // no need for Atolls
const cells = grid.cells, features = grid.features;
if (!features.find(f => f.type === "lake")) return; // no lakes
- console.time("openLakes");
+ TIME && console.time("openLakes");
const limit = 50; // max height that can be breached by water
for (let t = 0, removed = true; t < 5 && removed; t++) {
@@ -694,7 +700,7 @@ function openNearSeaLakes() {
return true;
}
- console.timeEnd("openLakes");
+ TIME && console.timeEnd("openLakes");
}
// define map size and position based on template and random factor
@@ -745,7 +751,7 @@ function calculateMapCoordinates() {
// temperature model
function calculateTemperatures() {
- console.time('calculateTemperatures');
+ TIME && console.time('calculateTemperatures');
const cells = grid.cells;
cells.temp = new Int8Array(cells.i.length); // temperature array
@@ -771,12 +777,12 @@ function calculateTemperatures() {
return rn(height / 1000 * 6.5);
}
- console.timeEnd('calculateTemperatures');
+ TIME && console.timeEnd('calculateTemperatures');
}
// simplest precipitation model
function generatePrecipitation() {
- console.time('generatePrecipitation');
+ TIME && console.time('generatePrecipitation');
prec.selectAll("*").remove();
const cells = grid.cells;
cells.prec = new Uint8Array(cells.i.length); // precipitation array
@@ -887,12 +893,12 @@ function generatePrecipitation() {
if (southerly) wind.append("text").attr("x", graphWidth / 2).attr("y", graphHeight - 20).text("\u21C8");
}();
- console.timeEnd('generatePrecipitation');
+ TIME && console.timeEnd('generatePrecipitation');
}
// recalculate Voronoi Graph to pack cells
function reGraph() {
- console.time("reGraph");
+ TIME && console.time("reGraph");
let cells = grid.cells, points = grid.points, features = grid.features;
const newCells = {p:[], g:[], h:[], t:[], f:[], r:[], biome:[]}; // to store new data
const spacing2 = grid.spacing ** 2;
@@ -936,12 +942,12 @@ function reGraph() {
cells.area = new Uint16Array(cells.i.length); // cell area
cells.i.forEach(i => cells.area[i] = Math.abs(d3.polygonArea(getPackPolygon(i))));
- console.timeEnd("reGraph");
+ TIME && console.timeEnd("reGraph");
}
// Detect and draw the coasline
function drawCoastline() {
- console.time('drawCoastline');
+ TIME && console.time('drawCoastline');
reMarkFeatures();
const cells = pack.cells, vertices = pack.vertices, n = cells.i.length, features = pack.features;
const used = new Uint8Array(features.length); // store conneted features
@@ -1016,7 +1022,7 @@ function drawCoastline() {
if (v[0] !== prev && c0 !== c1) current = v[0]; else
if (v[1] !== prev && c1 !== c2) current = v[1]; else
if (v[2] !== prev && c0 !== c2) current = v[2];
- if (current === chain[chain.length-1]) {console.error("Next vertex is not found"); break;}
+ if (current === chain[chain.length-1]) {ERROR && console.error("Next vertex is not found"); break;}
}
//chain.push(chain[0]); // push first vertex as the last one
return chain;
@@ -1040,12 +1046,12 @@ function drawCoastline() {
}
}
- console.timeEnd('drawCoastline');
+ TIME && console.timeEnd('drawCoastline');
}
// Re-mark features (ocean, lakes, islands)
function reMarkFeatures() {
- console.time("reMarkFeatures");
+ TIME && console.time("reMarkFeatures");
const cells = pack.cells, features = pack.features = [0], temp = grid.cells.temp;
cells.f = new Uint16Array(cells.i.length); // cell feature number
cells.t = new Int16Array(cells.i.length); // cell type: 1 = land along coast; -1 = water along coast;
@@ -1113,13 +1119,13 @@ function reMarkFeatures() {
return "isle";
}
- console.timeEnd("reMarkFeatures");
+ TIME && console.timeEnd("reMarkFeatures");
}
// temporary elevate some lakes to resolve depressions and flux the water to form an open (exorheic) lake
function elevateLakes() {
if (templateInput.value === "Atoll") return; // no need for Atolls
- console.time('elevateLakes');
+ TIME && console.time('elevateLakes');
const cells = pack.cells, features = pack.features;
const maxCells = cells.i.length / 100; // size limit; let big lakes be closed (endorheic)
cells.i.forEach(i => {
@@ -1129,12 +1135,12 @@ function elevateLakes() {
//debug.append("circle").attr("cx", cells.p[i][0]).attr("cy", cells.p[i][1]).attr("r", .5).attr("fill", "blue");
});
- console.timeEnd('elevateLakes');
+ TIME && console.timeEnd('elevateLakes');
}
// assign biome id for each cell
function defineBiomes() {
- console.time("defineBiomes");
+ TIME && console.time("defineBiomes");
const cells = pack.cells, f = pack.features, temp = grid.cells.temp, prec = grid.cells.prec;
cells.biome = new Uint8Array(cells.i.length); // biomes array
@@ -1153,7 +1159,7 @@ function defineBiomes() {
return rn(4 + d3.mean(n));
}
- console.timeEnd("defineBiomes");
+ TIME && console.timeEnd("defineBiomes");
}
// assign biome id to a cell
@@ -1168,7 +1174,7 @@ function getBiomeId(moisture, temperature, height) {
// assess cells suitability to calculate population and rand cells for culture center and burgs placement
function rankCells() {
- console.time('rankCells');
+ TIME && console.time('rankCells');
const cells = pack.cells, f = pack.features;
cells.s = new Int16Array(cells.i.length); // cell suitability array
cells.pop = new Float32Array(cells.i.length); // cell population array
@@ -1202,13 +1208,13 @@ function rankCells() {
cells.pop[i] = cells.s[i] > 0 ? cells.s[i] * cells.area[i] / areaMean : 0;
}
- console.timeEnd('rankCells');
+ TIME && console.timeEnd('rankCells');
}
// generate some markers
function addMarkers(number = 1) {
if (!number) return;
- console.time("addMarkers");
+ TIME && console.time("addMarkers");
const cells = pack.cells, states = pack.states;
void function addVolcanoes() {
@@ -1374,12 +1380,12 @@ function addMarkers(number = 1) {
return id;
}
- console.timeEnd("addMarkers");
+ TIME && console.timeEnd("addMarkers");
}
// regenerate some zones
function addZones(number = 1) {
- console.time("addZones");
+ TIME && console.time("addZones");
const data = [], cells = pack.cells, states = pack.states, burgs = pack.burgs;
const used = new Uint8Array(cells.i.length); // to store used cells
@@ -1690,7 +1696,7 @@ function addZones(number = 1) {
.attr("points", d => getPackPolygon(d)).attr("id", function(d) {return this.parentNode.id+"_"+d});
}()
- console.timeEnd("addZones");
+ TIME && console.timeEnd("addZones");
}
// show map stats on generation complete
@@ -1712,11 +1718,11 @@ function showStatistics() {
mapId = Date.now(); // unique map id is it's creation date number
mapHistory.push({seed, width:graphWidth, height:graphHeight, template, created:mapId});
- console.log(stats);
+ INFO && console.log(stats);
}
const regenerateMap = debounce(function() {
- console.warn("Generate new random map");
+ WARN && console.warn("Generate new random map");
closeDialogs("#worldConfigurator, #options3d");
customization = 0;
undraw();
diff --git a/modules/burgs-and-states.js b/modules/burgs-and-states.js
index 4cc36e2d4..bbb48e4f5 100644
--- a/modules/burgs-and-states.js
+++ b/modules/burgs-and-states.js
@@ -32,7 +32,7 @@
drawBurgs();
function placeCapitals() {
- console.time('placeCapitals');
+ TIME && console.time('placeCapitals');
let count = +regionsInput.value;
let burgs = [0];
@@ -41,8 +41,8 @@
if (sorted.length < count * 10) {
count = Math.floor(sorted.length / 10);
- if (!count) {console.warn(`There is no populated cells. Cannot generate states`); return burgs;}
- else {console.warn(`Not enough populated cells (${sorted.length}). Will generate only ${count} states`);}
+ if (!count) {WARN && console.warn(`There is no populated cells. Cannot generate states`); return burgs;}
+ else {WARN && console.warn(`Not enough populated cells (${sorted.length}). Will generate only ${count} states`);}
}
let burgsTree = d3.quadtree();
@@ -57,20 +57,20 @@
}
if (i === sorted.length - 1) {
- console.warn("Cannot place capitals with current spacing. Trying again with reduced spacing");
+ WARN && console.warn("Cannot place capitals with current spacing. Trying again with reduced spacing");
burgsTree = d3.quadtree();
i = -1, burgs = [0], spacing /= 1.2;
}
}
burgs[0] = burgsTree;
- console.timeEnd('placeCapitals');
+ TIME && console.timeEnd('placeCapitals');
return burgs;
}
// For each capital create a state
function createStates() {
- console.time('createStates');
+ TIME && console.time('createStates');
const states = [{i:0, name: "Neutrals"}];
const colors = getColors(burgs.length-1);
@@ -94,13 +94,13 @@
cells.burg[b.cell] = i;
});
- console.timeEnd('createStates');
+ TIME && console.timeEnd('createStates');
return states;
}
// place secondary settlements based on geo and economical evaluation
function placeTowns() {
- console.time('placeTowns');
+ TIME && console.time('placeTowns');
const score = new Int16Array(cells.s.map(s => s * gauss(1,3,0,20,3))); // a bit randomized cell score for towns placement
const sorted = cells.i.filter(i => !cells.burg[i] && score[i] > 0 && cells.culture[i]).sort((a, b) => score[b] - score[a]); // filtered and sorted array of indexes
@@ -129,17 +129,17 @@
}
if (manorsInput.value != 1000 && burgsAdded < desiredNumber) {
- console.error(`Cannot place all burgs. Requested ${desiredNumber}, placed ${burgsAdded}`);
+ ERROR && console.error(`Cannot place all burgs. Requested ${desiredNumber}, placed ${burgsAdded}`);
}
burgs[0] = {name:undefined}; // do not store burgsTree anymore
- console.timeEnd('placeTowns');
+ TIME && console.timeEnd('placeTowns');
}
}
// define burg coordinates, port status and define details
const specifyBurgs = function() {
- console.time("specifyBurgs");
+ TIME && console.time("specifyBurgs");
const cells = pack.cells, vertices = pack.vertices, features = pack.features, temp = grid.cells.temp;
for (const b of pack.burgs) {
@@ -185,7 +185,7 @@
if (featurePorts.length === 1) featurePorts[0].port = 0;
}
- console.timeEnd("specifyBurgs");
+ TIME && console.timeEnd("specifyBurgs");
}
const defineBurgFeatures = function(newburg) {
@@ -202,7 +202,7 @@
}
const drawBurgs = function() {
- console.time("drawBurgs");
+ TIME && console.time("drawBurgs");
// remove old data
burgIcons.selectAll("circle").remove();
@@ -251,12 +251,12 @@
.attr("x", d => rn(d.x - taSize * .47, 2)).attr("y", d => rn(d.y - taSize * .47, 2))
.attr("width", taSize).attr("height", taSize);
- console.timeEnd("drawBurgs");
+ TIME && console.timeEnd("drawBurgs");
}
// growth algorithm to assign cells to states like we did for cultures
const expandStates = function() {
- console.time("expandStates");
+ TIME && console.time("expandStates");
const cells = pack.cells, states = pack.states, cultures = pack.cultures, burgs = pack.burgs;
cells.state = new Uint16Array(cells.i.length); // cell state
@@ -331,11 +331,11 @@
return 0;
}
- console.timeEnd("expandStates");
+ TIME && console.timeEnd("expandStates");
}
const normalizeStates = function() {
- console.time("normalizeStates");
+ TIME && console.time("normalizeStates");
const cells = pack.cells, burgs = pack.burgs;
for (const i of cells.i) {
@@ -350,13 +350,13 @@
cells.state[i] = cells.state[adversaries[0]];
//debug.append("circle").attr("cx", cells.p[i][0]).attr("cy", cells.p[i][1]).attr("r", .5).attr("fill", "red");
}
- console.timeEnd("normalizeStates");
+ TIME && console.timeEnd("normalizeStates");
}
// Resets the cultures of all burgs and states to their
// cell or center cell's (respectively) culture.
const updateCultures = function () {
- console.time('updateCulturesForBurgsAndStates');
+ TIME && console.time('updateCulturesForBurgsAndStates');
// Assign the culture associated with the burgs cell.
pack.burgs = pack.burgs.map( (burg, index) => {
@@ -376,12 +376,12 @@
return {...state, culture: pack.cells.culture[state.center]};
});
- console.timeEnd('updateCulturesForBurgsAndStates');
+ TIME && console.timeEnd('updateCulturesForBurgsAndStates');
}
// calculate and draw curved state labels for a list of states
const drawStateLabels = function(list) {
- console.time("drawStateLabels");
+ TIME && console.time("drawStateLabels");
const cells = pack.cells, features = pack.features, states = pack.states;
const paths = []; // text paths
lineGen.curve(d3.curveBundle.beta(1));
@@ -563,12 +563,12 @@
if (!displayed) toggleLabels();
}()
- console.timeEnd("drawStateLabels");
+ TIME && console.timeEnd("drawStateLabels");
}
// calculate states data like area, population etc.
const collectStatistics = function() {
- console.time("collectStatistics");
+ TIME && console.time("collectStatistics");
const cells = pack.cells, states = pack.states;
states.forEach(s => {
s.cells = s.area = s.burgs = s.rural = s.urban = 0;
@@ -595,11 +595,11 @@
// convert neighbors Set object into array
states.forEach(s => s.neighbors = Array.from(s.neighbors));
- console.timeEnd("collectStatistics");
+ TIME && console.timeEnd("collectStatistics");
}
const assignColors = function() {
- console.time("assignColors");
+ TIME && console.time("assignColors");
const colors = ["#66c2a5", "#fc8d62", "#8da0cb", "#e78ac3", "#a6d854", "#ffd92f"]; // d3.schemeSet2;
// assin basic color using greedy coloring algorithm
@@ -620,7 +620,7 @@
});
});
- console.timeEnd("assignColors");
+ TIME && console.timeEnd("assignColors");
}
// generate historical conflicts of each state
@@ -641,7 +641,7 @@
// generate Diplomatic Relationships
const generateDiplomacy = function() {
- console.time("generateDiplomacy");
+ TIME && console.time("generateDiplomacy");
const cells = pack.cells, states = pack.states;
const chronicle = states[0].diplomacy = [];
const valid = states.filter(s => s.i && !states.removed);
@@ -782,13 +782,13 @@
chronicle.push(war); // add a record to diplomatical history
}
- console.timeEnd("generateDiplomacy");
+ TIME && console.timeEnd("generateDiplomacy");
//console.table(states.map(s => s.diplomacy));
}
// select a forms for listed or all valid states
const defineStateForms = function(list) {
- console.time("defineStateForms");
+ TIME && console.time("defineStateForms");
const states = pack.states.filter(s => s.i && !s.removed);
if (states.length < 1) return;
@@ -878,7 +878,7 @@
}
}
- console.timeEnd("defineStateForms");
+ TIME && console.timeEnd("defineStateForms");
}
const getFullName = function(s) {
@@ -890,7 +890,7 @@
}
const generateProvinces = function(regenerate) {
- console.time("generateProvinces");
+ TIME && console.time("generateProvinces");
const localSeed = regenerate ? Math.floor(Math.random() * 1e9).toString() : seed;
Math.seedrandom(localSeed);
@@ -1050,7 +1050,7 @@
}
});
- console.timeEnd("generateProvinces");
+ TIME && console.timeEnd("generateProvinces");
}
return {generate, expandStates, normalizeStates, assignColors,
diff --git a/modules/cultures-generator.js b/modules/cultures-generator.js
index fa2cb253c..8e05018fe 100644
--- a/modules/cultures-generator.js
+++ b/modules/cultures-generator.js
@@ -7,7 +7,7 @@
let cells;
const generate = function() {
- console.time('generateCultures');
+ TIME && console.time('generateCultures');
cells = pack.cells;
cells.culture = new Uint16Array(cells.i.length); // cell cultures
let count = Math.min(+culturesInput.value, +culturesSet.selectedOptions[0].dataset.max);
@@ -16,7 +16,7 @@
if (populated.length < count * 25) {
count = Math.floor(populated.length / 50);
if (!count) {
- console.warn(`There are no populated cells. Cannot generate cultures`);
+ WARN && console.warn(`There are no populated cells. Cannot generate cultures`);
pack.cultures = [{name:"Wildlands", i:0, base:1}];
alertMessage.innerHTML = `
The climate is harsh and people cannot live in this world.
@@ -27,7 +27,7 @@
});
return;
} else {
- console.warn(`Not enough populated cells (${populated.length}). Will generate only ${count} cultures`);
+ WARN && console.warn(`Not enough populated cells (${populated.length}). Will generate only ${count} cultures`);
alertMessage.innerHTML = `
There are only ${populated.length} populated cells and it's insufficient livable area.
Only ${count} out of ${culturesInput.value} requested cultures will be generated.
@@ -68,7 +68,7 @@
cultures.unshift({name:"Wildlands", i:0, base:1, origin:null});
// make sure all bases exist in nameBases
- if (!nameBases.length) {console.error("Name base is empty, default nameBases will be applied"); nameBases = Names.getNameBases();}
+ if (!nameBases.length) {ERROR && console.error("Name base is empty, default nameBases will be applied"); nameBases = Names.getNameBases();}
cultures.forEach(c => c.base = c.base % nameBases.length);
function getRandomCultures(c) {
@@ -108,7 +108,7 @@
return rn((Math.random() * powerInput.value / 2 + 1) * base, 1);
}
- console.timeEnd('generateCultures');
+ TIME && console.timeEnd('generateCultures');
}
// assign a unique two-letters code (abbreviation)
@@ -355,7 +355,7 @@
// expand cultures across the map (Dijkstra-like algorithm)
const expand = function() {
- console.time('expandCultures');
+ TIME && console.time('expandCultures');
cells = pack.cells;
const queue = new PriorityQueue({comparator: (a, b) => a.p - b.p});
@@ -392,7 +392,7 @@
});
}
//debug.selectAll(".text").data(cost).enter().append("text").attr("x", (d, e) => cells.p[e][0]-1).attr("y", (d, e) => cells.p[e][1]-1).text(d => d ? rn(d) : "").attr("font-size", 2);
- console.timeEnd('expandCultures');
+ TIME && console.timeEnd('expandCultures');
}
function getBiomeCost(c, biome, type) {
diff --git a/modules/heightmap-generator.js b/modules/heightmap-generator.js
index dc2cf52b2..e469b4dce 100644
--- a/modules/heightmap-generator.js
+++ b/modules/heightmap-generator.js
@@ -7,7 +7,7 @@
let cells, p;
const generate = function() {
- console.time('generateHeightmap');
+ TIME && console.time('generateHeightmap');
cells = grid.cells, p = grid.points;
cells.h = new Uint8Array(grid.points.length);
@@ -25,7 +25,7 @@
case "Shattered": templateShattered(); break;
}
- console.timeEnd('generateHeightmap');
+ TIME && console.timeEnd('generateHeightmap');
}
// parse template step
@@ -507,7 +507,7 @@
}
function getPointInRange(range, length) {
- if (typeof range !== "string") {console.error("Range should be a string"); return;}
+ if (typeof range !== "string") {ERROR && console.error("Range should be a string"); return;}
const min = range.split("-")[0]/100 || 0;
const max = range.split("-")[1]/100 || 100;
return rand(min * length, max * length);
diff --git a/modules/military-generator.js b/modules/military-generator.js
index a4b578e63..4dd19d3fc 100644
--- a/modules/military-generator.js
+++ b/modules/military-generator.js
@@ -7,7 +7,7 @@
let cells, p, states;
const generate = function() {
- console.time("generateMilitaryForces");
+ TIME && console.time("generateMilitaryForces");
cells = pack.cells, p = cells.p, states = pack.states;
const valid = states.filter(s => s.i && !s.removed); // valid states
if (!options.military) options.military = getDefaultOptions();
@@ -176,7 +176,7 @@
return regiments;
}
- console.timeEnd("generateMilitaryForces");
+ TIME && console.timeEnd("generateMilitaryForces");
}
const getDefaultOptions = function() {
diff --git a/modules/names-generator.js b/modules/names-generator.js
index 987760110..32367be18 100644
--- a/modules/names-generator.js
+++ b/modules/names-generator.js
@@ -56,13 +56,13 @@
// generate name using Markov's chain
const getBase = function(base, min, max, dupl) {
- if (base === undefined) {console.error("Please define a base"); return;}
+ if (base === undefined) {ERROR && console.error("Please define a base"); return;}
if (!chains[base]) updateChain(base);
const data = chains[base];
if (!data || data[""] === undefined) {
tip("Namesbase " + base + " is incorrect. Please check in namesbase editor", false, "error");
- console.error("Namebase " + base + " is incorrect!");
+ ERROR && console.error("Namebase " + base + " is incorrect!");
return "ERROR";
}
@@ -106,7 +106,7 @@
if (name.split(" ").some(part => part.length < 2)) name = name.split(" ").map((p,i) => i ? p.toLowerCase() : p).join("");
if (name.length < 2) {
- console.error("Name is too short! Random name will be selected");
+ ERROR && console.error("Name is too short! Random name will be selected");
name = ra(nameBases[base].b.split(","));
}
@@ -115,14 +115,14 @@
// generate name for culture
const getCulture = function(culture, min, max, dupl) {
- if (culture === undefined) {console.error("Please define a culture"); return;}
+ if (culture === undefined) {ERROR && console.error("Please define a culture"); return;}
const base = pack.cultures[culture].base;
return getBase(base, min, max, dupl);
}
// generate short name for culture
const getCultureShort = function(culture) {
- if (culture === undefined) {console.error("Please define a culture"); return;}
+ if (culture === undefined) {ERROR && console.error("Please define a culture"); return;}
return getBaseShort(pack.cultures[culture].base);
}
@@ -139,8 +139,8 @@
// generate state name based on capital or random name and culture-specific suffix
const getState = function(name, culture, base) {
- if (name === undefined) {console.error("Please define a base name"); return;}
- if (culture === undefined && base === undefined) {console.error("Please define a culture"); return;}
+ if (name === undefined) {ERROR && console.error("Please define a base name"); return;}
+ if (culture === undefined && base === undefined) {ERROR && console.error("Please define a culture"); return;}
if (base === undefined) base = pack.cultures[culture].base;
// exclude endings inappropriate for states name
diff --git a/modules/ocean-layers.js b/modules/ocean-layers.js
index b5be82f47..a39bbdd71 100644
--- a/modules/ocean-layers.js
+++ b/modules/ocean-layers.js
@@ -9,7 +9,7 @@
const OceanLayers = function OceanLayers() {
const outline = oceanLayers.attr("layers");
if (outline === "none") return;
- console.time("drawOceanLayers");
+ TIME && console.time("drawOceanLayers");
lineGen.curve(d3.curveBasisClosed);
cells = grid.cells, pointsN = grid.cells.i.length, vertices = grid.vertices;
@@ -51,7 +51,7 @@
return cells.v[i][cells.c[i].findIndex(c => cells.t[c] < t || !cells.t[c])];
}
- console.timeEnd("drawOceanLayers");
+ TIME && console.timeEnd("drawOceanLayers");
}
function randomizeOutline() {
@@ -89,7 +89,7 @@
if (v[0] !== undefined && v[0] !== prev && c0 !== c1) current = v[0];
else if (v[1] !== undefined && v[1] !== prev && c1 !== c2) current = v[1];
else if (v[2] !== undefined && v[2] !== prev && c0 !== c2) current = v[2];
- if (current === chain[chain.length - 1]) {console.error("Next vertex is not found"); break;}
+ if (current === chain[chain.length - 1]) {ERROR && console.error("Next vertex is not found"); break;}
}
chain.push(chain[0]); // push first vertex as the last one
return chain;
diff --git a/modules/relief-icons.js b/modules/relief-icons.js
index 0d806e8bc..ab1916cea 100644
--- a/modules/relief-icons.js
+++ b/modules/relief-icons.js
@@ -5,7 +5,7 @@
}(this, (function () {'use strict';
const ReliefIcons = function() {
- console.time('drawRelief');
+ TIME && console.time('drawRelief');
terrain.selectAll("*").remove();
const density = terrain.attr("density") || .4;
const size = 1.6 * (terrain.attr("size") || 1);
@@ -69,7 +69,7 @@
terrain.html(reliefHTML);
}()
- console.timeEnd('drawRelief');
+ TIME && console.timeEnd('drawRelief');
}
function getBiomeIcon(i, b) {
diff --git a/modules/religions-generator.js b/modules/religions-generator.js
index 90ee88eea..1563f966a 100644
--- a/modules/religions-generator.js
+++ b/modules/religions-generator.js
@@ -54,7 +54,7 @@
};
const generate = function() {
- console.time('generateReligions');
+ TIME && console.time('generateReligions');
const cells = pack.cells, states = pack.states, cultures = pack.cultures;
const religions = pack.religions = [];
cells.religion = new Uint16Array(cells.culture); // cell religion; initially based on culture
@@ -164,7 +164,7 @@
expandHeresies();
checkCenters();
- console.timeEnd('generateReligions');
+ TIME && console.timeEnd('generateReligions');
}
const add = function(center) {
@@ -280,14 +280,14 @@
}
function updateCultures() {
- console.time('updateCulturesForReligions');
+ TIME && console.time('updateCulturesForReligions');
pack.religions = pack.religions.map( (religion, index) => {
if(index === 0) {
return religion;
}
return {...religion, culture: pack.cells.culture[religion.center]};
});
- console.timeEnd('updateCulturesForReligions');
+ TIME && console.timeEnd('updateCulturesForReligions');
}
// assign a unique two-letters code (abbreviation)
@@ -303,7 +303,7 @@
// get supreme deity name
const getDeityName = function(culture) {
- if (culture === undefined) {console.error("Please define a culture"); return;}
+ if (culture === undefined) {ERROR && console.error("Please define a culture"); return;}
const meaning = generateMeaning();
const cultureName = Names.getCulture(culture, null, null, "", .8);
return cultureName + ", The " + meaning;
diff --git a/modules/river-generator.js b/modules/river-generator.js
index 20ee34ba2..078392e13 100644
--- a/modules/river-generator.js
+++ b/modules/river-generator.js
@@ -5,7 +5,7 @@
}(this, (function () {'use strict';
const generate = function(changeHeights = true) {
- console.time('generateRivers');
+ TIME && console.time('generateRivers');
Math.seedrandom(seed);
const cells = pack.cells, p = cells.p, features = pack.features;
@@ -136,7 +136,7 @@
// apply change heights as basic one
if (changeHeights) cells.h = Uint8Array.from(h);
- console.timeEnd('generateRivers');
+ TIME && console.timeEnd('generateRivers');
}
// depression filling algorithm (for a correct water flux modeling)
diff --git a/modules/routes-generator.js b/modules/routes-generator.js
index af45dc4e6..d9d1905cc 100644
--- a/modules/routes-generator.js
+++ b/modules/routes-generator.js
@@ -5,7 +5,7 @@
}(this, (function () {'use strict';
const getRoads = function() {
- console.time("generateMainRoads");
+ TIME && console.time("generateMainRoads");
const cells = pack.cells, burgs = pack.burgs.filter(b => b.i && !b.removed);
const capitals = burgs.filter(b => b.capital);
if (capitals.length < 2) return []; // not enough capitals to build main roads
@@ -21,12 +21,12 @@
}
cells.i.forEach(i => cells.s[i] += cells.road[i] / 2); // add roads to suitability score
- console.timeEnd("generateMainRoads");
+ TIME && console.timeEnd("generateMainRoads");
return paths;
}
const getTrails = function() {
- console.time("generateTrails");
+ TIME && console.time("generateTrails");
const cells = pack.cells, burgs = pack.burgs.filter(b => b.i && !b.removed);
if (burgs.length < 2) return []; // not enough burgs to build trails
@@ -55,12 +55,12 @@
});
}
- console.timeEnd("generateTrails");
+ TIME && console.timeEnd("generateTrails");
return paths;
}
const getSearoutes = function() {
- console.time("generateSearoutes");
+ TIME && console.time("generateSearoutes");
const allPorts = pack.burgs.filter(b => b.port > 0 && !b.removed);
if (allPorts.length < 2) return [];
@@ -93,12 +93,12 @@
});
- console.timeEnd("generateSearoutes");
+ TIME && console.timeEnd("generateSearoutes");
return paths;
}
const draw = function(main, small, ocean) {
- console.time("drawRoutes");
+ TIME && console.time("drawRoutes");
const cells = pack.cells, burgs = pack.burgs;
lineGen.curve(d3.curveCatmullRom.alpha(0.1));
@@ -133,7 +133,7 @@
return [x, y];
})), 1));
- console.timeEnd("drawRoutes");
+ TIME && console.timeEnd("drawRoutes");
}
const regenerate = function() {
diff --git a/modules/save-and-load.js b/modules/save-and-load.js
index 6ad477016..7ee574a55 100644
--- a/modules/save-and-load.js
+++ b/modules/save-and-load.js
@@ -3,7 +3,7 @@
// download map as SVG
async function saveSVG() {
- console.time("saveSVG");
+ TIME && console.time("saveSVG");
const url = await getMapURL("svg");
const link = document.createElement("a");
link.download = getFileName() + ".svg";
@@ -12,12 +12,12 @@ async function saveSVG() {
link.click();
tip(`${link.download} is saved. Open "Downloads" screen (crtl + J) to check. You can set image scale in options`, true, "success", 5000);
- console.timeEnd("saveSVG");
+ TIME && console.timeEnd("saveSVG");
}
// download map as PNG
async function savePNG() {
- console.time("savePNG");
+ TIME && console.time("savePNG");
const url = await getMapURL("png");
const link = document.createElement("a");
@@ -43,12 +43,12 @@ async function savePNG() {
});
}
- console.timeEnd("savePNG");
+ TIME && console.timeEnd("savePNG");
}
// download map as JPEG
async function saveJPEG() {
- console.time("saveJPEG");
+ TIME && console.time("saveJPEG");
const url = await getMapURL("png");
const canvas = document.createElement("canvas");
@@ -70,7 +70,7 @@ async function saveJPEG() {
window.setTimeout(() => window.URL.revokeObjectURL(URL), 5000);
}
- console.timeEnd("saveJPEG");
+ TIME && console.timeEnd("saveJPEG");
}
// parse map svg to object url
@@ -228,7 +228,7 @@ function GFontToDataURI(url) {
// prepare map data for saving
function getMapData() {
- console.time("createMapDataBlob");
+ TIME && console.time("createMapDataBlob");
return new Promise(resolve => {
const date = new Date();
@@ -283,7 +283,7 @@ function getMapData() {
namesData, rivers].join("\r\n");
const blob = new Blob([data], {type: "text/plain"});
- console.timeEnd("createMapDataBlob");
+ TIME && console.timeEnd("createMapDataBlob");
resolve(blob);
});
@@ -448,7 +448,7 @@ function quickLoad() {
loadMapPrompt(blob);
} else {
tip("No map stored. Save map to storage first", true, "error", 2000);
- console.error("No map stored");
+ ERROR && console.error("No map stored");
}
});
}
@@ -467,12 +467,12 @@ function loadMapPrompt(blob) {
});
function loadLastSavedMap() {
- console.warn("Load last saved map");
+ WARN && console.warn("Load last saved map");
try {
uploadMap(blob);
}
catch(error) {
- console.error(error);
+ ERROR && console.error(error);
tip("Cannot load last saved map", true, "error", 2000);
}
}
@@ -564,7 +564,7 @@ function parseLoadedData(data) {
mapId = params[6] ? +params[6] : Date.now();
}()
- console.group("Loaded Map " + seed);
+ INFO && console.group("Loaded Map " + seed);
void function parseSettings() {
const settings = data[1].split("|");
@@ -1006,49 +1006,49 @@ function parseLoadedData(data) {
invalidStates.forEach(s => {
const invalidCells = cells.i.filter(i => cells.state[i] === s);
invalidCells.forEach(i => cells.state[i] = 0);
- console.error("Data Integrity Check. Invalid state", s, "is assigned to cells", invalidCells);
+ ERROR && console.error("Data Integrity Check. Invalid state", s, "is assigned to cells", invalidCells);
});
const invalidProvinces = [...new Set(cells.province)].filter(p => p && (!pack.provinces[p] || pack.provinces[p].removed));
invalidProvinces.forEach(p => {
const invalidCells = cells.i.filter(i => cells.province[i] === p);
invalidCells.forEach(i => cells.province[i] = 0);
- console.error("Data Integrity Check. Invalid province", p, "is assigned to cells", invalidCells);
+ ERROR && console.error("Data Integrity Check. Invalid province", p, "is assigned to cells", invalidCells);
});
const invalidCultures = [...new Set(cells.culture)].filter(c => !pack.cultures[c] || pack.cultures[c].removed);
invalidCultures.forEach(c => {
const invalidCells = cells.i.filter(i => cells.culture[i] === c);
invalidCells.forEach(i => cells.province[i] = 0);
- console.error("Data Integrity Check. Invalid culture", c, "is assigned to cells", invalidCells);
+ ERROR && console.error("Data Integrity Check. Invalid culture", c, "is assigned to cells", invalidCells);
});
const invalidReligions = [...new Set(cells.religion)].filter(r => !pack.religions[r] || pack.religions[r].removed);
invalidReligions.forEach(r => {
const invalidCells = cells.i.filter(i => cells.religion[i] === r);
invalidCells.forEach(i => cells.religion[i] = 0);
- console.error("Data Integrity Check. Invalid religion", c, "is assigned to cells", invalidCells);
+ ERROR && console.error("Data Integrity Check. Invalid religion", c, "is assigned to cells", invalidCells);
});
const invalidFeatures = [...new Set(cells.f)].filter(f => f && !pack.features[f]);
invalidFeatures.forEach(f => {
const invalidCells = cells.i.filter(i => cells.f[i] === f);
// No fix as for now
- console.error("Data Integrity Check. Invalid feature", f, "is assigned to cells", invalidCells);
+ ERROR && console.error("Data Integrity Check. Invalid feature", f, "is assigned to cells", invalidCells);
});
const invalidBurgs = [...new Set(cells.burg)].filter(b => b && (!pack.burgs[b] || pack.burgs[b].removed));
invalidBurgs.forEach(b => {
const invalidCells = cells.i.filter(i => cells.burg[i] === b);
invalidCells.forEach(i => cells.burg[i] = 0);
- console.error("Data Integrity Check. Invalid burg", b, "is assigned to cells", invalidCells);
+ ERROR && console.error("Data Integrity Check. Invalid burg", b, "is assigned to cells", invalidCells);
});
pack.burgs.forEach(b => {
if (!b.i || b.removed) return;
- if (b.port < 0) {console.error("Data Integrity Check. Burg", b.i, "has invalid port value", b.port); b.port = 0;}
+ if (b.port < 0) {ERROR && console.error("Data Integrity Check. Burg", b.i, "has invalid port value", b.port); b.port = 0;}
if (b.cell < cells.i.length) return;
- console.error("Data Integrity Check. Burg", b.i, "is linked to invalid cell", b.cell);
+ ERROR && console.error("Data Integrity Check. Burg", b.i, "is linked to invalid cell", b.cell);
b.cell = findCell(b.x, b.y);
cells.i.filter(i => cells.burg[i] === b.i).forEach(i => cells.burg[i] = 0);
cells.burg[b.cell] = b.i;
@@ -1065,13 +1065,13 @@ function parseLoadedData(data) {
focusOn(); // based on searchParams focus on point, cell or burg
invokeActiveZooming();
- console.warn(`TOTAL: ${rn((performance.now()-uploadMap.timeStart)/1000,2)}s`);
+ WARN && console.warn(`TOTAL: ${rn((performance.now()-uploadMap.timeStart)/1000,2)}s`);
showStatistics();
- console.groupEnd("Loaded Map " + seed);
+ INFO && console.groupEnd("Loaded Map " + seed);
tip("Map is successfully loaded", true, "success", 7000);
}
catch(error) {
- console.error(error);
+ ERROR && console.error(error);
clearMainTip();
alertMessage.innerHTML = `An error is occured on map loading. Select a different file to load,
diff --git a/modules/ui/burg-editor.js b/modules/ui/burg-editor.js
index b129df881..0691fa3ef 100644
--- a/modules/ui/burg-editor.js
+++ b/modules/ui/burg-editor.js
@@ -141,7 +141,7 @@ function editBurg(id) {
const label = document.querySelector("#burgLabels [data-id='" + id + "']");
const icon = document.querySelector("#burgIcons [data-id='" + id + "']");
const anchor = document.querySelector("#anchors [data-id='" + id + "']");
- if (!label || !icon) {console.error("Cannot find label or icon elements"); return;}
+ if (!label || !icon) {ERROR && console.error("Cannot find label or icon elements"); return;}
const labelG = document.querySelector("#burgLabels > #"+oldGroup);
const iconG = document.querySelector("#burgIcons > #"+oldGroup);
diff --git a/modules/ui/editors.js b/modules/ui/editors.js
index fba985602..a67873ffc 100644
--- a/modules/ui/editors.js
+++ b/modules/ui/editors.js
@@ -141,7 +141,7 @@ function moveBurgToGroup(id, g) {
const label = document.querySelector("#burgLabels [data-id='" + id + "']");
const icon = document.querySelector("#burgIcons [data-id='" + id + "']");
const anchor = document.querySelector("#anchors [data-id='" + id + "']");
- if (!label || !icon) {console.error("Cannot find label or icon elements"); return;}
+ if (!label || !icon) {ERROR && console.error("Cannot find label or icon elements"); return;}
document.querySelector("#burgLabels > #"+g).appendChild(label);
document.querySelector("#burgIcons > #"+g).appendChild(icon);
@@ -639,7 +639,7 @@ function selectIcon(initial, callback) {
// Calls the refresh functionality on all editors currently open.
function refreshAllEditors() {
- console.time('refreshAllEditors');
+ TIME && console.time('refreshAllEditors');
if (document.getElementById('culturesEditorRefresh').offsetParent) culturesEditorRefresh.click();
if (document.getElementById('biomesEditorRefresh').offsetParent) biomesEditorRefresh.click();
if (document.getElementById('diplomacyEditorRefresh').offsetParent) diplomacyEditorRefresh.click();
@@ -647,5 +647,5 @@ function refreshAllEditors() {
if (document.getElementById('religionsEditorRefresh').offsetParent) religionsEditorRefresh.click();
if (document.getElementById('statesEditorRefresh').offsetParent) statesEditorRefresh.click();
if (document.getElementById('zonesEditorRefresh').offsetParent) zonesEditorRefresh.click();
- console.timeEnd('refreshAllEditors');
+ TIME && console.timeEnd('refreshAllEditors');
}
diff --git a/modules/ui/heightmap-editor.js b/modules/ui/heightmap-editor.js
index f574f84eb..66fba6568 100644
--- a/modules/ui/heightmap-editor.js
+++ b/modules/ui/heightmap-editor.js
@@ -164,8 +164,8 @@ function editHeightmap() {
}
function regenerateErasedData() {
- console.group("Edit Heightmap");
- console.time("regenerateErasedData");
+ INFO && console.group("Edit Heightmap");
+ TIME && console.time("regenerateErasedData");
const change = changeHeights.checked;
markFeatures();
@@ -204,8 +204,8 @@ function editHeightmap() {
Military.generate();
addMarkers();
addZones();
- console.timeEnd("regenerateErasedData");
- console.groupEnd("Edit Heightmap");
+ TIME && console.timeEnd("regenerateErasedData");
+ INFO && console.groupEnd("Edit Heightmap");
}
function restoreKeptData() {
@@ -216,8 +216,8 @@ function editHeightmap() {
}
function restoreRiskedData() {
- console.group("Edit Heightmap");
- console.time("restoreRiskedData");
+ INFO && console.group("Edit Heightmap");
+ TIME && console.time("restoreRiskedData");
// assign pack data to grid cells
const l = grid.cells.i.length;
@@ -401,8 +401,8 @@ function editHeightmap() {
.attr("points", d => getPackPolygon(d)).attr("id", d => base + d);
});
- console.timeEnd("restoreRiskedData");
- console.groupEnd("Edit Heightmap");
+ TIME && console.timeEnd("restoreRiskedData");
+ INFO && console.groupEnd("Edit Heightmap");
}
// trigger heightmap redraw and history update if at least 1 cell is changed
@@ -954,7 +954,7 @@ function editHeightmap() {
templateBody.innerHTML = "";
for (const s of steps) {
const step = s.split(" ");
- if (step.length !== 5) {console.error("Cannot parse step, wrong arguments count", s); continue;}
+ if (step.length !== 5) {ERROR && console.error("Cannot parse step, wrong arguments count", s); continue;}
addStep(step[0], step[1], step[2], step[3], step[4]);
}
diff --git a/modules/ui/layers.js b/modules/ui/layers.js
index b834c9d2a..4ab033650 100644
--- a/modules/ui/layers.js
+++ b/modules/ui/layers.js
@@ -131,7 +131,7 @@ function toggleHeight(event) {
}
function drawHeightmap() {
- console.time("drawHeightmap");
+ TIME && console.time("drawHeightmap");
terrs.selectAll("*").remove();
const cells = pack.cells, vertices = pack.vertices, n = cells.i.length;
const used = new Uint8Array(cells.i.length);
@@ -188,7 +188,7 @@ function drawHeightmap() {
if (v[0] !== prev && c0 !== c1) current = v[0];
else if (v[1] !== prev && c1 !== c2) current = v[1];
else if (v[2] !== prev && c0 !== c2) current = v[2];
- if (current === chain[chain.length - 1]) {console.error("Next vertex is not found"); break;}
+ if (current === chain[chain.length - 1]) {ERROR && console.error("Next vertex is not found"); break;}
}
return chain;
}
@@ -199,7 +199,7 @@ function drawHeightmap() {
return chain.filter((d, i) => i % n === 0);
}
- console.timeEnd("drawHeightmap");
+ TIME && console.timeEnd("drawHeightmap");
}
function getColorScheme() {
@@ -228,7 +228,7 @@ function toggleTemp(event) {
}
function drawTemp() {
- console.time("drawTemp");
+ TIME && console.time("drawTemp");
temperature.selectAll("*").remove();
lineGen.curve(d3.curveBasisClosed);
const scheme = d3.scaleSequential(d3.interpolateSpectral);
@@ -311,12 +311,12 @@ function drawTemp() {
if (v[0] !== prev && c0 !== c1) current = v[0];
else if (v[1] !== prev && c1 !== c2) current = v[1];
else if (v[2] !== prev && c0 !== c2) current = v[2];
- if (current === chain[chain.length - 1]) {console.error("Next vertex is not found"); break;}
+ if (current === chain[chain.length - 1]) {ERROR && console.error("Next vertex is not found"); break;}
}
chain.push(start);
return chain;
}
- console.timeEnd("drawTemp");
+ TIME && console.timeEnd("drawTemp");
}
function toggleBiomes(event) {
@@ -370,7 +370,7 @@ function drawBiomes() {
if (v[0] !== prev && c0 !== c1) current = v[0];
else if (v[1] !== prev && c1 !== c2) current = v[1];
else if (v[2] !== prev && c0 !== c2) current = v[2];
- if (current === chain[chain.length - 1]) {console.error("Next vertex is not found"); break;}
+ if (current === chain[chain.length - 1]) {ERROR && console.error("Next vertex is not found"); break;}
}
return chain;
}
@@ -526,7 +526,7 @@ function drawIce() {
if (v[0] !== prev && c0 !== c1) current = v[0];
else if (v[1] !== prev && c1 !== c2) current = v[1];
else if (v[2] !== prev && c0 !== c2) current = v[2];
- if (current === chain[chain.length - 1]) {console.error("Next vertex is not found"); break;}
+ if (current === chain[chain.length - 1]) {ERROR && console.error("Next vertex is not found"); break;}
}
return chain;
}
@@ -547,7 +547,7 @@ function toggleCultures(event) {
}
function drawCultures() {
- console.time("drawCultures");
+ TIME && console.time("drawCultures");
cults.selectAll("path").remove();
const cells = pack.cells, vertices = pack.vertices, cultures = pack.cultures, n = cells.i.length;
@@ -586,11 +586,11 @@ function drawCultures() {
if (v[0] !== prev && c0 !== c1) current = v[0];
else if (v[1] !== prev && c1 !== c2) current = v[1];
else if (v[2] !== prev && c0 !== c2) current = v[2];
- if (current === chain[chain.length - 1]) {console.error("Next vertex is not found"); break;}
+ if (current === chain[chain.length - 1]) {ERROR && console.error("Next vertex is not found"); break;}
}
return chain;
}
- console.timeEnd("drawCultures");
+ TIME && console.timeEnd("drawCultures");
}
function toggleReligions(event) {
@@ -607,7 +607,7 @@ function toggleReligions(event) {
}
function drawReligions() {
- console.time("drawReligions");
+ TIME && console.time("drawReligions");
relig.selectAll("path").remove();
const cells = pack.cells, vertices = pack.vertices, religions = pack.religions, features = pack.features, n = cells.i.length;
@@ -657,12 +657,12 @@ function drawReligions() {
if (v[0] !== prev && c0 !== c1) {current = v[0]; check(c0 ? c[0] : c[1]);} else
if (v[1] !== prev && c1 !== c2) {current = v[1]; check(c1 ? c[1] : c[2]);} else
if (v[2] !== prev && c0 !== c2) {current = v[2]; check(c2 ? c[2] : c[0]);}
- if (current === chain[chain.length - 1][0]) {console.error("Next vertex is not found"); break;}
+ if (current === chain[chain.length - 1][0]) {ERROR && console.error("Next vertex is not found"); break;}
}
return chain;
}
- console.timeEnd("drawReligions");
+ TIME && console.timeEnd("drawReligions");
}
function toggleStates(event) {
@@ -680,7 +680,7 @@ function toggleStates(event) {
// draw states
function drawStates() {
- console.time("drawStates");
+ TIME && console.time("drawStates");
regions.selectAll("path").remove();
const cells = pack.cells, vertices = pack.vertices, states = pack.states, n = cells.i.length;
@@ -741,18 +741,18 @@ function drawStates() {
if (v[0] !== prev && c0 !== c1) {current = v[0]; check(c0 ? c[0] : c[1]);} else
if (v[1] !== prev && c1 !== c2) {current = v[1]; check(c1 ? c[1] : c[2]);} else
if (v[2] !== prev && c0 !== c2) {current = v[2]; check(c2 ? c[2] : c[0]);}
- if (current === chain[chain.length - 1][0]) {console.error("Next vertex is not found"); break;}
+ if (current === chain[chain.length - 1][0]) {ERROR && console.error("Next vertex is not found"); break;}
}
chain.push([start, state, land]); // add starting vertex to sequence to close the path
return chain;
}
invokeActiveZooming();
- console.timeEnd("drawStates");
+ TIME && console.timeEnd("drawStates");
}
// draw state and province borders
function drawBorders() {
- console.time("drawBorders");
+ TIME && console.time("drawBorders");
borders.selectAll("path").remove();
const cells = pack.cells, vertices = pack.vertices, n = cells.i.length;
@@ -807,7 +807,7 @@ function drawBorders() {
// find starting vertex
for (let i=0; i < 1000; i++) {
- if (i === 999) console.error("Find starting vertex: limit is reached", current, f, t);
+ if (i === 999) ERROR && console.error("Find starting vertex: limit is reached", current, f, t);
const p = chain[chain.length-2] || -1; // previous vertex
const v = vertices.v[current], c = vertices.c[current];
@@ -825,7 +825,7 @@ function drawBorders() {
chain = [current]; // vertices chain to form a path
// find path
for (let i=0; i < 1000; i++) {
- if (i === 999) console.error("Find path: limit is reached", current, f, t);
+ if (i === 999) ERROR && console.error("Find path: limit is reached", current, f, t);
const p = chain[chain.length-2] || -1; // previous vertex
const v = vertices.v[current], c = vertices.c[current];
c.filter(c => array[c] === t).forEach(c => used[f][c] = t);
@@ -845,7 +845,7 @@ function drawBorders() {
return chain;
}
- console.timeEnd("drawBorders");
+ TIME && console.timeEnd("drawBorders");
}
function toggleBorders(event) {
@@ -873,7 +873,7 @@ function toggleProvinces(event) {
}
function drawProvinces() {
- console.time("drawProvinces");
+ TIME && console.time("drawProvinces");
const labelsOn = provs.attr("data-labels") == 1;
provs.selectAll("*").remove();
@@ -937,12 +937,12 @@ function drawProvinces() {
if (v[0] !== prev && c0 !== c1) {current = v[0]; check(c0 ? c[0] : c[1]);} else
if (v[1] !== prev && c1 !== c2) {current = v[1]; check(c1 ? c[1] : c[2]);} else
if (v[2] !== prev && c0 !== c2) {current = v[2]; check(c2 ? c[2] : c[0]);}
- if (current === chain[chain.length-1][0]) {console.error("Next vertex is not found"); break;}
+ if (current === chain[chain.length-1][0]) {ERROR && console.error("Next vertex is not found"); break;}
}
chain.push([start, province, land]); // add starting vertex to sequence to close the path
return chain;
}
- console.timeEnd("drawProvinces");
+ TIME && console.timeEnd("drawProvinces");
}
function toggleGrid(event) {
@@ -959,7 +959,7 @@ function toggleGrid(event) {
}
function drawGrid() {
- console.time("drawGrid");
+ TIME && console.time("drawGrid");
gridOverlay.selectAll("*").remove();
const type = styleGridType.value;
const size = Math.max(+styleGridSize.value, 2);
@@ -1003,7 +1003,7 @@ function drawGrid() {
});
}
- console.timeEnd("drawGrid");
+ TIME && console.timeEnd("drawGrid");
}
function toggleCoordinates(event) {
diff --git a/modules/ui/style.js b/modules/ui/style.js
index f715a8849..e02393a7a 100644
--- a/modules/ui/style.js
+++ b/modules/ui/style.js
@@ -653,7 +653,7 @@ function setBase64Texture(url) {
};
function fetchTextureURL(url) {
- console.log("Provided URL is", url);
+ INFO && console.log("Provided URL is", url);
const img = new Image();
img.onload = function () {
const canvas = document.getElementById("texturePreview");
diff --git a/modules/utils.js b/modules/utils.js
index 31cd30934..352c7b594 100644
--- a/modules/utils.js
+++ b/modules/utils.js
@@ -471,14 +471,14 @@ function lim(v) {
// get number from string in format "1-3" or "2" or "0.5"
function getNumberInRange(r) {
- if (typeof r !== "string") {console.error("The value should be a string", r); return 0;}
+ if (typeof r !== "string") {ERROR && console.error("The value should be a string", r); return 0;}
if (!isNaN(+r)) return ~~r + +P(r - ~~r);
const sign = r[0] === "-" ? -1 : 1;
if (isNaN(+r[0])) r = r.slice(1);
const range = r.includes("-") ? r.split("-") : null;
- if (!range) {console.error("Cannot parse the number. Check the format", r); return 0;}
+ if (!range) {ERROR && console.error("Cannot parse the number. Check the format", r); return 0;}
const count = rand(range[0] * sign, +range[1]);
- if (isNaN(count) || count < 0) {console.error("Cannot parse number. Check the format", r); return 0;}
+ if (isNaN(count) || count < 0) {ERROR && console.error("Cannot parse number. Check the format", r); return 0;}
return count;
}
@@ -603,7 +603,7 @@ void function() {
const form = prompt.querySelector("#promptForm");
window.prompt = function(promptText = "Please provide an input", options = {default:1, step:.01, min:0, max:100}, callback) {
- if (options.default === undefined) {console.error("Prompt: options object does not have default value defined"); return;}
+ if (options.default === undefined) {ERROR && console.error("Prompt: options object does not have default value defined"); return;}
const input = prompt.querySelector("#promptInput");
prompt.querySelector("#promptText").innerHTML = promptText;
const type = typeof(options.default) === "number" ? "number" : "text";
@@ -628,4 +628,4 @@ void function() {
}()
// indexedDB; ldb object
-!function(){function e(t,o){return n?void(n.transaction("s").objectStore("s").get(t).onsuccess=function(e){var t=e.target.result&&e.target.result.v||null;o(t)}):void setTimeout(function(){e(t,o)},100)}var t=window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB;if(!t)return void console.error("indexedDB not supported");var n,o={k:"",v:""},r=t.open("d2",1);r.onsuccess=function(e){n=this.result},r.onerror=function(e){console.error("indexedDB request error"),console.log(e)},r.onupgradeneeded=function(e){n=null;var t=e.target.result.createObjectStore("s",{keyPath:"k"});t.transaction.oncomplete=function(e){n=e.target.db}},window.ldb={get:e,set:function(e,t){o.k=e,o.v=t,n.transaction("s","readwrite").objectStore("s").put(o)}}}();
\ No newline at end of file
+!function(){function e(t,o){return n?void(n.transaction("s").objectStore("s").get(t).onsuccess=function(e){var t=e.target.result&&e.target.result.v||null;o(t)}):void setTimeout(function(){e(t,o)},100)}var t=window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB;if(!t)return void ERROR && console.error("indexedDB not supported");var n,o={k:"",v:""},r=t.open("d2",1);r.onsuccess=function(e){n=this.result},r.onerror=function(e){ERROR && console.error("indexedDB request error"),INFO && console.log(e)},r.onupgradeneeded=function(e){n=null;var t=e.target.result.createObjectStore("s",{keyPath:"k"});t.transaction.oncomplete=function(e){n=e.target.db}},window.ldb={get:e,set:function(e,t){o.k=e,o.v=t,n.transaction("s","readwrite").objectStore("s").put(o)}}}();
\ No newline at end of file