diff --git a/create-card.js b/create-card.js index 7d80f4b..a76ce1b 100644 --- a/create-card.js +++ b/create-card.js @@ -18,9 +18,28 @@ const jobsRowStart = 495; const jobsRowTextSize = 30; const jobsRowTextSpacer = jobsRowTextSize * 2; +const deityIconCol = 252; +const deityIconRow = 805; + +const gcRankIconCol = 293; +const gcRankIconRow = 799; + const fcCrestCol = 345; +const fcCrestRow = 800; class CardCreator { + constructor(){ + this.isInit = false; + } + + async ensureInit() { + if (this.isInit) { + return; + } + + await this.init(); + } + async init() { this.bgImage = await loadImage("./chara_n.png"); @@ -81,6 +100,10 @@ class CardCreator { console.log(`Refreshed counts: ${this.countMinion} - ${this.countMount}`); } + async createCrest(crestAry) { + + } + async createCard(charaId) { var response = await fetch(`https://xivapi.com/character/${charaId}?extended=1&data=FC,mimo`); var data = await response.json(); @@ -141,26 +164,26 @@ class CardCreator { ctx.fillText(data.Character.GuardianDeity.Name, 480, 280); var measure = ctx.measureText(data.Character.GuardianDeity.Name); var deityIcon = await loadImage('https://xivapi.com/' + data.Character.GuardianDeity.Icon); - ctx.drawImage(deityIcon, 480 + measure.width + 20, 252, 28, 28); + ctx.drawImage(deityIcon, deityIconRow, deityIconCol, 28, 28); if (data.Character.GrandCompany.Company != null) { ctx.fillText(data.Character.GrandCompany.Company.Name, 480, 330); var measure = ctx.measureText(data.Character.GrandCompany.Company.Name); var gcRankIcon = await loadImage('https://xivapi.com/' + data.Character.GrandCompany.Rank.Icon); - ctx.drawImage(gcRankIcon, 480 + measure.width + 20, 300, 40, 40); + ctx.drawImage(gcRankIcon, gcRankIconRow, gcRankIconCol, 40, 40); } if (data.Character.FreeCompanyName != null) { var measure = ctx.measureText(data.Character.FreeCompanyName); var crestLayer2 = await loadImage(data.FreeCompany.Crest[0]); - ctx.drawImage(crestLayer2, 480 + measure.width + 20, fcCrestCol, 38, 38); + ctx.drawImage(crestLayer2, fcCrestRow, fcCrestCol, 38, 38); var crestLayer1 = await loadImage(data.FreeCompany.Crest[1]); - ctx.drawImage(crestLayer1, 480 + measure.width + 20, fcCrestCol, 38, 38); + ctx.drawImage(crestLayer1, fcCrestRow, fcCrestCol, 38, 38); var crestLayer0 = await loadImage(data.FreeCompany.Crest[2]); - ctx.drawImage(crestLayer0, 480 + measure.width + 20, fcCrestCol, 38, 38); + ctx.drawImage(crestLayer0, fcCrestRow, fcCrestCol, 38, 38); ctx.fillText(data.Character.FreeCompanyName, 480, 380); } diff --git a/index.js b/index.js index c6d51c6..f93517e 100644 --- a/index.js +++ b/index.js @@ -6,7 +6,6 @@ const port = process.env.PORT || 5000; const { CardCreator } = require('./create-card'); const creator = new CardCreator(); -creator.init(); // node cachemanager var cacheManager = require('cache-manager'); @@ -28,15 +27,16 @@ var diskCache = cacheManager.caching({ app.get('/characters/id/:charaId.png', async (req, res) => { var cacheKey = `img:${req.params.charaId}`; var ttl = 60 * 60 * 4; // 4 hours + ttl = 1; diskCache.wrap(cacheKey, // called if the cache misses in order to generate the value to cache function (cb) { - creator.createCard(req.params.charaId).then(image => cb(null, { + creator.ensureInit().then(() => creator.createCard(req.params.charaId).then(image => cb(null, { binary: { image: image, } - })).catch((reason) => cb(reason, null)); + })).catch((reason) => cb(reason, null))); }, // Options, see node-cache-manager for more examples { ttl: ttl },