Skip to content

Instantly share code, notes, and snippets.

@capoferro
Last active April 11, 2018 18:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save capoferro/9c9271250bee79432269ffce6a1a381f to your computer and use it in GitHub Desktop.
Save capoferro/9c9271250bee79432269ffce6a1a381f to your computer and use it in GitHub Desktop.
import { cardText } from "../config/cardText";
import fileDownload from "js-file-download";
import { cardTypeIDs, setIDs, warbandLookup } from "../config/dataMapping";
const createSave = ObjectStates => {
return {
SaveName: "",
GameMode: "",
Date: "",
Table: "",
Sky: "",
Note: "",
Rules: "",
PlayerTurn: "",
LuaScript: "",
LuaScriptState: "",
ObjectStates,
TabStates: {}
};
};
const createBag = (Nickname, ContainedObjects) => {
return {
Name: "Bag",
Transform: {
posX: 0.943,
posY: 0.921,
posZ: 0.116,
rotX: 0.291,
rotY: 180,
rotZ: 0.976,
scaleX: 1,
scaleY: 1,
scaleZ: 1
},
Nickname,
Description: "Created on UDeck.net",
ColorDiffuse: {
r: 0.129,
g: 0.694,
b: 0.607
},
Locked: false,
Grid: true,
Snap: true,
Autoraise: true,
Sticky: true,
Tooltip: true,
MaterialIndex: -1,
MeshIndex: -1,
LuaScript: "",
LuaScriptState: "",
ContainedObjects,
GUID: generateGuid()
};
};
const createCustomDeck = (FaceURL, BackURL) => {
return {
FaceURL,
BackURL,
NumWidth: 10,
NumHeight: 7,
BackIsHidden: true,
UniqueBack: false
};
};
const backURLForType = type => {
switch (type) {
case 20:
return "https://i.imgur.com/cY17VyR.jpg";
default:
return "https://i.imgur.com/PRQPDVL.jpg";
}
};
const objectiveBack = backURLForType(20);
const powerBack = backURLForType(21);
const customDecks = {
"9": createCustomDeck("https://i.imgur.com/odlIYo7.jpg", objectiveBack),
"29": createCustomDeck("https://i.imgur.com/V2Ig1BY.jpg", powerBack),
"38": createCustomDeck("https://i.imgur.com/EfIEALg.jpg", objectiveBack),
"58": createCustomDeck("https://i.imgur.com/lGMMIUl.jpg", powerBack),
"67": createCustomDeck("https://i.imgur.com/eDPbBHA.jpg", objectiveBack),
"87": createCustomDeck("https://i.imgur.com/VUDC895.jpg", powerBack),
"96": createCustomDeck("https://i.imgur.com/ZVxi7qo.jpg", objectiveBack),
"116": createCustomDeck("https://i.imgur.com/M9Jh5Of.jpg", powerBack),
"125": createCustomDeck("https://i.imgur.com/yFjtfOr.jpg", objectiveBack),
"145": createCustomDeck("https://i.imgur.com/WfLv8pV.jpg", powerBack),
"154": createCustomDeck("https://i.imgur.com/QnTkIxr.jpg", objectiveBack),
"174": createCustomDeck("https://i.imgur.com/DlpgUQQ.jpg", powerBack),
"183": createCustomDeck("https://i.imgur.com/ui0unAM.jpg", objectiveBack),
"203": createCustomDeck("https://i.imgur.com/Y7ufKxS.jpg", powerBack),
"212": createCustomDeck("https://i.imgur.com/36lnVLk.jpg", objectiveBack),
"232": createCustomDeck("https://i.imgur.com/fsSPViP.jpg", powerBack),
"272": createCustomDeck("https://i.imgur.com/oy0yzep.jpg", objectiveBack),
"307": createCustomDeck("https://i.imgur.com/6vMA1oC.jpg", objectiveBack),
"377": createCustomDeck("https://i.imgur.com/OsJQvqP.jpg", powerBack),
"438": createCustomDeck("https://i.imgur.com/0Exfg9k.jpg", powerBack)
};
const createDeck = (name, cards) => {
let CustomDeck = customDecks;
for (let i = 0; i < cards.length; i++) {
const c = cards[i];
c.CardID = i;
}
let DeckIDs = [];
var i = 0;
let ContainedObjects = cards.map(c => {
let x = createCard(c);
DeckIDs.push(x.CardID);
return x;
});
return {
Name: "Deck",
Transform: {
posX: 0,
posY: 0,
posZ: 0,
rotX: 0,
rotY: 180.0,
rotZ: 180.0,
scaleX: 1.15,
scaleY: 1.0,
scaleZ: 1.15
},
Nickname: "Cards",
Description: "",
ColorDiffuse: {
r: 0.713235259,
g: 0.713235259,
b: 0.713235259
},
Locked: false,
Grid: true,
Snap: true,
Autoraise: true,
Sticky: true,
Tooltip: true,
SidewaysCard: false,
DeckIDs,
CustomDeck,
LuaScript: "",
LuaScriptState: "",
ContainedObjects,
GUID: generateGuid()
};
};
const createCard = card => {
let cardSlot = cardSlotForNumber(card.acf.card_number);
let CardID = parseInt(cardSlot[0], 10);
let Description = cardText[card.acf.card_number].description;
let Nickname = card.title.rendered;
return {
Name: "Card",
Transform: {
posX: 0.865,
posY: 0.534,
posZ: 0.59,
rotX: 0.184,
rotY: 0.674,
rotZ: 0.509,
scaleX: 1.42055011,
scaleY: 1.0,
scaleZ: 1.42055011
},
Nickname,
Description,
ColorDiffuse: {
r: 0.713235259,
g: 0.713235259,
b: 0.713235259
},
Locked: false,
Grid: true,
Snap: true,
Autoraise: true,
Sticky: true,
Tooltip: true,
CardID,
SidewaysCard: false,
CustomDeck: {},
LuaScript: "",
LuaScriptState: "",
GUID: generateGuid()
};
};
const slotNumber = number => {
return ("" + (number - 1)).padStart(2, "0");
};
const cardSlotForNumber = number => {
number = parseInt(number, 10);
if (number > 0 && number <= 9) {
return [9 + slotNumber(number), "https://i.imgur.com/odlIYo7.jpg"];
}
if (number > 9 && number <= 29) {
return [29 + slotNumber(number - 9), "https://i.imgur.com/V2Ig1BY.jpg"];
}
if (number > 29 && number <= 38) {
return [38 + slotNumber(number - 29), "https://i.imgur.com/EfIEALg.jpg"];
}
if (number > 38 && number <= 58) {
return [58 + slotNumber(number - 38), "https://i.imgur.com/lGMMIUl.jpg"];
}
if (number > 58 && number <= 67) {
return [67 + slotNumber(number - 58), "https://i.imgur.com/lGMMIUl.jpg"];
}
if (number > 67 && number <= 87) {
return [87 + slotNumber(number - 67), "https://i.imgur.com/VUDC895.jpg"];
}
if (number > 87 && number <= 96) {
return [96 + slotNumber(number - 87), "https://i.imgur.com/ZVxi7qo.jpg"];
}
if (number > 96 && number <= 116) {
return [116 + slotNumber(number - 96), "https://i.imgur.com/yFjtfOr.jpg"];
}
if (number > 116 && number <= 125) {
return [125 + slotNumber(number - 116), "https://i.imgur.com/M9Jh5Of.jpg"];
}
if (number > 125 && number <= 145) {
return [145 + slotNumber(number - 125), "https://i.imgur.com/WfLv8pV.jpg"];
}
if (number > 145 && number <= 154) {
return [154 + slotNumber(number - 145), "https://i.imgur.com/QnTkIxr.jpg"];
}
if (number > 154 && number <= 174) {
return [174 + slotNumber(number - 154), "https://i.imgur.com/DlpgUQQ.jpg"];
}
if (number > 174 && number <= 183) {
return [183 + slotNumber(number - 174), "https://i.imgur.com/ui0unAM.jpg"];
}
if (number > 183 && number <= 203) {
return [203 + slotNumber(number - 183), "https://i.imgur.com/Y7ufKxS.jpg"];
}
if (number > 203 && number <= 212) {
return [212 + slotNumber(number - 203), "https://i.imgur.com/36lnVLk.jpg"];
}
if (number > 212 && number <= 232) {
return [232 + slotNumber(number - 212), "https://i.imgur.com/fsSPViP.jpg"];
}
if (number > 232 && number <= 272) {
return [272 + slotNumber(number - 232), "https://i.imgur.com/oy0yzep.jpg"];
}
if (number > 272 && number <= 307) {
return [307 + slotNumber(number - 272), "https://i.imgur.com/oy0yzep.jpg"];
}
if (number > 307 && number <= 377) {
return [377 + slotNumber(number - 307), "https://i.imgur.com/OsJQvqP.jpg"];
}
if (number > 377) {
return [438 + slotNumber(number - 377), "https://i.imgur.com/0Exfg9k.jpg"];
}
};
const generateGuid = () => {
return "xxxxxx".replace(/x/g, function(c) {
var r = (Math.random() * 16) | 0,
v = c === "x" ? r : (r & 0x3) | 0x8;
return v.toString(16);
});
};
const deckToTtsSave = deck => {
let cards = deck.list;
let objectives = cards.filter(
c => c.card_types[0] === cardTypeIDs["objective"]
);
let power = cards.filter(c => c.card_types[0] !== cardTypeIDs["objective"]);
let items = [];
items.push(createDeck("Objectives", objectives), createDeck("Power", power));
return createSave([createBag(deck.name, items)]);
};
export const downloadTtsFile = deck => {
fileDownload(JSON.stringify(deckToTtsSave(deck)), deck.name + "_udeck.json");
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment