diff --git a/index.html b/index.html
index 96b9374e..3b2d7203 100644
--- a/index.html
+++ b/index.html
@@ -8022,7 +8022,6 @@
-
@@ -8053,14 +8052,14 @@
-
-
-
+
+
+
-
+
-
+
diff --git a/libs/priority-queue.min.js b/libs/priority-queue.min.js
deleted file mode 100644
index acf2506b..00000000
--- a/libs/priority-queue.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).PriorityQueue=t()}}(function(){return function t(e,i,r){function o(n,s){if(!i[n]){if(!e[n]){var h="function"==typeof require&&require;if(!s&&h)return h(n,!0);if(a)return a(n,!0);var u=new Error("Cannot find module '"+n+"'");throw u.code="MODULE_NOT_FOUND",u}var p=i[n]={exports:{}};e[n][0].call(p.exports,function(t){var i=e[n][1][t];return o(i||t)},p,p.exports,t,e,i,r)}return i[n].exports}for(var a="function"==typeof require&&require,n=0;n>>1],e)>=0?o=a+1:r=a;return o},e.exports=function(){function t(t){var e;this.options=t,this.comparator=this.options.comparator,this.data=(null!=(e=this.options.initialValues)?e.slice(0):void 0)||[],this.data.sort(this.comparator).reverse()}return t.prototype.queue=function(t){var e;e=r(this.data,t,this.comparator),this.data.splice(e,0,t)},t.prototype.dequeue=function(){return this.data.pop()},t.prototype.peek=function(){return this.data[this.data.length-1]},t.prototype.clear=function(){this.data.length=0},t}()},{}],4:[function(t,e,i){e.exports=function(){function t(t){var e,i,r,o,a,n,s,h;for(this.comparator=(null!=t?t.comparator:void 0)||function(t,e){return t-e},this.pageSize=(null!=t?t.pageSize:void 0)||512,this.length=0,s=0;1<a;0<=a?++i:--i)e.push(null);if(this._memory=[],this._mask=this.pageSize-1,t.initialValues)for(r=0,o=(n=t.initialValues).length;r0&&(this._write(1,e),this._bubbleDown(1,e)),t},t.prototype.peek=function(){return this._read(1)},t.prototype.clear=function(){this.length=0,this._memory.length=0},t.prototype._write=function(t,e){var i;for(i=t>>this._shift;i>=this._memory.length;)this._memory.push(this._emptyMemoryPageTemplate.slice(0));return this._memory[i][t&this._mask]=e},t.prototype._read=function(t){return this._memory[t>>this._shift][t&this._mask]},t.prototype._bubbleUp=function(t,e){var i,r,o,a;for(i=this.comparator;t>1&&(r=t&this._mask,t3?o=t&~this._mask|r>>1:r<2?(o=t-this.pageSize>>this._shift,o+=o&~(this._mask>>1),o|=this.pageSize>>1):o=t-2,!(i(a=this._read(o),e)<0));)this._write(o,e),this._write(t,a),t=o},t.prototype._bubbleDown=function(t,e){var i,r,o,a,n;for(n=this.comparator;tthis._mask&&!(t&this._mask-1)?i=r=t+2:t&this.pageSize>>1?(i=(t&~this._mask)>>1,r=(i=(i|=t&this._mask>>1)+1<0)for(t=e=1,i=this.data.length;1<=i?ei;t=1<=i?++e:--e)this._bubbleUp(t)},t.prototype.queue=function(t){this.data.push(t),this._bubbleUp(this.data.length-1)},t.prototype.dequeue=function(){var t,e;return e=this.data[0],t=this.data.pop(),this.data.length>0&&(this.data[0]=t,this._bubbleDown(0)),e},t.prototype.peek=function(){return this.data[0]},t.prototype.clear=function(){this.length=0,this.data.length=0},t.prototype._bubbleUp=function(t){for(var e,i;t>0&&(e=t-1>>>1,this.comparator(this.data[t],this.data[e])<0);)i=this.data[e],this.data[e]=this.data[t],this.data[t]=i,t=e},t.prototype._bubbleDown=function(t){var e,i,r,o,a;for(e=this.data.length-1;o=(i=1+(t<<1))+1,r=t,i<=e&&this.comparator(this.data[i],this.data[r])<0&&(r=i),o<=e&&this.comparator(this.data[o],this.data[r])<0&&(r=o),r!==t;)a=this.data[r],this.data[r]=this.data[t],this.data[t]=a,t=r},t}()},{}]},{},[1])(1)});
\ No newline at end of file
diff --git a/modules/burgs-and-states.js b/modules/burgs-and-states.js
index 90ab2bf2..4b73276b 100644
--- a/modules/burgs-and-states.js
+++ b/modules/burgs-and-states.js
@@ -286,7 +286,8 @@ window.BurgsAndStates = (() => {
const {cells, states, cultures, burgs} = pack;
cells.state = cells.state || new Uint16Array(cells.i.length);
- const queue = new PriorityQueue({comparator: (a, b) => a.p - b.p});
+
+ const queue = new FlatQueue();
const cost = [];
const globalGrowthRate = byId("growthRate").valueAsNumber || 1;
@@ -307,12 +308,13 @@ window.BurgsAndStates = (() => {
cells.state[capitalCell] = state.i;
const cultureCenter = cultures[state.culture].center;
const b = cells.biome[cultureCenter]; // state native biome
- queue.queue({e: state.center, p: 0, s: state.i, b});
+ queue.push({e: state.center, p: 0, s: state.i, b}, 0);
cost[state.center] = 1;
}
while (queue.length) {
- const next = queue.dequeue();
+ const next = queue.pop();
+
const {e, p, s, b} = next;
const {type, culture} = states[s];
@@ -335,7 +337,7 @@ window.BurgsAndStates = (() => {
if (!cost[e] || totalCost < cost[e]) {
if (cells.h[e] >= 20) cells.state[e] = s; // assign state to cell
cost[e] = totalCost;
- queue.queue({e, p: totalCost, s, b});
+ queue.push({e, p: totalCost, s, b}, totalCost);
}
});
}
diff --git a/modules/cultures-generator.js b/modules/cultures-generator.js
index f2203146..34dc5edd 100644
--- a/modules/cultures-generator.js
+++ b/modules/cultures-generator.js
@@ -518,7 +518,7 @@ window.Cultures = (function () {
TIME && console.time("expandCultures");
const {cells, cultures} = pack;
- const queue = new PriorityQueue({comparator: (a, b) => a.priority - b.priority});
+ const queue = new FlatQueue();
const cost = [];
const neutralRate = byId("neutralRate")?.valueAsNumber || 1;
@@ -538,11 +538,11 @@ window.Cultures = (function () {
for (const culture of cultures) {
if (!culture.i || culture.removed || culture.lock) continue;
- queue.queue({cellId: culture.center, cultureId: culture.i, priority: 0});
+ queue.push({cellId: culture.center, cultureId: culture.i, priority: 0}, 0);
}
while (queue.length) {
- const {cellId, priority, cultureId} = queue.dequeue();
+ const {cellId, priority, cultureId} = queue.pop();
const {type, expansionism} = cultures[cultureId];
cells.c[cellId].forEach(neibCellId => {
@@ -566,7 +566,7 @@ window.Cultures = (function () {
if (!cost[neibCellId] || totalCost < cost[neibCellId]) {
if (cells.pop[neibCellId] > 0) cells.culture[neibCellId] = cultureId; // assign culture to populated cell
cost[neibCellId] = totalCost;
- queue.queue({cellId: neibCellId, cultureId, priority: totalCost});
+ queue.push({cellId: neibCellId, cultureId, priority: totalCost}, totalCost);
}
});
}
diff --git a/modules/provinces-generator.js b/modules/provinces-generator.js
index 8563f682..c0f8e8f7 100644
--- a/modules/provinces-generator.js
+++ b/modules/provinces-generator.js
@@ -77,18 +77,18 @@ window.Provinces = (function () {
});
// expand generated provinces
- const queue = new PriorityQueue({comparator: (a, b) => a.p - b.p});
+ const queue = new FlatQueue();
const cost = [];
provinces.forEach(p => {
if (!p.i || p.removed || isProvinceLocked(p)) return;
provinceIds[p.center] = p.i;
- queue.queue({e: p.center, p: 0, province: p.i, state: p.state});
+ queue.push({e: p.center, province: p.i, state: p.state, p: 0}, 0);
cost[p.center] = 1;
});
while (queue.length) {
- const {e, p, province, state} = queue.dequeue();
+ const {e, p, province, state} = queue.pop();
cells.c[e].forEach(e => {
if (isProvinceCellLocked(e)) return; // do not overwrite cell of locked provinces
@@ -103,7 +103,7 @@ window.Provinces = (function () {
if (!cost[e] || totalCost < cost[e]) {
if (land) provinceIds[e] = province; // assign province to a cell
cost[e] = totalCost;
- queue.queue({e, p: totalCost, province, state});
+ queue.push({e, province, state, p: totalCost}, totalCost);
}
});
}
@@ -158,9 +158,9 @@ window.Provinces = (function () {
// expand province
const cost = [];
cost[center] = 1;
- queue.queue({e: center, p: 0});
+ queue.push({e: center, p: 0}, 0);
while (queue.length) {
- const {e, p} = queue.dequeue();
+ const {e, p} = queue.pop();
cells.c[e].forEach(nextCellId => {
if (provinceIds[nextCellId]) return;
@@ -173,7 +173,7 @@ window.Provinces = (function () {
if (!cost[nextCellId] || totalCost < cost[nextCellId]) {
if (land && cells.state[nextCellId] === s.i) provinceIds[nextCellId] = provinceId; // assign province to a cell
cost[nextCellId] = totalCost;
- queue.queue({e: nextCellId, p: totalCost});
+ queue.push({e: nextCellId, p: totalCost}, totalCost);
}
});
}
@@ -216,15 +216,15 @@ window.Provinces = (function () {
// check if there is a land way within the same state between two cells
function isPassable(from, to) {
if (cells.f[from] !== cells.f[to]) return false; // on different islands
- const queue = [from],
+ const passableQueue = [from],
used = new Uint8Array(cells.i.length),
state = cells.state[from];
- while (queue.length) {
- const current = queue.pop();
+ while (passableQueue.length) {
+ const current = passableQueue.pop();
if (current === to) return true; // way is found
cells.c[current].forEach(c => {
if (used[c] || cells.h[c] < 20 || cells.state[c] !== state) return;
- queue.push(c);
+ passableQueue.push(c);
used[c] = 1;
});
}
diff --git a/modules/religions-generator.js b/modules/religions-generator.js
index 5e5e08f6..2bb972db 100644
--- a/modules/religions-generator.js
+++ b/modules/religions-generator.js
@@ -695,7 +695,7 @@ window.Religions = (function () {
const {cells, routes} = pack;
const religionIds = spreadFolkReligions(religions);
- const queue = new PriorityQueue({comparator: (a, b) => a.p - b.p});
+ const queue = new FlatQueue();
const cost = [];
// limit cost for organized religions growth
@@ -705,14 +705,14 @@ window.Religions = (function () {
.filter(r => r.i && !r.lock && r.type !== "Folk" && !r.removed)
.forEach(r => {
religionIds[r.center] = r.i;
- queue.queue({e: r.center, p: 0, r: r.i, s: cells.state[r.center]});
+ queue.push({e: r.center, p: 0, r: r.i, s: cells.state[r.center]}, 0);
cost[r.center] = 1;
});
const religionsMap = new Map(religions.map(r => [r.i, r]));
while (queue.length) {
- const {e: cellId, p, r, s: state} = queue.dequeue();
+ const {e: cellId, p, r, s: state} = queue.pop();
const {culture, expansion, expansionism} = religionsMap.get(r);
cells.c[cellId].forEach(nextCell => {
@@ -732,7 +732,7 @@ window.Religions = (function () {
if (cells.culture[nextCell]) religionIds[nextCell] = r; // assign religion to cell
cost[nextCell] = totalCost;
- queue.queue({e: nextCell, p: totalCost, r, s: state});
+ queue.push({e: nextCell, p: totalCost, r, s: state}, totalCost);
}
});
}
diff --git a/modules/zones-generator.js b/modules/zones-generator.js
index 7e8ec94b..0fdab688 100644
--- a/modules/zones-generator.js
+++ b/modules/zones-generator.js
@@ -209,11 +209,11 @@ window.Zones = (function () {
const cost = [];
const maxCells = rand(20, 40);
- const queue = new PriorityQueue({comparator: (a, b) => a.p - b.p});
- queue.queue({e: burg.cell, p: 0});
+ const queue = new FlatQueue();
+ queue.push({e: burg.cell, p: 0}, 0);
while (queue.length) {
- const next = queue.dequeue();
+ const next = queue.pop();
if (cells.burg[next.e] || cells.pop[next.e]) cellsArray.push(next.e);
usedCells[next.e] = 1;
@@ -224,7 +224,7 @@ window.Zones = (function () {
if (!cost[nextCellId] || p < cost[nextCellId]) {
cost[nextCellId] = p;
- queue.queue({e: nextCellId, p});
+ queue.push({e: nextCellId, p}, p);
}
});
}
@@ -251,11 +251,11 @@ window.Zones = (function () {
const cost = [];
const maxCells = rand(5, 25);
- const queue = new PriorityQueue({comparator: (a, b) => a.p - b.p});
- queue.queue({e: burg.cell, p: 0});
+ const queue = new FlatQueue();
+ queue.push({e: burg.cell, p: 0}, 0);
while (queue.length) {
- const next = queue.dequeue();
+ const next = queue.pop();
if (cells.burg[next.e] || cells.pop[next.e]) cellsArray.push(next.e);
usedCells[next.e] = 1;
@@ -266,7 +266,7 @@ window.Zones = (function () {
if (!cost[e] || p < cost[e]) {
cost[e] = p;
- queue.queue({e, p});
+ queue.push({e, p}), p;
}
});
}
diff --git a/versioning.js b/versioning.js
index fcd5504b..c5bf2fa4 100644
--- a/versioning.js
+++ b/versioning.js
@@ -12,7 +12,8 @@
*
* Example: 1.102.2 -> Major version 1, Minor version 102, Patch version 2
*/
-const VERSION = "1.105.20";
+
+const VERSION = "1.105.21";
if (parseMapVersion(VERSION) !== VERSION) alert("versioning.js: Invalid format or parsing function");
{