diff --git a/modules/coa-generator.js b/modules/coa-generator.js index 2a8bfda8..2bdb195e 100644 --- a/modules/coa-generator.js +++ b/modules/coa-generator.js @@ -398,10 +398,10 @@ function definePattern(pattern, element, size = "") { let t1 = null, t2 = null; - if (P(.15)) size = "-small"; - else if (P(.05)) size = "-smaller"; - else if (P(.035)) size = "-big"; - else if (P(.001)) size = "-smallest"; + if (P(.1)) size = "-small"; + else if (P(.1)) size = "-smaller"; + else if (P(.01)) size = "-big"; + else if (P(.005)) size = "-smallest"; // apply standard tinctures if (P(.5) && ["vair", "vairInPale", "vairEnPointe"].includes(pattern)) {t1 = "azure"; t2 = "argent";} diff --git a/modules/coa-renderer.js b/modules/coa-renderer.js index d4ce075e..03716d7a 100644 --- a/modules/coa-renderer.js +++ b/modules/coa-renderer.js @@ -839,11 +839,7 @@ const divisionClip = division ? `${getTemplate(division.division, division.line)}` : ""; const loadedCharges = await getCharges(coa, id, shieldPath); const loadedPatterns = getPatterns(coa, id); - const blacklight = ` - - - - `; + const blacklight = ``; const field = ``; const divisionGroup = division ? templateDivision() : ""; const overlay = ``; @@ -855,6 +851,7 @@ // insert coa svg to defs document.getElementById("coas").insertAdjacentHTML("beforeend", svg); + return true; function templateDivision() { let svg = ""; @@ -1000,10 +997,10 @@ } function getSizeMod(size) { - if (size === "small") return .5; - if (size === "smaller") return .25; - if (size === "smallest") return .125; - if (size === "big") return 2; + if (size === "small") return .8; + if (size === "smaller") return .5; + if (size === "smallest") return .25; + if (size === "big") return 1.6; return 1; } @@ -1027,7 +1024,7 @@ } // render coa if does not exist - const trigger = function(id, coa) { + const trigger = async function(id, coa) { if (coa === "custom") { console.warn("Cannot render custom emblem", coa); return; @@ -1036,7 +1033,7 @@ console.warn(`Emblem ${id} is undefined`); return; } - if (!document.getElementById(id)) draw(id, coa); + if (!document.getElementById(id)) return draw(id, coa); } const add = function(type, i, coa, x, y) { diff --git a/modules/ui/emblems-editor.js b/modules/ui/emblems-editor.js index 0d9b4b58..a2a14520 100644 --- a/modules/ui/emblems-editor.js +++ b/modules/ui/emblems-editor.js @@ -271,41 +271,41 @@ function editEmblem(type, id, el) { } async function getURL(svg, size) { - const clone = svg.cloneNode(true); // clone svg - clone.setAttribute("width", size); - clone.setAttribute("height", size); - const serialized = (new XMLSerializer()).serializeToString(clone); + const serialized = getSVG(svg, size); const blob = new Blob([serialized], {type: 'image/svg+xml;charset=utf-8'}); const url = window.URL.createObjectURL(blob); window.setTimeout(() => window.URL.revokeObjectURL(url), 6000); return url; } - function downloadGallery() { + function getSVG(svg, size) { + const clone = svg.cloneNode(true); + clone.setAttribute("width", size); + clone.setAttribute("height", size); + return (new XMLSerializer()).serializeToString(clone); + } + + async function downloadGallery() { const name = getFileName("Emblems Gallery"); const validStates = pack.states.filter(s => s.i && !s.removed && s.coa); const validProvinces = pack.provinces.filter(p => p.i && !p.removed && p.coa); const validBurgs = pack.burgs.filter(b => b.i && !b.removed && b.coa); - triggerCOALoad(validStates, validProvinces, validBurgs); - const timeout = (validStates.length + validProvinces.length + validBurgs.length) * 8; - tip("Preparing to download...", true, "warn", timeout); - d3.timeout(runDownload, timeout); + await renderAllEmblems(validStates, validProvinces, validBurgs); + runDownload(); function runDownload() { const back = `Go Back`; const stateSection = `

States

` + validStates.map(state => { const el = document.getElementById("stateCOA"+state.i); - const svg = getSVG(el, state.coa, 200); - return `
${state.fullName}
${svg}
`; + return `
${state.fullName}
${getSVG(el, 200)}
`; }).join("") + `
`; const provinceSections = validStates.map(state => { const stateProvinces = validProvinces.filter(p => p.state === state.i); const figures = stateProvinces.map(province => { const el = document.getElementById("provinceCOA"+province.i); - const svg = getSVG(el, province.coa, 200); - return `
${province.fullName}
${svg}
`; + return `
${province.fullName}
${getSVG(el, 200)}
`; }).join(""); return stateProvinces.length ? `
${back}

${state.fullName} provinces

${figures}
` : ""; }).join(""); @@ -316,8 +316,7 @@ function editEmblem(type, id, el) { const provinceBurgs = stateBurgs.filter(b => pack.cells.province[b.cell] === province.i); const provinceBurgFigures = provinceBurgs.map(burg => { const el = document.getElementById("burgCOA"+burg.i); - const svg = getSVG(el, burg.coa, 200); - return `
${burg.name}
${svg}
`; + return `
${burg.name}
${getSVG(el, 200)}
`; }).join(""); return provinceBurgs.length ? `
${back}

${province.fullName} burgs

${provinceBurgFigures}
` : ""; }).join(""); @@ -325,8 +324,7 @@ function editEmblem(type, id, el) { const stateBurgOutOfProvinces = stateBurgs.filter(b => !pack.cells.province[b.cell]); const stateBurgOutOfProvincesFigures = stateBurgOutOfProvinces.map(burg => { const el = document.getElementById("burgCOA"+burg.i); - const svg = getSVG(el, burg.coa, 200); - return `
${burg.name}
${svg}
`; + return `
${burg.name}
${getSVG(el, 200)}
`; }).join(""); if (stateBurgOutOfProvincesFigures) stateBurgSections += `

${state.fullName} burgs under direct control

${stateBurgOutOfProvincesFigures}
`; return stateBurgSections; @@ -335,8 +333,7 @@ function editEmblem(type, id, el) { const neutralBurgs = validBurgs.filter(b => !b.state); const neutralsSection = neutralBurgs.length ? "

Independent burgs

" + neutralBurgs.map(burg => { const el = document.getElementById("burgCOA"+burg.i); - const svg = getSVG(el, burg.coa, 200); - return `
${burg.name}
${svg}
`; + return `
${burg.name}
${getSVG(el, 200)}
`; }).join("") + "
" : ""; const FMG = `Azgaar's Fantasy Map Generator`; @@ -367,10 +364,15 @@ function editEmblem(type, id, el) { } } - function triggerCOALoad(states, provinces, burgs) { - states.forEach(state => COArenderer.trigger("stateCOA"+state.i, state.coa)); - provinces.forEach(province => COArenderer.trigger("provinceCOA"+province.i, province.coa)); - burgs.forEach(burg => COArenderer.trigger("burgCOA"+burg.i, burg.coa)); + async function renderAllEmblems(states, provinces, burgs) { + tip("Preparing for download...", true, "warn"); + + const statePromises = states.map(state => COArenderer.trigger("stateCOA"+state.i, state.coa)); + const provincePromises = provinces.map(province => COArenderer.trigger("provinceCOA"+province.i, province.coa)); + const burgPromises = burgs.map(burg => COArenderer.trigger("burgCOA"+burg.i, burg.coa)); + const promises = [...statePromises, ...provincePromises, ...burgPromises]; + + return Promise.allSettled(promises).then(res => clearMainTip()); } function dragEmblem() {