Last active
April 11, 2018 18:33
-
-
Save capoferro/9c9271250bee79432269ffce6a1a381f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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