resources ("goods") layers

This commit is contained in:
Azgaar 2021-05-04 01:16:39 +03:00
parent dd3581956d
commit 830ef826ee
6 changed files with 54 additions and 33 deletions

View file

@ -6,8 +6,10 @@
// TO-DO
// apply logic on heightmap edit
// apply logic on burgs regenearation
// apply logic on burgs regeneration
// apply logic on population recalculation
// apply logic on save
// apply logic on load
let cells;
@ -57,15 +59,6 @@
]
}
const chance = v => {
if (v < .01) return false;
if (v > 99.99) return true;
return v / 100 > Math.random();
}
const temp = i => grid.cells.temp[pack.cells.g[i]];
const group = i => pack.features[cells.f[i]].group;
const models = {
forest: i => [6, 7, 8].includes(cells.biome[i]),
forestAndTaiga: i => [5, 6, 7, 8, 9].includes(cells.biome[i]),
@ -95,9 +88,14 @@
colderWaters: i => cells.t[i] < 0 && temp(i) < 8,
}
// Biomes: 0: Marine, 1: Hot desert, 2: Cold desert, 3: Savanna, 4: Grassland,
// 5: Tropical seasonal forest, 6: Temperate deciduous forest, 7: Tropical rainforest,
// 8: Temperate rainforest, 9: Taiga, 10: Tundra, 11: Glacier, 12: Wetland
const chance = v => {
if (v < .01) return false;
if (v > 99.99) return true;
return v / 100 > Math.random();
}
const temp = i => grid.cells.temp[pack.cells.g[i]];
const group = i => pack.features[cells.f[i]].group;
const generate = function() {
console.time("generateResources");
@ -133,23 +131,6 @@
console.table(pack.resources);
}
const draw = function() {
console.time("drawResources");
let resourcesHTML = "";
for (const i of cells.i) {
if (!cells.resource[i]) continue;
const resource = pack.resources.find(resource => resource.i === cells.resource[i]);
const [x, y] = cells.p[i];
resourcesHTML += `<g>
<circle data-i="${resource.i}" cx=${x} cy=${y} r="3" fill="${resource.color}" stroke="${resource.stroke}" />
<use href="#${resource.icon}" x="${x-3}" y="${y-3}" width="6" height="6"/>
</g>`;
}
goods.html(resourcesHTML);
console.timeEnd("drawResources");
}
return {generate, getDefault, draw};
return {generate, getDefault};
})));

View file

@ -739,6 +739,7 @@ function parseLoadedData(data) {
coastline = viewbox.select("#coastline");
prec = viewbox.select("#prec");
population = viewbox.select("#population");
goods = viewbox.select("#goods");
emblems = viewbox.select("#emblems");
labels = viewbox.select("#labels");
icons = viewbox.select("#icons");
@ -830,6 +831,7 @@ function parseLoadedData(data) {
if (hasChild(population, "line")) turnOn("togglePopulation");
if (hasChildren(ice)) turnOn("toggleIce");
if (hasChild(prec, "circle")) turnOn("togglePrec");
if (hasChildren(goods)) turnOn("toggleResources");
if (notHidden(emblems) && hasChild(emblems, "use")) turnOn("toggleEmblems");
if (notHidden(labels)) turnOn("toggleLabels");
if (notHidden(icons)) turnOn("toggleIcons");
@ -1202,6 +1204,11 @@ function parseLoadedData(data) {
gridOverlay.attr("size", null);
}
if (version < 1.7) {
// v 1.7 added resources layer
goods = viewbox.append("g").attr("id", "goods");
}
void function checkDataIntegrity() {
const cells = pack.cells;

View file

@ -531,6 +531,7 @@ document.addEventListener("keyup", event => {
else if (key === 78) togglePopulation(); // "N" to toggle Population layer
else if (key === 74) toggleIce(); // "J" to toggle Ice layer
else if (key === 65) togglePrec(); // "A" to toggle Precipitation layer
else if (key === 81) toggleResources(); // "Q" to toggle Resources layer
else if (key === 89) toggleEmblems(); // "Y" to toggle Emblems layer
else if (key === 76) toggleLabels(); // "L" to toggle Labels layer
else if (key === 73) toggleIcons(); // "I" to toggle Icons layer

View file

@ -14,6 +14,7 @@ function getDefaultPresets() {
"heightmap": ["toggleHeight", "toggleRivers"],
"physical": ["toggleCoordinates", "toggleHeight", "toggleIce", "toggleRivers", "toggleScaleBar"],
"poi": ["toggleBorders", "toggleHeight", "toggleIce", "toggleIcons", "toggleMarkers", "toggleRivers", "toggleRoutes", "toggleScaleBar"],
"economical": ["toggleResources", "toggleBiomes", "toggleBorders", "toggleIcons", "toggleIce", "toggleLabels", "toggleRivers", "toggleRoutes", "toggleScaleBar"],
"military": ["toggleBorders", "toggleIcons", "toggleLabels", "toggleMilitary", "toggleRivers", "toggleRoutes", "toggleScaleBar", "toggleStates"],
"emblems": ["toggleBorders", "toggleIcons", "toggleIce", "toggleEmblems", "toggleRivers", "toggleRoutes", "toggleScaleBar", "toggleStates"],
"landmass": ["toggleScaleBar"]
@ -1311,6 +1312,35 @@ function drawEmblems() {
TIME && console.timeEnd("drawEmblems");
}
function toggleResources(event) {
if (!layerIsOn("toggleResources")) {
turnButtonOn("toggleResources");
$('#goods').fadeIn();
if (!goods.selectAll("*").size()) drawResources();
if (event && isCtrlClick(event)) editStyle("goods");
} else {
if (event && isCtrlClick(event)) {editStyle("goods"); return;}
$('#goods').fadeOut();
turnButtonOff("toggleResources");
}
}
function drawResources() {
console.time("drawResources");
let resourcesHTML = "";
for (const i of pack.cells.i) {
if (!pack.cells.resource[i]) continue;
const resource = pack.resources.find(resource => resource.i === pack.cells.resource[i]);
const [x, y] = pack.cells.p[i];
resourcesHTML += `<g>
<circle data-i="${resource.i}" cx=${x} cy=${y} r="3" fill="${resource.color}" stroke="${resource.stroke}" />
<use href="#${resource.icon}" x="${x-3}" y="${y-3}" width="6" height="6"/>
</g>`;
}
goods.html(resourcesHTML);
console.timeEnd("drawResources");
}
function layerIsOn(el) {
const buttonoff = document.getElementById(el).classList.contains("buttonoff");
return !buttonoff;
@ -1356,6 +1386,7 @@ function getLayer(id) {
if (id === "togglePopulation") return $("#population");
if (id === "toggleIce") return $("#ice");
if (id === "toggleTexture") return $("#texture");
if (id === "toggleResources") return $("#goods");
if (id === "toggleEmblems") return $("#emblems");
if (id === "toggleLabels") return $("#labels");
if (id === "toggleIcons") return $("#icons");