regenerate resources

This commit is contained in:
Azgaar 2021-05-05 22:37:06 +03:00
parent 44b75f9cff
commit ec7cbb74cf
6 changed files with 24 additions and 14 deletions

View file

@ -1326,6 +1326,7 @@
<button id="regenerateStates" data-tip="Click to select new capitals and regenerate states. Emblems and military forces will be regenerated as well, burgs will remain as they are">States</button> <button id="regenerateStates" data-tip="Click to select new capitals and regenerate states. Emblems and military forces will be regenerated as well, burgs will remain as they are">States</button>
<button id="regenerateProvinces" data-tip="Click to regenerate provinces. States will remain as they are">Provinces</button> <button id="regenerateProvinces" data-tip="Click to regenerate provinces. States will remain as they are">Provinces</button>
<button id="regenerateBurgs" data-tip="Click to regenerate all unlocked burgs and routes. States will remain as they are">Burgs</button> <button id="regenerateBurgs" data-tip="Click to regenerate all unlocked burgs and routes. States will remain as they are">Burgs</button>
<button id="regenerateResources" data-tip="Click to regenerate resources">Resources</button>
<button id="regenerateEmblems" data-tip="Click to regenerate all emblems">Emblems</button> <button id="regenerateEmblems" data-tip="Click to regenerate all emblems">Emblems</button>
<button id="regenerateReligions" data-tip="Click to regenerate religions">Religions</button> <button id="regenerateReligions" data-tip="Click to regenerate religions">Religions</button>
<button id="regenerateCultures" data-tip="Click to regenerate cultures">Cultures</button> <button id="regenerateCultures" data-tip="Click to regenerate cultures">Cultures</button>
@ -3018,6 +3019,7 @@
<div id="resourcesBottom"> <div id="resourcesBottom">
<button id="resourcesEditorRefresh" data-tip="Refresh the Editor" class="icon-cw"></button> <button id="resourcesEditorRefresh" data-tip="Refresh the Editor" class="icon-cw"></button>
<button id="resourcesRegenerate" data-tip="Regenerate resources based on current configuration" class="icon-retweet"></button>
<button id="resourcesLegend" data-tip="Toggle Legend box" class="icon-list-bullet"></button> <button id="resourcesLegend" data-tip="Toggle Legend box" class="icon-list-bullet"></button>
<button id="resourcesPercentage" data-tip="Toggle percentage / absolute values display mode" class="icon-percent"></button> <button id="resourcesPercentage" data-tip="Toggle percentage / absolute values display mode" class="icon-percent"></button>
<button id="resourcesAdd" data-tip="Add a new resource" class="icon-plus"></button> <button id="resourcesAdd" data-tip="Add a new resource" class="icon-plus"></button>

View file

@ -102,9 +102,9 @@
cells = pack.cells; cells = pack.cells;
cells.resource = new Uint8Array(cells.i.length); // resources array [0, 255] cells.resource = new Uint8Array(cells.i.length); // resources array [0, 255]
const resourceMaxCells = Math.ceil(200 * cells.i.length / 5000); const resourceMaxCells = Math.ceil(200 * cells.i.length / 5000);
pack.resources = getDefault(); if (!pack.resources) pack.resources = getDefault();
pack.resources.forEach(r => r.cells = 0); pack.resources.forEach(r => r.cells = 0);
const skipGlaciers = biomesData.habitability[11] === 0; const skipGlaciers = biomesData.habitability[11] === 0;
const shuffledCells = d3.shuffle(cells.i.slice()); const shuffledCells = d3.shuffle(cells.i.slice());
for (const i of shuffledCells) { for (const i of shuffledCells) {
@ -125,7 +125,6 @@
pack.resources.sort((a, b) => a.i > b.i ? 1 : -1); pack.resources.sort((a, b) => a.i > b.i ? 1 : -1);
console.timeEnd("generateResources"); console.timeEnd("generateResources");
console.table(pack.resources);
} }
const getStroke = color => d3.color(color).darker(2).hex(); const getStroke = color => d3.color(color).darker(2).hex();

View file

@ -659,9 +659,8 @@ function selectIcon(initial, callback) {
}); });
} }
// Calls the refresh functionality on all editors currently open. // Calls the refresh for all currently open editors
function refreshAllEditors() { function refreshAllEditors() {
TIME && console.time('refreshAllEditors');
if (document.getElementById('culturesEditorRefresh').offsetParent) culturesEditorRefresh.click(); if (document.getElementById('culturesEditorRefresh').offsetParent) culturesEditorRefresh.click();
if (document.getElementById('biomesEditorRefresh').offsetParent) biomesEditorRefresh.click(); if (document.getElementById('biomesEditorRefresh').offsetParent) biomesEditorRefresh.click();
if (document.getElementById('diplomacyEditorRefresh').offsetParent) diplomacyEditorRefresh.click(); if (document.getElementById('diplomacyEditorRefresh').offsetParent) diplomacyEditorRefresh.click();
@ -669,5 +668,5 @@ function refreshAllEditors() {
if (document.getElementById('religionsEditorRefresh').offsetParent) religionsEditorRefresh.click(); if (document.getElementById('religionsEditorRefresh').offsetParent) religionsEditorRefresh.click();
if (document.getElementById('statesEditorRefresh').offsetParent) statesEditorRefresh.click(); if (document.getElementById('statesEditorRefresh').offsetParent) statesEditorRefresh.click();
if (document.getElementById('zonesEditorRefresh').offsetParent) zonesEditorRefresh.click(); if (document.getElementById('zonesEditorRefresh').offsetParent) zonesEditorRefresh.click();
TIME && console.timeEnd('refreshAllEditors'); if (document.getElementById('resourcesEditorRefresh').offsetParent) resourcesEditorRefresh.click();
} }

View file

@ -1315,12 +1315,11 @@ function drawEmblems() {
function toggleResources(event) { function toggleResources(event) {
if (!layerIsOn("toggleResources")) { if (!layerIsOn("toggleResources")) {
turnButtonOn("toggleResources"); turnButtonOn("toggleResources");
$('#goods').fadeIn(); drawResources();
if (!goods.selectAll("*").size()) drawResources();
if (event && isCtrlClick(event)) editStyle("goods"); if (event && isCtrlClick(event)) editStyle("goods");
} else { } else {
if (event && isCtrlClick(event)) {editStyle("goods"); return;} if (event && isCtrlClick(event)) {editStyle("goods"); return;}
$('#goods').fadeOut(); goods.selectAll("*").remove();
turnButtonOff("toggleResources"); turnButtonOff("toggleResources");
} }
} }

View file

@ -17,6 +17,7 @@ function editResources() {
// add listeners // add listeners
document.getElementById("resourcesEditorRefresh").addEventListener("click", resourcesEditorAddLines); document.getElementById("resourcesEditorRefresh").addEventListener("click", resourcesEditorAddLines);
document.getElementById("resourcesRegenerate").addEventListener("click", regenerateResources);
document.getElementById("resourcesLegend").addEventListener("click", toggleLegend); document.getElementById("resourcesLegend").addEventListener("click", toggleLegend);
document.getElementById("resourcesPercentage").addEventListener("click", togglePercentageMode); document.getElementById("resourcesPercentage").addEventListener("click", togglePercentageMode);
document.getElementById("resourcesExport").addEventListener("click", downloadResourcesData); document.getElementById("resourcesExport").addEventListener("click", downloadResourcesData);
@ -24,6 +25,11 @@ function editResources() {
// add line for each resource // add line for each resource
function resourcesEditorAddLines() { function resourcesEditorAddLines() {
let lines = ""; let lines = "";
const categories = [...new Set(pack.resources.map(r => r.category))].sort();
const categoryOptions = category => categories.map(c => `<option ${c === category ? "selected" : ""} value="${c}">${c}</option>`).join("");
const models = [...new Set(pack.resources.map(r => r.model))].sort();
const modelOptions = model => models.map(m => `<option ${m === model ? "selected" : ""} value="${m}">${m}</option>`).join("");
// // {i: 33, name: "Saltpeter", icon: "resource-saltpeter", color: "#e6e3e3", value: 8, chance: 2, model: "habitability", bonus: {artillery: 3}} // // {i: 33, name: "Saltpeter", icon: "resource-saltpeter", color: "#e6e3e3", value: 8, chance: 2, model: "habitability", bonus: {artillery: 3}}
for (const r of pack.resources) { for (const r of pack.resources) {
@ -36,8 +42,8 @@ function editResources() {
<use href="#${r.icon}" x="10%" y="10%" width="80%" height="80%"/> <use href="#${r.icon}" x="10%" y="10%" width="80%" height="80%"/>
</svg> </svg>
<input data-tip="Resource name. Click and category to change" class="resourceName" value="${r.name}" autocorrect="off" spellcheck="false"> <input data-tip="Resource name. Click and category to change" class="resourceName" value="${r.name}" autocorrect="off" spellcheck="false">
<select data-tip="Resource category. Select to change"><option selected>No data</option></select> <select data-tip="Resource category. Select to change">${categoryOptions(r.category)}</select>
<input data-tip="Resource spread model. Select to change" value="${r.model}" class="model"/> <select data-tip="Resource spread model. Select to change" class="model">${modelOptions(r.model)}</select>
<input data-tip="Resource basic value. Click and type to change" value="${r.value}" type="number" min=0 max=100 step=1 /> <input data-tip="Resource basic value. Click and type to change" value="${r.value}" type="number" min=0 max=100 step=1 />
<input data-tip="Resource generation chance in eligible cell. Click and type to change" value="${r.chance}" type="number" min=0 max=100 step=.1 /> <input data-tip="Resource generation chance in eligible cell. Click and type to change" value="${r.chance}" type="number" min=0 max=100 step=.1 />

View file

@ -65,6 +65,7 @@ function processFeatureRegeneration(event, button) {
if (button === "regenerateStates") regenerateStates(); else if (button === "regenerateStates") regenerateStates(); else
if (button === "regenerateProvinces") regenerateProvinces(); else if (button === "regenerateProvinces") regenerateProvinces(); else
if (button === "regenerateBurgs") regenerateBurgs(); else if (button === "regenerateBurgs") regenerateBurgs(); else
if (button === "regenerateResources") regenerateResources(); else
if (button === "regenerateEmblems") regenerateEmblems(); else if (button === "regenerateEmblems") regenerateEmblems(); else
if (button === "regenerateReligions") regenerateReligions(); else if (button === "regenerateReligions") regenerateReligions(); else
if (button === "regenerateCultures") regenerateCultures(); else if (button === "regenerateCultures") regenerateCultures(); else
@ -238,8 +239,6 @@ function regenerateBurgs() {
const burgsCount = manorsInput.value == 1000 ? rn(sorted.length / 5 / (grid.points.length / 10000) ** .8) + states.length : +manorsInput.value + states.length; const burgsCount = manorsInput.value == 1000 ? rn(sorted.length / 5 / (grid.points.length / 10000) ** .8) + states.length : +manorsInput.value + states.length;
const spacing = (graphWidth + graphHeight) / 150 / (burgsCount ** .7 / 66); // base min distance between towns const spacing = (graphWidth + graphHeight) / 150 / (burgsCount ** .7 / 66); // base min distance between towns
//clear locked list since ids will change
//burglock.selectAll("text").remove();
for (let j=0; j < Lockedburgs.length; j++) { for (let j=0; j < Lockedburgs.length; j++) {
const id = burgs.length; const id = burgs.length;
const oldBurg = Lockedburgs[j]; const oldBurg = Lockedburgs[j];
@ -248,7 +247,6 @@ function regenerateBurgs() {
burgsTree.add([oldBurg.x, oldBurg.y]); burgsTree.add([oldBurg.x, oldBurg.y]);
cells.burg[oldBurg.cell] = id; cells.burg[oldBurg.cell] = id;
if (oldBurg.capital) {states[oldBurg.state].capital = id; states[oldBurg.state].center = oldBurg.cell;} if (oldBurg.capital) {states[oldBurg.state].capital = id; states[oldBurg.state].center = oldBurg.cell;}
//burglock.append("text").attr("data-id", id);
} }
for (let i=0; i < sorted.length && burgs.length < burgsCount; i++) { for (let i=0; i < sorted.length && burgs.length < burgsCount; i++) {
@ -295,6 +293,13 @@ function regenerateBurgs() {
if (document.getElementById("statesEditorRefresh").offsetParent) statesEditorRefresh.click(); if (document.getElementById("statesEditorRefresh").offsetParent) statesEditorRefresh.click();
} }
function regenerateResources() {
Resources.generate();
goods.selectAll("*").remove();
if (layerIsOn("toggleResources")) drawResources();
refreshAllEditors();
}
function regenerateEmblems() { function regenerateEmblems() {
// remove old emblems // remove old emblems
document.querySelectorAll("[id^=stateCOA]").forEach(el => el.remove()); document.querySelectorAll("[id^=stateCOA]").forEach(el => el.remove());