Merge branch 'main' into featured-and-notes
This commit is contained in:
commit
76f9f51894
@ -49,6 +49,12 @@ local BACKGROUNDS = {
|
|||||||
fontcolor = { 1, 1, 1 },
|
fontcolor = { 1, 1, 1 },
|
||||||
icons = false
|
icons = false
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
title = "Hunting Jacket",
|
||||||
|
url = "http://cloud-3.steamusercontent.com/ugc/2450601762292308846/0E171E3F3F0D016EEC574F3CA25738A46D95595C/",
|
||||||
|
fontcolor = { 1, 1, 1 },
|
||||||
|
icons = false
|
||||||
|
},
|
||||||
{
|
{
|
||||||
title = "Ikiaq",
|
title = "Ikiaq",
|
||||||
url = "http://cloud-3.steamusercontent.com/ugc/2021606446228198966/5A408D8D760221DEA164E986B9BE1F79C4803071/",
|
url = "http://cloud-3.steamusercontent.com/ugc/2021606446228198966/5A408D8D760221DEA164E986B9BE1F79C4803071/",
|
||||||
@ -110,6 +116,7 @@ function onLoad(savedData)
|
|||||||
printToColor("Show skill icons of cards: " .. tostring(showIcons), color, "White")
|
printToColor("Show skill icons of cards: " .. tostring(showIcons), color, "White")
|
||||||
refresh()
|
refresh()
|
||||||
end)
|
end)
|
||||||
|
self.addContextMenuItem("Draw all cards", function(color) self.deal(self.getQuantity(), color) end)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- gets the font color based on background url
|
-- gets the font color based on background url
|
||||||
@ -232,38 +239,30 @@ end
|
|||||||
|
|
||||||
-- gets cost and icons for a card
|
-- gets cost and icons for a card
|
||||||
function findCard(guid, name, GMNotes)
|
function findCard(guid, name, GMNotes)
|
||||||
local icons = {}
|
|
||||||
local metadata = JSON.decode(GMNotes) or {}
|
local metadata = JSON.decode(GMNotes) or {}
|
||||||
local buttonLabel = name or "unnamed"
|
local buttonLabel = name or "unnamed"
|
||||||
|
local hasIcons = false
|
||||||
|
|
||||||
if metadata.cost then
|
if metadata.cost then
|
||||||
buttonLabel = "[" .. metadata.cost .. "] " .. buttonLabel
|
buttonLabel = "[" .. metadata.cost .. "] " .. buttonLabel
|
||||||
end
|
end
|
||||||
|
|
||||||
if showIcons then
|
if showIcons then
|
||||||
if metadata ~= {} then
|
local iconTypes = { "Wild", "Willpower", "Intellect", "Combat", "Agility" }
|
||||||
icons[1] = metadata.wildIcons
|
for _, iconName in ipairs(iconTypes) do
|
||||||
icons[2] = metadata.willpowerIcons
|
local mdName = string.lower(iconName) .. "Icons"
|
||||||
icons[3] = metadata.intellectIcons
|
if metadata[mdName] ~= nil then
|
||||||
icons[4] = metadata.combatIcons
|
if hasIcons == false then
|
||||||
icons[5] = metadata.agilityIcons
|
|
||||||
end
|
|
||||||
|
|
||||||
local IconTypes = { "Wild", "Willpower", "Intellect", "Combat", "Agility" }
|
|
||||||
local found = false
|
|
||||||
for i = 1, 5 do
|
|
||||||
if icons[i] ~= nil and icons[i] ~= "" then
|
|
||||||
if found == false then
|
|
||||||
buttonLabel = buttonLabel .. "\n"
|
buttonLabel = buttonLabel .. "\n"
|
||||||
found = true
|
hasIcons = true
|
||||||
else
|
else
|
||||||
buttonLabel = buttonLabel .. " "
|
buttonLabel = buttonLabel .. " "
|
||||||
end
|
end
|
||||||
buttonLabel = buttonLabel .. IconTypes[i] .. ": " .. icons[i]
|
buttonLabel = buttonLabel .. iconName .. ": " .. metadata[mdName]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
table.insert(cardsInBag, { buttonLabel = buttonLabel, hasIcons = (#icons > 0), name = name, guid = guid })
|
table.insert(cardsInBag, { buttonLabel = buttonLabel, hasIcons = hasIcons, name = name, guid = guid })
|
||||||
end
|
end
|
||||||
|
|
||||||
-- recreates buttons with up-to-date labels
|
-- recreates buttons with up-to-date labels
|
||||||
|
@ -33,8 +33,8 @@ Spawner.spawnCards = function(cardList, pos, rot, sort, callback)
|
|||||||
table.insert(standardCards, card)
|
table.insert(standardCards, card)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- Spawn each of the three types individually. Each Y position shift accounts for the thickness
|
|
||||||
-- of the spawned deck
|
-- Spawn each of the three types individually. Y position accounts for the thickness of the spawned deck
|
||||||
local position = { x = pos.x, y = pos.y, z = pos.z }
|
local position = { x = pos.x, y = pos.y, z = pos.z }
|
||||||
Spawner.spawn(investigatorCards, position, rot, callback)
|
Spawner.spawn(investigatorCards, position, rot, callback)
|
||||||
|
|
||||||
@ -90,25 +90,18 @@ Spawner.spawn = function(cardList, pos, rot, callback)
|
|||||||
if cardList[1].data.SidewaysCard then
|
if cardList[1].data.SidewaysCard then
|
||||||
rot = { rot.x, rot.y - 90, rot.z }
|
rot = { rot.x, rot.y - 90, rot.z }
|
||||||
end
|
end
|
||||||
spawnObjectData({
|
return spawnObjectData({
|
||||||
data = cardList[1].data,
|
data = cardList[1].data,
|
||||||
position = pos,
|
position = pos,
|
||||||
rotation = rot,
|
rotation = rot,
|
||||||
callback_function = callback
|
callback_function = callback
|
||||||
})
|
})
|
||||||
return
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- For multiple cards, construct a deck and spawn that
|
-- For multiple cards, construct a deck and spawn that
|
||||||
local deck = Spawner.buildDeckDataTemplate()
|
local deckScaleX = cardList[1].data.Transform.scaleX
|
||||||
|
local deckScaleZ = cardList[1].data.Transform.scaleZ
|
||||||
-- Decks won't inherently scale to the cards in them. The card list being spawned should be all
|
local deck = Spawner.buildDeckDataTemplate(deckScaleX, deckScaleZ)
|
||||||
-- the same type/size by this point, so use the first card to set the size
|
|
||||||
deck.Transform = {
|
|
||||||
scaleX = cardList[1].data.Transform.scaleX,
|
|
||||||
scaleY = 1,
|
|
||||||
scaleZ = cardList[1].data.Transform.scaleZ
|
|
||||||
}
|
|
||||||
|
|
||||||
local sidewaysDeck = true
|
local sidewaysDeck = true
|
||||||
for _, spawnCard in ipairs(cardList) do
|
for _, spawnCard in ipairs(cardList) do
|
||||||
@ -123,7 +116,7 @@ Spawner.spawn = function(cardList, pos, rot, callback)
|
|||||||
rot = { rot.x, rot.y - 90, rot.z }
|
rot = { rot.x, rot.y - 90, rot.z }
|
||||||
end
|
end
|
||||||
|
|
||||||
spawnObjectData({
|
return spawnObjectData({
|
||||||
data = deck,
|
data = deck,
|
||||||
position = pos,
|
position = pos,
|
||||||
rotation = rot,
|
rotation = rot,
|
||||||
@ -176,7 +169,7 @@ end
|
|||||||
-- creates a new table on each call without using metatables or previous
|
-- creates a new table on each call without using metatables or previous
|
||||||
-- definitions because we can't be sure that TTS doesn't modify the structure
|
-- definitions because we can't be sure that TTS doesn't modify the structure
|
||||||
---@return table deck Table containing the minimal TTS deck data structure
|
---@return table deck Table containing the minimal TTS deck data structure
|
||||||
Spawner.buildDeckDataTemplate = function()
|
Spawner.buildDeckDataTemplate = function(deckScaleX, deckScaleZ)
|
||||||
local deck = {}
|
local deck = {}
|
||||||
deck.Name = "Deck"
|
deck.Name = "Deck"
|
||||||
|
|
||||||
@ -186,10 +179,12 @@ Spawner.buildDeckDataTemplate = function()
|
|||||||
deck.CustomDeck = {}
|
deck.CustomDeck = {}
|
||||||
|
|
||||||
-- Transform is required, Position and Rotation will be overridden by the spawn call so can be omitted here
|
-- Transform is required, Position and Rotation will be overridden by the spawn call so can be omitted here
|
||||||
|
-- Decks won't inherently scale to the cards in them. The card list being spawned should be all
|
||||||
|
-- the same type/size by this point, so use the first card to set the size
|
||||||
deck.Transform = {
|
deck.Transform = {
|
||||||
scaleX = 1,
|
scaleX = deckScaleX or 1,
|
||||||
scaleY = 1,
|
scaleY = 1,
|
||||||
scaleZ = 1,
|
scaleZ = deckScaleZ or 1,
|
||||||
}
|
}
|
||||||
|
|
||||||
return deck
|
return deck
|
||||||
|
@ -887,8 +887,15 @@ function maybeUpdateActiveInvestigator(card)
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
-- set proper scale for the card
|
-- set proper scale for investigators
|
||||||
card.setScale({1.15, 1, 1.15})
|
local cardData = card.getData()
|
||||||
|
if cardData["SidewaysCard"] == true then
|
||||||
|
-- 115% for easier readability
|
||||||
|
card.setScale({ 1.15, 1, 1.15 })
|
||||||
|
else
|
||||||
|
-- Zoop-exported investigators are horizontal cards and TTS scales them differently
|
||||||
|
card.setScale({ 0.8214, 1, 0.8214 })
|
||||||
|
end
|
||||||
|
|
||||||
-- remove old action tokens
|
-- remove old action tokens
|
||||||
for _, obj in ipairs(searchAroundSelf("isUniversalToken")) do
|
for _, obj in ipairs(searchAroundSelf("isUniversalToken")) do
|
||||||
|
Loading…
x
Reference in New Issue
Block a user