From 36064a2cdcb4b3b637febf5f39bd76c173fb67a9 Mon Sep 17 00:00:00 2001 From: goat <16760685+goaaats@users.noreply.github.com> Date: Wed, 26 May 2021 01:03:30 +0200 Subject: [PATCH] Add mounts & minions --- create-card.js | 60 +++++++++++++++++++++++++++++++++++++++++++------ minion.png | Bin 0 -> 8445 bytes mount.png | Bin 0 -> 15782 bytes 3 files changed, 53 insertions(+), 7 deletions(-) create mode 100644 minion.png create mode 100644 mount.png diff --git a/create-card.js b/create-card.js index 472af7f..a2cfc82 100644 --- a/create-card.js +++ b/create-card.js @@ -7,6 +7,7 @@ registerFont('SourceSansPro-SemiBold.ttf', { family: 'Source Sans Pro', style: ' const primary = "rgba(178, 214, 249, 1)"; const white = "rgba(255, 255, 255,1)"; +const grey = "#868686"; const black = "rgba(0,0,0,0.5)"; const small = '"18px "Source Sans Pro"'; const med = '30px "Source Sans Pro"'; @@ -23,6 +24,9 @@ class CardCreator { async init() { this.bgImage = await loadImage("./chara_n.png"); + this.imgMinion = await loadImage("./minion.png"); + this.imgMount = await loadImage("./mount.png"); + this.imgAlchemist = await loadImage("./cj/1/alchemist.png"); this.imgArmorer = await loadImage("./cj/1/armorer.png"); this.imgBlacksmith = await loadImage("./cj/1/blacksmith.png"); @@ -59,10 +63,26 @@ class CardCreator { this.imgRedmage = await loadImage("./cj/1/redmage.png"); this.imgBluemage = await loadImage('./cj/1/bluemage.png'); + + await this.countMountsMinions(); + } + + async countMountsMinions() { + var response = await fetch(`https://xivapi.com/Companion`); + var data = await response.json(); + + this.countMinion = data.Pagination.ResultsTotal; + + var response = await fetch(`https://xivapi.com/Mount`); + var data = await response.json(); + + this.countMount = data.Pagination.ResultsTotal; + + console.log(`Refreshed counts: ${this.countMinion} - ${this.countMount}`); } async createCard(charaId) { - var response = await fetch(`https://xivapi.com/character/${charaId}?extended=1&data=FC`); + var response = await fetch(`https://xivapi.com/character/${charaId}?extended=1&data=FC,mimo`); var data = await response.json(); const canvas = createCanvas(890, 600); @@ -77,17 +97,22 @@ class CardCreator { ctx.strokeStyle = white; ctx.fillStyle = black; ctx.beginPath(); - ctx.fillRect(464, 7, 400, 100); - ctx.fillRect(464, 120, 400, 50); - ctx.fillRect(464, 185, 400, 205); + ctx.fillRect(464, 7, 400, 120); + + ctx.fillRect(464, 135, 195, 40); + ctx.fillRect(669, 135, 195, 40); + + ctx.fillRect(464, 183, 400, 205); ctx.fillRect(464, 405, 400, 175); ctx.stroke(); ctx.textAlign = "center"; ctx.font = med; ctx.fillStyle = primary; ctx.fillText(data.Character.Title.Name, 665, 45); - ctx.font = med; - ctx.fillText(`${data.Character.Server} (${data.Character.DC})`, 665, 155); + ctx.font = small; + ctx.fillText(`${data.Character.Server} (${data.Character.DC})`, 665, 115); + + // Race, Clan, Guardian, GC, FC Titles ctx.font = small; ctx.textAlign = "left"; @@ -140,9 +165,30 @@ class CardCreator { ctx.fillText(data.Character.FreeCompanyName, 480, 380); } + // Minion & Mount percentages + const mountsPct = Math.ceil((data.Mounts.length / this.countMount) * 100); + const minionsPct = Math.ceil((data.Minions.length / this.countMinion) * 100); + + const mountsMeasure = ctx.measureText(`${mountsPct}%`); + const minionsMeasure = ctx.measureText(`${minionsPct}%`); + + ctx.fillText(`${mountsPct}%`, 480, 162); + ctx.fillText(`${minionsPct}%`, 685, 162); + + ctx.fillStyle = grey; + ctx.font = small; + + ctx.fillText("Mounts", 480 + mountsMeasure.width + 5, 162); + ctx.fillText("Minions", 685 + minionsMeasure.width + 5, 162); + + ctx.drawImage(this.imgMount, 620, 140, 32, 32); + ctx.drawImage(this.imgMinion, 834, 140, 19, 32); + + ctx.fillStyle = white; + + // Why are there so many fucking jobs in this game? // Crafting - ctx.font = small; ctx.textAlign = "center"; var cJobsRowX = jobsRowStart; diff --git a/minion.png b/minion.png new file mode 100644 index 0000000000000000000000000000000000000000..0c9b87d7ab721e5b302c62be8aa737bbc46b1040 GIT binary patch literal 8445 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 SWZ7}!UKi>u(+$<$aO8i