Move TTS deck generation to client side, and fix it
This commit is contained in:
parent
058b4cf8be
commit
44b94aa219
@ -42,7 +42,7 @@
|
|||||||
card: card.back,
|
card: card.back,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return Array(card.count || 1).fill(cardWrapper).flat();
|
return cardWrapper;
|
||||||
}));
|
}));
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -6,11 +6,11 @@
|
|||||||
<button type="button" @click="upload"> Save Deck </button>
|
<button type="button" @click="upload"> Save Deck </button>
|
||||||
<Loader :loading="uploading"></Loader>
|
<Loader :loading="uploading"></Loader>
|
||||||
Download:
|
Download:
|
||||||
<a class="download" :href="inputJSON"
|
<a class="download" :href="downloadJSON(deckInfo)"
|
||||||
:download="deckInfo.meta.name + '.input.json'">
|
:download="deckInfo.meta.name + '.input.json'">
|
||||||
Input JSON
|
Input JSON
|
||||||
</a>
|
</a>
|
||||||
<a class="download" :href="`/decks/${deckID}.tts.json`"
|
<a class="download" :href="downloadJSON(makeTTSJSON())"
|
||||||
:download="deckInfo.meta.name + '.tts.json'">
|
:download="deckInfo.meta.name + '.tts.json'">
|
||||||
Tabletop Sim Output JSON
|
Tabletop Sim Output JSON
|
||||||
</a>
|
</a>
|
||||||
@ -60,6 +60,7 @@
|
|||||||
import html2canvas from 'html2canvas';
|
import html2canvas from 'html2canvas';
|
||||||
import Deck from './Deck.vue';
|
import Deck from './Deck.vue';
|
||||||
import Loader from './Loader.vue';
|
import Loader from './Loader.vue';
|
||||||
|
import tts_templates from './template/tts/*.json';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'Editor',
|
name: 'Editor',
|
||||||
@ -87,13 +88,6 @@
|
|||||||
* 'beforeunload', e => e.returnValue = "Unsaved changes blah blah"); */
|
* 'beforeunload', e => e.returnValue = "Unsaved changes blah blah"); */
|
||||||
},
|
},
|
||||||
|
|
||||||
computed: {
|
|
||||||
inputJSON() {
|
|
||||||
return 'data:application/json;charset=utf-8,' +
|
|
||||||
encodeURIComponent(JSON.stringify(this.deckInfo))
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
// deck JSON uploader
|
// deck JSON uploader
|
||||||
jsonUpload(event) {
|
jsonUpload(event) {
|
||||||
@ -111,6 +105,52 @@
|
|||||||
reader.readAsDataURL(event.target.files[0]);
|
reader.readAsDataURL(event.target.files[0]);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
downloadJSON(json) {
|
||||||
|
return 'data:application/json;charset=utf-8,' +
|
||||||
|
encodeURIComponent(JSON.stringify(json))
|
||||||
|
},
|
||||||
|
|
||||||
|
makeTTSJSON() {
|
||||||
|
// make a copy
|
||||||
|
let deckOut = JSON.parse(JSON.stringify(tts_templates['deck']));
|
||||||
|
deckOut.ObjectStates[0].Nickname = this.deckInfo.meta.name;
|
||||||
|
|
||||||
|
let index = 100;
|
||||||
|
deckOut.ObjectStates[0].ContainedObjects = Object
|
||||||
|
.keys(this.deckInfo.cards)
|
||||||
|
.flatMap(cardType => this.deckInfo.cards[cardType].flatMap(card => {
|
||||||
|
let cardOut = {...JSON.parse(JSON.stringify(tts_templates['card'])),
|
||||||
|
Nickname: card.name,
|
||||||
|
Description: card.keywords,
|
||||||
|
CardID: index};
|
||||||
|
|
||||||
|
deckOut.ObjectStates[0].DeckIDs.push(
|
||||||
|
...Array(card.count || 1).fill(index));
|
||||||
|
index++;
|
||||||
|
|
||||||
|
if(card.back) {
|
||||||
|
cardOut.States = {
|
||||||
|
"2": {...JSON.parse(JSON.stringify(tts_templates['card'])),
|
||||||
|
Nickname: card.back.name,
|
||||||
|
Description: card.back.keywords,
|
||||||
|
CardID: index}};
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
return Array(card.count || 1).fill(cardOut);
|
||||||
|
}))
|
||||||
|
|
||||||
|
let cardCount = index - 100;
|
||||||
|
let columns = Math.ceil(Math.sqrt(cardCount));
|
||||||
|
Object.assign(
|
||||||
|
deckOut.ObjectStates[0].CustomDeck['1'],
|
||||||
|
{NumWidth: columns,
|
||||||
|
NumHeight: Math.ceil(cardCount / columns),
|
||||||
|
FaceURL: `${location.origin}/decks/${this.deckID}.png`,
|
||||||
|
BackURL: "http://cloud-3.steamusercontent.com/ugc/156906385556221451/CE2C3AFE1759790CB0B532FFD636D05A99EC91F4/"});
|
||||||
|
|
||||||
|
return deckOut;
|
||||||
|
},
|
||||||
|
|
||||||
upload() {
|
upload() {
|
||||||
this.uploading = true;
|
this.uploading = true;
|
||||||
|
|
||||||
|
@ -16,7 +16,6 @@ const app = express();
|
|||||||
app.use(express.json({limit: '50mb'}));
|
app.use(express.json({limit: '50mb'}));
|
||||||
|
|
||||||
app.use('/template', express.static('template'));
|
app.use('/template', express.static('template'));
|
||||||
app.get('/decks/:deckID.tts.json', getTTSJSON);
|
|
||||||
app.get('/decks/:deckID.json', getInputJSON);
|
app.get('/decks/:deckID.json', getInputJSON);
|
||||||
app.get('/decks/:deckID.png', getDeckImage);
|
app.get('/decks/:deckID.png', getDeckImage);
|
||||||
app.get('/decks.json', getDecksList);
|
app.get('/decks.json', getDecksList);
|
||||||
@ -45,54 +44,6 @@ function getDeckImage(req, res) {
|
|||||||
.catch(err => res.status(404).end());
|
.catch(err => res.status(404).end());
|
||||||
}
|
}
|
||||||
|
|
||||||
function getTTSJSON(req, res) {
|
|
||||||
// TODO: fix
|
|
||||||
db.findOne({_id: req.params.deckID})
|
|
||||||
.then(doc => {
|
|
||||||
let deckIn = doc.deck;
|
|
||||||
const cardTemplate = fs.readFileSync(__dirname + '/template/card.json');
|
|
||||||
const template = JSON.parse(fs.readFileSync(__dirname + `/template/${deckIn.type}/input.json`));
|
|
||||||
const cardCount = Object.entries(template.cardTypes)
|
|
||||||
.map(ct => deckIn[ct[0]].length * (ct[1].back ? 2 : 1))
|
|
||||||
.reduce((sum, current) => sum + current, 0);
|
|
||||||
|
|
||||||
let deckOut = JSON.parse(fs.readFileSync(__dirname + '/template/deck.json'));
|
|
||||||
deckOut.ObjectStates[0].Nickname = deckIn.meta.name;
|
|
||||||
|
|
||||||
Object.assign(deckOut.ObjectStates[0].CustomDeck['1'],
|
|
||||||
{NumWidth: Math.ceil(Math.sqrt(cardCount)),
|
|
||||||
NumHeight: Math.ceil(cardCount/Math.ceil(Math.sqrt(cardCount))),
|
|
||||||
FaceURL: `http://${req.headers.host}/decks/${doc.meta.name}.png`,
|
|
||||||
BackURL: "http://cloud-3.steamusercontent.com/ugc/156906385556221451/CE2C3AFE1759790CB0B532FFD636D05A99EC91F4/"});
|
|
||||||
|
|
||||||
let index = 100;
|
|
||||||
deckOut.ObjectStates[0].ContainedObjects = Object
|
|
||||||
.keys(deckIn)
|
|
||||||
.filter(cardType => cardType !== 'meta')
|
|
||||||
.map(cardType => deckIn[cardType].map((card, index) => {
|
|
||||||
let cardOut = {...JSON.parse(cardTemplate),
|
|
||||||
Nickname: card.name,
|
|
||||||
Description: card.keywords,
|
|
||||||
CardID: index};
|
|
||||||
|
|
||||||
deckOut.ObjectStates[0].DeckIDs.push(...Array(card.count || 1).fill(index));
|
|
||||||
index++;
|
|
||||||
|
|
||||||
if(card.back) {
|
|
||||||
cardOut.States = {"2": {...JSON.parse(cardTemplate),
|
|
||||||
Nickname: card.back.name,
|
|
||||||
Description: card.back.keywords,
|
|
||||||
CardID: index}};
|
|
||||||
index++;
|
|
||||||
}
|
|
||||||
return cardOut;
|
|
||||||
}))
|
|
||||||
.reduce((sum, cur) => sum.concat(cur), []); // flatten
|
|
||||||
|
|
||||||
res.json(deckOut);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function handleUpload(req, res) {
|
function handleUpload(req, res) {
|
||||||
const json = req.body;
|
const json = req.body;
|
||||||
console.log("Got deck upload!");
|
console.log("Got deck upload!");
|
||||||
|
Loading…
Reference in New Issue
Block a user