mirror of
https://github.com/Azgaar/Fantasy-Map-Generator.git
synced 2025-12-17 09:41:24 +01:00
v1.5.66 - resize individual Emblem enstead of hide
This commit is contained in:
parent
9a20a3e4c6
commit
a5395fca78
3 changed files with 41 additions and 29 deletions
|
|
@ -2862,9 +2862,10 @@
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div data-tip="Show or hide this particular emblem on map. To hide the entire category go to Menu ⭢ Style ⭢ Emblems">
|
<div data-tip="Set size of particular Emblem. To hide set to 0. To change the entire category go to Menu ⭢ Style ⭢ Emblems">
|
||||||
<input id="emblemShow" class="checkbox" type="checkbox">
|
<div class="label" style="width: 2.8em">Size:</div>
|
||||||
<label for="emblemShow" class="checkbox-label">Show emblem on map</label>
|
<input id="emblemSizeSlider" type="range" min=0 max=5 step=.1 style="width: 8em"/>
|
||||||
|
<input id="emblemSizeNumber" type="number" min=0 max=5 step=.1 />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="emblemsBottom">
|
<div id="emblemsBottom">
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,8 @@ function editEmblem(type, id, el) {
|
||||||
emblemProvinces.oninput = selectProvince;
|
emblemProvinces.oninput = selectProvince;
|
||||||
emblemBurgs.oninput = selectBurg;
|
emblemBurgs.oninput = selectBurg;
|
||||||
emblemShapeSelector.oninput = changeShape;
|
emblemShapeSelector.oninput = changeShape;
|
||||||
document.getElementById("emblemShow").onchange = toggleEmblem;
|
document.getElementById("emblemSizeSlider").oninput = changeSize;
|
||||||
|
document.getElementById("emblemSizeNumber").oninput = changeSize;
|
||||||
document.getElementById("emblemsRegenerate").onclick = regenerate;
|
document.getElementById("emblemsRegenerate").onclick = regenerate;
|
||||||
document.getElementById("emblemsArmoria").onclick = openInArmoria;
|
document.getElementById("emblemsArmoria").onclick = openInArmoria;
|
||||||
document.getElementById("emblemsUpload").onclick = toggleUpload;
|
document.getElementById("emblemsUpload").onclick = toggleUpload;
|
||||||
|
|
@ -105,7 +106,9 @@ function editEmblem(type, id, el) {
|
||||||
emblemShapeSelector.value = el.coa.shield;
|
emblemShapeSelector.value = el.coa.shield;
|
||||||
}
|
}
|
||||||
|
|
||||||
document.getElementById("emblemShow").checked = !el.coaHidden;
|
const size = el.coaSize || 1;
|
||||||
|
document.getElementById("emblemSizeSlider").value = size;
|
||||||
|
document.getElementById("emblemSizeNumber").value = size;
|
||||||
}
|
}
|
||||||
|
|
||||||
function selectState() {
|
function selectState() {
|
||||||
|
|
@ -162,22 +165,24 @@ function editEmblem(type, id, el) {
|
||||||
highlightEmblemElement(type, el);
|
highlightEmblemElement(type, el);
|
||||||
}
|
}
|
||||||
|
|
||||||
function toggleEmblem() {
|
function changeSize() {
|
||||||
el.coaHidden = !el.coaHidden;
|
const size = el.coaSize = +this.value;
|
||||||
|
document.getElementById("emblemSizeSlider").value = size;
|
||||||
|
document.getElementById("emblemSizeNumber").value = size;
|
||||||
|
|
||||||
const g = emblems.select("#"+type+"Emblems");
|
const g = emblems.select("#"+type+"Emblems");
|
||||||
if (el.coaHidden) g.select("[data-i='"+el.i+"']").remove();
|
g.select("[data-i='"+el.i+"']").remove();
|
||||||
else {
|
if (!size) return;
|
||||||
// re-append use element
|
|
||||||
if (g.select("[data-i='"+el.i+"']").size()) return; // alredy displayed
|
// re-append use element
|
||||||
const halfSize = +g.attr("font-size") / 2;
|
const categotySize = +g.attr("font-size");
|
||||||
const x = el.x || el.pole[0];
|
const shift = categotySize * size / 2;
|
||||||
const y = el.y || el.pole[1];
|
const x = el.x || el.pole[0];
|
||||||
g.append("use").attr("data-i", el.i)
|
const y = el.y || el.pole[1];
|
||||||
.attr("x", rn(x - halfSize), 2).attr("y", rn(y - halfSize), 2)
|
g.append("use").attr("data-i", el.i)
|
||||||
.attr("width", "1em").attr("height", "1em")
|
.attr("x", rn(x - shift), 2).attr("y", rn(y - shift), 2)
|
||||||
.attr("href", "#"+id);
|
.attr("width", size+"em").attr("height", size+"em")
|
||||||
}
|
.attr("href", "#"+id);
|
||||||
}
|
}
|
||||||
|
|
||||||
function regenerate() {
|
function regenerate() {
|
||||||
|
|
|
||||||
|
|
@ -1245,9 +1245,9 @@ function drawEmblems() {
|
||||||
TIME && console.time("drawEmblems");
|
TIME && console.time("drawEmblems");
|
||||||
const {states, provinces, burgs} = pack;
|
const {states, provinces, burgs} = pack;
|
||||||
|
|
||||||
const validStates = states.filter(s => s.i && !s.removed && s.coa && !s.coaHidden);
|
const validStates = states.filter(s => s.i && !s.removed && s.coa && s.coaSize != 0);
|
||||||
const validProvinces = provinces.filter(p => p.i && !p.removed && p.coa && !p.coaHidden);
|
const validProvinces = provinces.filter(p => p.i && !p.removed && p.coa && p.coaSize != 0);
|
||||||
const validBurgs = burgs.filter(b => b.i && !b.removed && b.coa && !b.coaHidden);
|
const validBurgs = burgs.filter(b => b.i && !b.removed && b.coa && b.coaSize != 0);
|
||||||
|
|
||||||
const getStateEmblemsSize = () => {
|
const getStateEmblemsSize = () => {
|
||||||
const startSize = Math.min(Math.max((graphHeight + graphWidth) / 40, 10), 100);
|
const startSize = Math.min(Math.max((graphHeight + graphWidth) / 40, 10), 100);
|
||||||
|
|
@ -1273,26 +1273,32 @@ function drawEmblems() {
|
||||||
const sizeBurgs = getBurgEmblemSize();
|
const sizeBurgs = getBurgEmblemSize();
|
||||||
const burgCOAs = validBurgs.map(burg => {
|
const burgCOAs = validBurgs.map(burg => {
|
||||||
const {x, y} = burg;
|
const {x, y} = burg;
|
||||||
return {type: "burg", i: burg.i, x, y, size: sizeBurgs};
|
const size = burg.coaSize || 1;
|
||||||
|
const shift = sizeBurgs * size / 2;
|
||||||
|
return {type: "burg", i: burg.i, x, y, size, shift};
|
||||||
});
|
});
|
||||||
|
|
||||||
const sizeProvinces = getProvinceEmblemsSize();
|
const sizeProvinces = getProvinceEmblemsSize();
|
||||||
const provinceCOAs = validProvinces.map(province => {
|
const provinceCOAs = validProvinces.map(province => {
|
||||||
if (!province.pole) getProvincesVertices();
|
if (!province.pole) getProvincesVertices();
|
||||||
const [x, y] = province.pole || pack.cells.p[province.center];
|
const [x, y] = province.pole || pack.cells.p[province.center];
|
||||||
return {type: "province", i: province.i, x, y, size: sizeProvinces};
|
const size = province.coaSize || 1;
|
||||||
|
const shift = sizeProvinces * size / 2;
|
||||||
|
return {type: "province", i: province.i, x, y, size, shift};
|
||||||
});
|
});
|
||||||
|
|
||||||
const sizeStates = getStateEmblemsSize();
|
const sizeStates = getStateEmblemsSize();
|
||||||
const stateCOAs = validStates.map(state => {
|
const stateCOAs = validStates.map(state => {
|
||||||
const [x, y] = state.pole || pack.cells.p[state.center];
|
const [x, y] = state.pole || pack.cells.p[state.center];
|
||||||
return {type: "state", i: state.i, x, y, size: sizeStates};
|
const size = state.coaSize || 1;
|
||||||
|
const shift = sizeStates * size / 2;
|
||||||
|
return {type: "state", i: state.i, x, y, size, shift};
|
||||||
});
|
});
|
||||||
|
|
||||||
const nodes = burgCOAs.concat(provinceCOAs).concat(stateCOAs);
|
const nodes = burgCOAs.concat(provinceCOAs).concat(stateCOAs);
|
||||||
const simulation = d3.forceSimulation(nodes)
|
const simulation = d3.forceSimulation(nodes)
|
||||||
.alphaMin(.6).alphaDecay(.2).velocityDecay(.6)
|
.alphaMin(.6).alphaDecay(.2).velocityDecay(.6)
|
||||||
.force('collision', d3.forceCollide().radius(d => d.size/2))
|
.force('collision', d3.forceCollide().radius(d => d.shift))
|
||||||
.stop();
|
.stop();
|
||||||
|
|
||||||
d3.timeout(function() {
|
d3.timeout(function() {
|
||||||
|
|
@ -1302,15 +1308,15 @@ function drawEmblems() {
|
||||||
}
|
}
|
||||||
|
|
||||||
const burgNodes = nodes.filter(node => node.type === "burg");
|
const burgNodes = nodes.filter(node => node.type === "burg");
|
||||||
const burgString = burgNodes.map(d => `<use data-i="${d.i}" x="${rn(d.x - d.size / 2)}" y="${rn(d.y - d.size / 2)}" width="1em" height="1em"/>`).join("");
|
const burgString = burgNodes.map(d => `<use data-i="${d.i}" x="${rn(d.x - d.shift)}" y="${rn(d.y - d.shift)}" width="${d.size}em" height="${d.size}em"/>`).join("");
|
||||||
emblems.select("#burgEmblems").attr("font-size", sizeBurgs).html(burgString);
|
emblems.select("#burgEmblems").attr("font-size", sizeBurgs).html(burgString);
|
||||||
|
|
||||||
const provinceNodes = nodes.filter(node => node.type === "province");
|
const provinceNodes = nodes.filter(node => node.type === "province");
|
||||||
const provinceString = provinceNodes.map(d => `<use data-i="${d.i}" x="${rn(d.x - d.size / 2)}" y="${rn(d.y - d.size / 2)}" width="1em" height="1em"/>`).join("");
|
const provinceString = provinceNodes.map(d => `<use data-i="${d.i}" x="${rn(d.x - d.shift)}" y="${rn(d.y - d.shift)}" width="${d.size}em" height="${d.size}em"/>`).join("");
|
||||||
emblems.select("#provinceEmblems").attr("font-size", sizeProvinces).html(provinceString);
|
emblems.select("#provinceEmblems").attr("font-size", sizeProvinces).html(provinceString);
|
||||||
|
|
||||||
const stateNodes = nodes.filter(node => node.type === "state");
|
const stateNodes = nodes.filter(node => node.type === "state");
|
||||||
const stateString = stateNodes.map(d => `<use data-i="${d.i}" x="${rn(d.x - d.size / 2)}" y="${rn(d.y - d.size / 2)}" width="1em" height="1em"/>`).join("");
|
const stateString = stateNodes.map(d => `<use data-i="${d.i}" x="${rn(d.x - d.shift)}" y="${rn(d.y - d.shift)}" width="${d.size}em" height="${d.size}em"/>`).join("");
|
||||||
emblems.select("#stateEmblems").attr("font-size", sizeStates).html(stateString);
|
emblems.select("#stateEmblems").attr("font-size", sizeStates).html(stateString);
|
||||||
|
|
||||||
invokeActiveZooming();
|
invokeActiveZooming();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue