From 759321e021206f9e5ee0692401ea512df9ca9966 Mon Sep 17 00:00:00 2001 From: Stx69 <32230998+Stx69@users.noreply.github.com> Date: Thu, 31 Mar 2022 09:08:51 +0200 Subject: [PATCH 01/10] Create index.md --- content/diplomacy/DiplomacyAmbassador/index.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 content/diplomacy/DiplomacyAmbassador/index.md diff --git a/content/diplomacy/DiplomacyAmbassador/index.md b/content/diplomacy/DiplomacyAmbassador/index.md new file mode 100644 index 00000000..d9bd0aa3 --- /dev/null +++ b/content/diplomacy/DiplomacyAmbassador/index.md @@ -0,0 +1,6 @@ +--- +title: DiplomacyAmbassador +date: 2022-31-3T23:00:00-07:00 +subtitle: Look on your diplomacy in color. +version: 0.6.5 +--- From 1e0ce67d78d63afb0df0fba20661b8703e055ba0 Mon Sep 17 00:00:00 2001 From: Stx69 <32230998+Stx69@users.noreply.github.com> Date: Thu, 31 Mar 2022 09:11:19 +0200 Subject: [PATCH 02/10] Create plugin.js --- .../diplomacy/DiplomacyAmbassador/plugin.js | 763 ++++++++++++++++++ 1 file changed, 763 insertions(+) create mode 100644 content/diplomacy/DiplomacyAmbassador/plugin.js diff --git a/content/diplomacy/DiplomacyAmbassador/plugin.js b/content/diplomacy/DiplomacyAmbassador/plugin.js new file mode 100644 index 00000000..df0efb4b --- /dev/null +++ b/content/diplomacy/DiplomacyAmbassador/plugin.js @@ -0,0 +1,763 @@ +// Diplomacy in color map +// Introduction: Selected player planet and choose your Diplomacy Ambassador reaction with "Add Friendly" "Neutral" or "Enemy" button , +// Select color and some basic atributes for Ambassador HeatAreas. (Friendly , Neutral or Enemy) + +// By 9STX6 +// Remixed highlight-my-planets (Heatmap plugin and circle) + +//import { EMPTY_ADDRESS } from "https://cdn.skypack.dev/@darkforest_eth/constants"; +var removeAllChildNodes = (parent) => { + while (parent.firstChild) { + parent.removeChild(parent.firstChild); + } +}; +let playersEnemy = []; +// EMPTY_ADDRESS, +let playersNeutral = []; + +let playersFriendly = []; + +class Diplomacy { + constructor() { + this.highlightStyle = 0; + this.rangePercent = 8; + this.alpha = 0; + this.globalAlpha = 1; + this.ownColor = '#ffffff'; + this.FriendlyColor = '#00FF00'; + this.NeutralColor = '#FFFF00'; + this.EnemyColor = '#FF0000'; + this.highlightStyleHandler = this.highlightStyleHandler.bind(this); + this.rangeHandler = this.rangeHandler.bind(this); + this.alphaHandler = this.alphaHandler.bind(this); + this.globalAlphaHandler = this.globalAlphaHandler.bind(this); + this.ownColorHandler = this.ownColorHandler.bind(this); + this.FriendlyColorHandler = this.FriendlyColorHandler.bind(this); + this.NeutralColorHandler = this.NeutralColorHandler.bind(this); + this.EnemyColorHandler = this.EnemyColorHandler.bind(this); + } + + hexToHsl(H) { + let r = 0, g = 0, b = 0; + if (H.length == 4) { + r = '0x' + H[1] + H[1]; g = '0x' + H[2] + H[2]; b = '0x' + H[3] + H[3]; + } else if (H.length == 7) { + r = '0x' + H[1] + H[2]; g = '0x' + H[3] + H[4]; b = '0x' + H[5] + H[6]; + } + r /= 255; g /= 255; b /= 255; + let cmin = Math.min(r, g, b), + cmax = Math.max(r, g, b), + delta = cmax - cmin, + h = 0, s = 0, l = 0; + + if (delta == 0) h = 0; + else if (cmax == r) h = ((g - b) / delta) % 6; + else if (cmax == g) h = (b - r) / delta + 2; + else h = (r - g) / delta + 4; + + h = Math.round(h * 60); + + if (h < 0) h += 360; + + l = (cmax + cmin) / 2; + s = delta == 0 ? 0 : delta / (1 - Math.abs(2 * l - 1)); + s = +(s * 100).toFixed(1); + l = +(l * 100).toFixed(1); + + return [h + ', ' + s + '%, ' + l + '%']; + } + + getSliderHtml(className, text, min, max, step, value) { + + return ``; + } + + getColorPicker(className, text, value) { + return ``; + } + + getSelect(className, text, items, selectedValue) { + + return ``; + } + + renderSourceListFriendly(sourceContainerFriendly, playersFriendly) { + removeAllChildNodes(sourceContainerFriendly, playersFriendly); + for (const item of playersFriendly) { + sourceContainerFriendly.append(item.substr(0, 20)); + // deleteButton for remove pair from the list + const delButton = document.createElement("button"); + sourceContainerFriendly.append(delButton); + delButton.innerText = "Del"; + delButton.style.marginLeft = "10px"; + delButton.addEventListener("click", () => { + for (let i = 0; i < playersFriendly.length; i++) { + if (playersFriendly[i] == item) { + playersFriendly.splice(i, 1); + break; + } + } + this.renderSourceListFriendly(sourceContainerFriendly, playersFriendly); + }); + // new line + const newLine = document.createElement("br"); + sourceContainerFriendly.append(newLine); + } + } + + renderSourceListNeutral(sourceContainerNeutral, playersNeutral) { + removeAllChildNodes(sourceContainerNeutral, playersNeutral); + for (const item of playersNeutral) { + sourceContainerNeutral.append(item.substr(0, 20)); + // deleteButton for remove pair from the list + const delButton = document.createElement("button"); + sourceContainerNeutral.append(delButton); + delButton.innerText = "Del"; + delButton.style.marginLeft = "10px"; + delButton.addEventListener("click", () => { + for (let i = 0; i < playersNeutral.length; i++) { + if (playersNeutral[i] == item) { + playersNeutral.splice(i, 1); + break; + } + } + this.renderSourceListNeutral(sourceContainerNeutral, playersNeutral); + }); + // new line + const newLine = document.createElement("br"); + sourceContainerNeutral.append(newLine); + } + } + + renderSourceListEnemy(sourceContainerEnemy, playersEnemy) { + removeAllChildNodes(sourceContainerEnemy, playersEnemy); + for (const item of playersEnemy) { + sourceContainerEnemy.append(item.substr(0, 20)); + // deleteButton for remove pair from the list + const delButton = document.createElement("button"); + sourceContainerEnemy.append(delButton); + delButton.innerText = "Del"; + delButton.style.marginLeft = "10px"; + delButton.addEventListener("click", () => { + for (let i = 0; i < playersEnemy.length; i++) { + if (playersEnemy[i] == item) { + playersEnemy.splice(i, 1); + break; + } + } + this.renderSourceListEnemy(sourceContainerEnemy, playersEnemy); + }); + // new line + const newLine = document.createElement("br"); + sourceContainerEnemy.append(newLine); + } + } + + + render(container) { + container.style.width = '450px'; + container.style.heigth = '620px'; + + let sourceContainerFriendly = document.createElement("div"); + sourceContainerFriendly.innerText = "Current Friendly source: none"; + + let sourceContainerNeutral = document.createElement("div"); + sourceContainerNeutral.innerText = "Current Neutral source: none"; + + let sourceContainerEnemy = document.createElement("div"); + sourceContainerEnemy.innerText = "Current Enemy source: none"; + + + let sourceColorOwner = document.createElement("div"); + sourceColorOwner.innerText = "Current Enemy source: none"; + sourceColorOwner.style.width = '49%'; + sourceColorOwner.innerHTML = [ + this.getColorPicker('ownColor', 'Your Color:', this.ownColor), + this.getSelect('highlight', 'Highligh:', [{ value: 0, text: "Heatmap" }, { value: 1, text: "Circle" }], this.highlightStyle), + this.getSliderHtml('range', 'Planet Range:', 1, 100, 1, this.rangePercent), + this.getSliderHtml('alpha', 'Gradient Alpha:', 0, 1, 0.01, this.alpha), + this.getSliderHtml('globalAlpha', 'Global Alpha:', 0, 1, 0.01, this.globalAlpha) + ].join('
'); + this.selectHighlightStyle = sourceColorOwner.querySelector('label.highlight select'); + this.selectHighlightStyle.addEventListener('change', this.highlightStyleHandler); + + this.valueRange = sourceColorOwner.querySelector('label.range span'); + this.sliderRange = sourceColorOwner.querySelector('label.range input'); + this.sliderRange.addEventListener('input', this.rangeHandler); + + this.valueAlpha = sourceColorOwner.querySelector('label.alpha span'); + this.sliderAlpha = sourceColorOwner.querySelector('label.alpha input'); + this.sliderAlpha.addEventListener('input', this.alphaHandler); + + this.valueGlobalAlpha = sourceColorOwner.querySelector('label.globalAlpha span'); + this.sliderGlobalAlpha = sourceColorOwner.querySelector('label.globalAlpha input'); + this.sliderGlobalAlpha.addEventListener('input', this.globalAlphaHandler); + + this.colorPickerOwnColor = sourceColorOwner.querySelector('label.ownColor input'); + this.colorPickerOwnColor.addEventListener('input', this.ownColorHandler); + + + let sourceColorFriendly = document.createElement("div"); + sourceColorFriendly.innerText = "Current Enemy source: none"; + sourceColorFriendly.style.width = '49%'; + sourceColorFriendly.innerHTML = [ + this.getColorPicker('FriendlyColor', 'Friendly Color:', this.FriendlyColor), + + ].join('
'); + + this.colorPickerFriendlyColor = sourceColorFriendly.querySelector('label.FriendlyColor input'); + this.colorPickerFriendlyColor.addEventListener('input', this.FriendlyColorHandler); + + let sourceColorNeutral = document.createElement("div"); + sourceColorNeutral.innerText = "Current Enemy source: none"; + sourceColorNeutral.style.width = '49%'; + sourceColorNeutral.innerHTML = [ + this.getColorPicker('NeutralColor', 'Neutral Color:', this.NeutralColor), + + ].join('
'); + + this.colorPickerNeutralColor = sourceColorNeutral.querySelector('label.NeutralColor input'); + this.colorPickerNeutralColor.addEventListener('input', this.NeutralColorHandler); + + + let sourceColorEnemy = document.createElement("div"); + sourceColorEnemy.innerText = "Current Enemy source: none"; + sourceColorEnemy.style.width = '49%'; + sourceColorEnemy.innerHTML = [ + this.getColorPicker('EnemyColor', 'Enemy Color:', this.EnemyColor), + ].join('
'); + + this.colorPickerEnemyColor = sourceColorEnemy.querySelector('label.EnemyColor input'); + this.colorPickerEnemyColor.addEventListener('input', this.EnemyColorHandler); + + + let addButtonFriendly = document.createElement('button'); + addButtonFriendly.style.width = '45%'; + addButtonFriendly.style.marginBottom = '10px'; + addButtonFriendly.innerHTML = 'Add Friendly'; + addButtonFriendly.onclick = () => { + + let selected = ui.getSelectedPlanet(); + + + if (selected) { + let tempID = selected.owner; + playersFriendly.push(tempID); + console.log("added Friendly " + tempID); + console.log(playersFriendly); + this.renderSourceListFriendly(sourceContainerFriendly, playersFriendly); + } + else { + console.log("Not planet selected"); + } + }; + + let addButtonNeutral = document.createElement('button'); + addButtonNeutral.style.width = '45%'; + addButtonNeutral.style.marginBottom = '10px'; + addButtonNeutral.innerHTML = 'Add Neutral'; + addButtonNeutral.onclick = () => { + + let selected = ui.getSelectedPlanet(); + + + if (selected) { + let tempID = selected.owner; + playersNeutral.push(tempID); + console.log("added Neutral " + tempID); + console.log(playersNeutral); + this.renderSourceListNeutral(sourceContainerNeutral, playersNeutral); + } + else { + console.log("Not planet selected"); + } + }; + + let addButtonEnemy = document.createElement('button'); + addButtonEnemy.style.width = '45%'; + addButtonEnemy.style.marginBottom = '10px'; + addButtonEnemy.innerHTML = 'Add Enemy'; + addButtonEnemy.onclick = () => { + + let selected = ui.getSelectedPlanet(); + + + if (selected) { + let tempID = selected.owner; + playersEnemy.push(tempID); + console.log("added Enemy " + tempID); + console.log(playersEnemy); + this.renderSourceListEnemy(sourceContainerEnemy, playersEnemy); + } + else { + console.log("Not planet selected"); + } + }; + + let clearButtonFriendly = document.createElement('button'); + clearButtonFriendly.style.width = '45%'; + clearButtonFriendly.style.marginBottom = '10px'; + clearButtonFriendly.innerHTML = 'Clean Friendly'; + clearButtonFriendly.onclick = () => { + playersFriendly = []; + console.log(playersFriendly); + console.log("Cleaned Friendly list"); + + this.renderSourceListFriendly(sourceContainerFriendly, playersFriendly); + sourceContainerFriendly.innerText = "Current Friendly source: none"; + }; + + let clearButtonNeutral = document.createElement('button'); + clearButtonNeutral.style.width = '45%'; + clearButtonNeutral.style.marginBottom = '10px'; + clearButtonNeutral.innerHTML = 'Clean Neutral'; + clearButtonNeutral.onclick = () => { + playersNeutral = []; + console.log(playersNeutral); + console.log("Cleaned Neutral list"); + + this.renderSourceListNeutral(sourceContainerNeutral, playersNeutral); + sourceContainerNeutral.innerText = "Current Neutral source: none"; + }; + + let clearButtonEnemy = document.createElement('button'); + clearButtonEnemy.style.width = '45%'; + clearButtonEnemy.style.marginBottom = '10px'; + clearButtonEnemy.innerHTML = 'Clean Enemy'; + clearButtonEnemy.onclick = () => { + playersEnemy = []; + //playersEnemy.push(EMPTY_ADDRESS); + console.log(playersEnemy); + console.log("Cleaned Enemy list"); + + this.renderSourceListEnemy(sourceContainerEnemy, playersEnemy); + sourceContainerEnemy.innerText = "Current Enemy source: none" + }; + + let LoadButton = document.createElement('button'); + LoadButton.style.width = '45%'; + LoadButton.style.marginBottom = '10px'; + LoadButton.innerHTML = 'Load Diplomacy'; + LoadButton.onclick = () => { + let inputFile = document.createElement('input'); + inputFile.type = 'file'; + inputFile.onchange = () => { + try { + var file = inputFile.files.item(0); + var reader = new FileReader(); + reader.onload = () => { + const obj = JSON.parse(reader.result); + playersFriendly = obj.playersFriendly; + playersNeutral = obj.playersNeutral; + playersEnemy = obj.playersEnemy; + this.renderSourceListFriendly(sourceContainerFriendly, playersFriendly); + this.renderSourceListNeutral(sourceContainerNeutral, playersNeutral); + this.renderSourceListEnemy(sourceContainerEnemy, playersEnemy); + }; + reader.readAsText(file); + } catch (err) { + console.error(err); + return; + } + } + inputFile.click(); + }; + + + let SaveButton = document.createElement('button'); + SaveButton.style.width = '45%'; + SaveButton.style.marginBottom = '10px'; + SaveButton.innerHTML = 'Save Diplomacy'; + SaveButton.onclick = () => { + let save = JSON.stringify({ playersFriendly, playersNeutral, playersEnemy }); + var blob = new Blob([save], { type: 'application/json' }), + anchor = document.createElement('a'); + anchor.download = new Date().toLocaleString() + "_" + df.getAccount() + '_DiplomacyAmbassador.json'; + anchor.href = (window.webkitURL || window.URL).createObjectURL(blob); + anchor.dataset.downloadurl = ['application/json', anchor.download, anchor.href].join(':'); + anchor.click(); + }; + + + container.appendChild(sourceColorOwner); + container.appendChild(addButtonFriendly); + container.appendChild(clearButtonFriendly); + container.appendChild(sourceColorFriendly); + container.appendChild(sourceContainerFriendly); + + + + container.appendChild(addButtonNeutral); + container.appendChild(clearButtonNeutral); + container.appendChild(sourceColorNeutral); + container.appendChild(sourceContainerNeutral); + + + + container.appendChild(addButtonEnemy); + container.appendChild(clearButtonEnemy); + container.appendChild(sourceColorEnemy); + container.appendChild(sourceContainerEnemy); + + container.appendChild(LoadButton); + container.appendChild(SaveButton); + + + + } + + highlightStyleHandler() { + this.highlightStyle = this.selectHighlightStyle.value; + + //I couldn't find a better way... + if (this.highlightStyle == 0) { + + document.querySelector('label.alpha').style.display = "inline-block"; + document.querySelector('label.range').style.display = "inline-block"; + document.querySelector('label.globalAlpha').style.display = "inline-block"; + } else { + document.querySelector('label.alpha').style.display = "none"; + document.querySelector('label.range').style.display = "none"; + document.querySelector('label.globalAlpha').style.display = "none"; + } + } + + rangeHandler() { + this.rangePercent = parseInt(this.sliderRange.value); + this.valueRange.innerHTML = `${this.sliderRange.value}%`; + } + + alphaHandler() { + this.alpha = parseFloat(this.sliderAlpha.value); + this.valueAlpha.innerHTML = `${this.sliderAlpha.value}`; + } + + globalAlphaHandler() { + this.globalAlpha = parseFloat(this.sliderGlobalAlpha.value); + this.valueGlobalAlpha.innerHTML = `${this.sliderGlobalAlpha.value}`; + } + + ownColorHandler() { + this.ownColor = this.colorPickerOwnColor.value; + } + + FriendlyColorHandler() { + this.FriendlyColor = this.colorPickerFriendlyColor.value; + } + NeutralColorHandler() { + this.NeutralColor = this.colorPickerNeutralColor.value; + } + EnemyColorHandler() { + this.EnemyColor = this.colorPickerEnemyColor.value; + } + + async draw(ctx) { + const origGlobalAlpha = ctx.globalAlpha; + const origFillStyle = ctx.fillStyle; + const origSrokeStyle = ctx.strokeStyle; + const viewport = ui.getViewport(); + const planetsOwner = df.getMyPlanets(); + // const planets = df.getAllPlanets(); + let planetsFriendly = Array.from(df.getAllPlanets()).filter(p => ( + playersFriendly.includes(p.owner))); + let planetsNeutral = Array.from(df.getAllPlanets()).filter(p => ( + playersNeutral.includes(p.owner))); + // console.log(planetsNeutral); + let planetsEnemy = Array.from(df.getAllPlanets()).filter(p => ( + playersEnemy.includes(p.owner))); + // console.log(planetsEnemy); + // paint bigger ones first + // planets.sort((a, b) => b.range - a.range); + // planets = planetsFriendly; + if (this.highlightStyle == 0) for (const p of planetsOwner) { + if (!p.location) continue; + // draw range circle + let { x, y } = viewport.worldToCanvasCoords(p.location.coords); + const hsl = this.hexToHsl(this.ownColor); + + const fac = Math.max(0, Math.log2(this.rangePercent / 5)); + const range = fac * p.range; + const trueRange = viewport.worldToCanvasDist(range); + + ctx.globalAlpha = this.globalAlpha; + ctx.beginPath(); + ctx.arc(x, y, trueRange, 0, 2 * Math.PI); + const gradient = ctx.createRadialGradient(x, y, 0, x, y, trueRange); + gradient.addColorStop(0, `hsla(${hsl}, 1)`); + gradient.addColorStop(1, `hsla(${hsl}, ${this.alpha})`); + ctx.fillStyle = gradient; + ctx.fill(); + + // reset ctx + ctx.fillStyle = origFillStyle; + ctx.strokeStyle = origSrokeStyle; + ctx.globalAlpha = origGlobalAlpha; + } + else { + + ctx.fillStyle = this.ownColor; + ctx.strokeStyle = this.ownColor; + + for (let planet of planetsOwner) { + if (!planet.location) continue; + let { x, y } = planet.location.coords; + + // add red circle when level <= 4 + if (planet.planetLevel <= 4) { + ctx.lineWidth = 1.5; + ctx.strokeStyle = "dashed"; + ctx.beginPath(); + ctx.arc( + viewport.worldToCanvasX(x), + viewport.worldToCanvasY(y), + viewport.worldToCanvasDist(ui.getRadiusOfPlanetLevel(3) * 6), + 0, + 2 * Math.PI + ); + // ctx.fill(); + ctx.stroke(); + ctx.closePath(); + } + + ctx.beginPath(); + ctx.arc( + viewport.worldToCanvasX(x), + viewport.worldToCanvasY(y), + viewport.worldToCanvasDist( + ui.getRadiusOfPlanetLevel(planet.planetLevel) + ), + 0, + 2 * Math.PI + ); + ctx.fill(); + // ctx.stroke(); + ctx.closePath(); + } + } + if (this.highlightStyle == 0) for (const p of planetsFriendly) { + if (!p.location) continue; + // draw range circle + let { x, y } = viewport.worldToCanvasCoords(p.location.coords); + const hsl = this.hexToHsl(this.FriendlyColor); + + const fac = Math.max(0, Math.log2(this.rangePercent / 5)); + const range = fac * p.range; + const trueRange = viewport.worldToCanvasDist(range); + + ctx.globalAlpha = this.globalAlpha; + ctx.beginPath(); + ctx.arc(x, y, trueRange, 0, 2 * Math.PI); + const gradient = ctx.createRadialGradient(x, y, 0, x, y, trueRange); + gradient.addColorStop(0, `hsla(${hsl}, 1)`); + gradient.addColorStop(1, `hsla(${hsl}, ${this.alpha})`); + ctx.fillStyle = gradient; + ctx.fill(); + + // reset ctx + ctx.fillStyle = origFillStyle; + ctx.strokeStyle = origSrokeStyle; + ctx.globalAlpha = origGlobalAlpha; + } + else { + + ctx.fillStyle = this.FriendlyColor; + ctx.strokeStyle = this.FriendlyColor; + + for (let planet of planetsFriendly) { + if (!planet.location) continue; + let { x, y } = planet.location.coords; + + // add red circle when level <= 4 + if (planet.planetLevel <= 4) { + ctx.lineWidth = 1.5; + ctx.strokeStyle = "dashed"; + ctx.beginPath(); + ctx.arc( + viewport.worldToCanvasX(x), + viewport.worldToCanvasY(y), + viewport.worldToCanvasDist(ui.getRadiusOfPlanetLevel(3) * 6), + 0, + 2 * Math.PI + ); + // ctx.fill(); + ctx.stroke(); + ctx.closePath(); + } + + ctx.beginPath(); + ctx.arc( + viewport.worldToCanvasX(x), + viewport.worldToCanvasY(y), + viewport.worldToCanvasDist( + ui.getRadiusOfPlanetLevel(planet.planetLevel) + ), + 0, + 2 * Math.PI + ); + ctx.fill(); + // ctx.stroke(); + ctx.closePath(); + } + } + if (this.highlightStyle == 0) for (const p of planetsNeutral) { + if (!p.location) continue; + // draw range circle + let { x, y } = viewport.worldToCanvasCoords(p.location.coords); + const hsl = this.hexToHsl(this.NeutralColor); + + const fac = Math.max(0, Math.log2(this.rangePercent / 5)); + const range = fac * p.range; + const trueRange = viewport.worldToCanvasDist(range); + + ctx.globalAlpha = this.globalAlpha; + ctx.beginPath(); + ctx.arc(x, y, trueRange, 0, 2 * Math.PI); + const gradient = ctx.createRadialGradient(x, y, 0, x, y, trueRange); + gradient.addColorStop(0, `hsla(${hsl}, 1)`); + gradient.addColorStop(1, `hsla(${hsl}, ${this.alpha})`); + ctx.fillStyle = gradient; + ctx.fill(); + + // reset ctx + ctx.fillStyle = origFillStyle; + ctx.strokeStyle = origSrokeStyle; + ctx.globalAlpha = origGlobalAlpha; + } + else { + + ctx.fillStyle = this.NeutralColor; + ctx.strokeStyle = this.NeutralColor; + + for (let planet of planetsNeutral) { + if (!planet.location) continue; + let { x, y } = planet.location.coords; + + // add red circle when level <= 4 + if (planet.planetLevel <= 4) { + ctx.lineWidth = 1.5; + ctx.strokeStyle = "dashed"; + ctx.beginPath(); + ctx.arc( + viewport.worldToCanvasX(x), + viewport.worldToCanvasY(y), + viewport.worldToCanvasDist(ui.getRadiusOfPlanetLevel(3) * 6), + 0, + 2 * Math.PI + ); + // ctx.fill(); + ctx.stroke(); + ctx.closePath(); + } + + ctx.beginPath(); + ctx.arc( + viewport.worldToCanvasX(x), + viewport.worldToCanvasY(y), + viewport.worldToCanvasDist( + ui.getRadiusOfPlanetLevel(planet.planetLevel) + ), + 0, + 2 * Math.PI + ); + ctx.fill(); + // ctx.stroke(); + ctx.closePath(); + } + } + if (this.highlightStyle == 0) for (const p of planetsEnemy) { + if (!p.location) continue; + // draw range circle + let { x, y } = viewport.worldToCanvasCoords(p.location.coords); + const hsl = this.hexToHsl(this.EnemyColor); + + const fac = Math.max(0, Math.log2(this.rangePercent / 5)); + const range = fac * p.range; + const trueRange = viewport.worldToCanvasDist(range); + + ctx.globalAlpha = this.globalAlpha; + ctx.beginPath(); + ctx.arc(x, y, trueRange, 0, 2 * Math.PI); + const gradient = ctx.createRadialGradient(x, y, 0, x, y, trueRange); + gradient.addColorStop(0, `hsla(${hsl}, 1)`); + gradient.addColorStop(1, `hsla(${hsl}, ${this.alpha})`); + ctx.fillStyle = gradient; + ctx.fill(); + + // reset ctx + ctx.fillStyle = origFillStyle; + ctx.strokeStyle = origSrokeStyle; + ctx.globalAlpha = origGlobalAlpha; + } + else { + + ctx.fillStyle = this.EnemyColor; + ctx.strokeStyle = this.EnemyColor; + + for (let planet of planetsEnemy) { + if (!planet.location) continue; + let { x, y } = planet.location.coords; + + // add red circle when level <= 4 + if (planet.planetLevel <= 4) { + ctx.lineWidth = 1.5; + ctx.strokeStyle = "dashed"; + ctx.beginPath(); + ctx.arc( + viewport.worldToCanvasX(x), + viewport.worldToCanvasY(y), + viewport.worldToCanvasDist(ui.getRadiusOfPlanetLevel(3) * 6), + 0, + 2 * Math.PI + ); + // ctx.fill(); + ctx.stroke(); + ctx.closePath(); + } + + ctx.beginPath(); + ctx.arc( + viewport.worldToCanvasX(x), + viewport.worldToCanvasY(y), + viewport.worldToCanvasDist( + ui.getRadiusOfPlanetLevel(planet.planetLevel) + ), + 0, + 2 * Math.PI + ); + ctx.fill(); + // ctx.stroke(); + ctx.closePath(); + } + } + + } + + destroy() { + this.selectHighlightStyle.removeEventListener('select', this.highlightStyleHandler); + this.sliderRange.removeEventListener('input', this.rangeHandler); + this.sliderAlpha.removeEventListener('input', this.alphaHandler); + this.sliderGlobalAlpha.removeEventListener('input', this.globalAlphaHandler); + } +} +export default Diplomacy; From 314ce39f0f2a2e5bba698ef6dfc3de3ef6391f2b Mon Sep 17 00:00:00 2001 From: Stx69 <32230998+Stx69@users.noreply.github.com> Date: Thu, 31 Mar 2022 08:27:17 +0100 Subject: [PATCH 03/10] Add files via upload --- .../DiplomacyAmbassador/screenshot.png | Bin 0 -> 72652 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 content/diplomacy/DiplomacyAmbassador/screenshot.png diff --git a/content/diplomacy/DiplomacyAmbassador/screenshot.png b/content/diplomacy/DiplomacyAmbassador/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..801ea97b6dffcbb8a22c0189f1536ae46c9a0812 GIT binary patch literal 72652 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 *AKEn^~QIhLAK^-!wA^7=(S`@%Iw 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 literal 0 HcmV?d00001 From 4394109fbddaa3ee662de143d11bab802d0e4e9d Mon Sep 17 00:00:00 2001 From: Stx69 <32230998+Stx69@users.noreply.github.com> Date: Thu, 31 Mar 2022 09:42:04 +0200 Subject: [PATCH 04/10] Update plugin.js Changed formating VS Code in settings on botton blue line - indent Spaces: 2 --- .../diplomacy/DiplomacyAmbassador/plugin.js | 1350 ++++++++--------- 1 file changed, 675 insertions(+), 675 deletions(-) diff --git a/content/diplomacy/DiplomacyAmbassador/plugin.js b/content/diplomacy/DiplomacyAmbassador/plugin.js index df0efb4b..a25804e1 100644 --- a/content/diplomacy/DiplomacyAmbassador/plugin.js +++ b/content/diplomacy/DiplomacyAmbassador/plugin.js @@ -7,9 +7,9 @@ //import { EMPTY_ADDRESS } from "https://cdn.skypack.dev/@darkforest_eth/constants"; var removeAllChildNodes = (parent) => { - while (parent.firstChild) { - parent.removeChild(parent.firstChild); - } + while (parent.firstChild) { + parent.removeChild(parent.firstChild); + } }; let playersEnemy = []; // EMPTY_ADDRESS, @@ -18,58 +18,58 @@ let playersNeutral = []; let playersFriendly = []; class Diplomacy { - constructor() { - this.highlightStyle = 0; - this.rangePercent = 8; - this.alpha = 0; - this.globalAlpha = 1; - this.ownColor = '#ffffff'; - this.FriendlyColor = '#00FF00'; - this.NeutralColor = '#FFFF00'; - this.EnemyColor = '#FF0000'; - this.highlightStyleHandler = this.highlightStyleHandler.bind(this); - this.rangeHandler = this.rangeHandler.bind(this); - this.alphaHandler = this.alphaHandler.bind(this); - this.globalAlphaHandler = this.globalAlphaHandler.bind(this); - this.ownColorHandler = this.ownColorHandler.bind(this); - this.FriendlyColorHandler = this.FriendlyColorHandler.bind(this); - this.NeutralColorHandler = this.NeutralColorHandler.bind(this); - this.EnemyColorHandler = this.EnemyColorHandler.bind(this); + constructor() { + this.highlightStyle = 0; + this.rangePercent = 8; + this.alpha = 0; + this.globalAlpha = 1; + this.ownColor = '#ffffff'; + this.FriendlyColor = '#00FF00'; + this.NeutralColor = '#FFFF00'; + this.EnemyColor = '#FF0000'; + this.highlightStyleHandler = this.highlightStyleHandler.bind(this); + this.rangeHandler = this.rangeHandler.bind(this); + this.alphaHandler = this.alphaHandler.bind(this); + this.globalAlphaHandler = this.globalAlphaHandler.bind(this); + this.ownColorHandler = this.ownColorHandler.bind(this); + this.FriendlyColorHandler = this.FriendlyColorHandler.bind(this); + this.NeutralColorHandler = this.NeutralColorHandler.bind(this); + this.EnemyColorHandler = this.EnemyColorHandler.bind(this); + } + + hexToHsl(H) { + let r = 0, g = 0, b = 0; + if (H.length == 4) { + r = '0x' + H[1] + H[1]; g = '0x' + H[2] + H[2]; b = '0x' + H[3] + H[3]; + } else if (H.length == 7) { + r = '0x' + H[1] + H[2]; g = '0x' + H[3] + H[4]; b = '0x' + H[5] + H[6]; } + r /= 255; g /= 255; b /= 255; + let cmin = Math.min(r, g, b), + cmax = Math.max(r, g, b), + delta = cmax - cmin, + h = 0, s = 0, l = 0; - hexToHsl(H) { - let r = 0, g = 0, b = 0; - if (H.length == 4) { - r = '0x' + H[1] + H[1]; g = '0x' + H[2] + H[2]; b = '0x' + H[3] + H[3]; - } else if (H.length == 7) { - r = '0x' + H[1] + H[2]; g = '0x' + H[3] + H[4]; b = '0x' + H[5] + H[6]; - } - r /= 255; g /= 255; b /= 255; - let cmin = Math.min(r, g, b), - cmax = Math.max(r, g, b), - delta = cmax - cmin, - h = 0, s = 0, l = 0; - - if (delta == 0) h = 0; - else if (cmax == r) h = ((g - b) / delta) % 6; - else if (cmax == g) h = (b - r) / delta + 2; - else h = (r - g) / delta + 4; + if (delta == 0) h = 0; + else if (cmax == r) h = ((g - b) / delta) % 6; + else if (cmax == g) h = (b - r) / delta + 2; + else h = (r - g) / delta + 4; - h = Math.round(h * 60); + h = Math.round(h * 60); - if (h < 0) h += 360; + if (h < 0) h += 360; - l = (cmax + cmin) / 2; - s = delta == 0 ? 0 : delta / (1 - Math.abs(2 * l - 1)); - s = +(s * 100).toFixed(1); - l = +(l * 100).toFixed(1); + l = (cmax + cmin) / 2; + s = delta == 0 ? 0 : delta / (1 - Math.abs(2 * l - 1)); + s = +(s * 100).toFixed(1); + l = +(l * 100).toFixed(1); - return [h + ', ' + s + '%, ' + l + '%']; - } + return [h + ', ' + s + '%, ' + l + '%']; + } - getSliderHtml(className, text, min, max, step, value) { + getSliderHtml(className, text, min, max, step, value) { - return `