Merge pull request #384 from argonui/token-arranger
Token Arranger: added option to include drawn tokens
This commit is contained in:
commit
aab10ba7de
@ -1 +1 @@
|
||||
{"percentage":false,"tokenPrecedence":{"":[0,11],"Auto-fail":[-100,7],"Bless":[101,8],"Cultist":[-2,4],"Curse":[-101,9],"Elder Sign":[100,2],"Elder Thing":[-4,6],"Frost":[-99,10],"Skull":[-1,3],"Tablet":[-3,5]}}
|
||||
{"includeDrawnTokens":true,"percentage":false,"tokenPrecedence":{"":[0,11],"Auto-fail":[-100,7],"Bless":[101,8],"Cultist":[-2,4],"Curse":[-101,9],"Elder Sign":[100,2],"Elder Thing":[-4,6],"Frost":[-99,10],"Skull":[-1,3],"Tablet":[-3,5]}}
|
||||
|
@ -26,12 +26,13 @@ percentageLabel.width = 0
|
||||
percentageLabel.height = 0
|
||||
|
||||
-- variables with save function
|
||||
local tokenPrecedence = {}
|
||||
local percentage = false
|
||||
local tokenPrecedence = {}
|
||||
local percentage = false
|
||||
local includeDrawnTokens = true
|
||||
|
||||
-- variables without save function
|
||||
local updating = false
|
||||
local TOKEN_NAMES = {
|
||||
local updating = false
|
||||
local TOKEN_NAMES = {
|
||||
"Elder Sign",
|
||||
"Skull",
|
||||
"Cultist",
|
||||
@ -47,17 +48,19 @@ local TOKEN_NAMES = {
|
||||
-- saving the precedence settings and information on the most recently loaded data
|
||||
function onSave()
|
||||
return JSON.encode({
|
||||
tokenPrecedence = tokenPrecedence,
|
||||
percentage = percentage
|
||||
tokenPrecedence = tokenPrecedence,
|
||||
percentage = percentage,
|
||||
includeDrawnTokens = includeDrawnTokens
|
||||
})
|
||||
end
|
||||
|
||||
-- loading data, button creation and initial layouting
|
||||
function onLoad(saveState)
|
||||
if saveState ~= nil and saveState ~= "" then
|
||||
local loadedData = JSON.decode(saveState)
|
||||
tokenPrecedence = loadedData.tokenPrecedence
|
||||
percentage = loadedData.percentage
|
||||
local loadedData = JSON.decode(saveState)
|
||||
tokenPrecedence = loadedData.tokenPrecedence
|
||||
percentage = loadedData.percentage
|
||||
includeDrawnTokens = loadedData.includeDrawnTokens
|
||||
else
|
||||
loadDefaultValues()
|
||||
|
||||
@ -74,7 +77,14 @@ function onLoad(saveState)
|
||||
layout()
|
||||
end)
|
||||
|
||||
self.addContextMenuItem("Toggle percentages", function()
|
||||
self.addContextMenuItem("Include drawn tokens", function()
|
||||
includeDrawnTokens = not includeDrawnTokens
|
||||
local text = includeDrawnTokens and " " or " not "
|
||||
broadcastToAll("Token Arranger will" .. text .. "include currently drawn chaos tokens.", "Orange")
|
||||
layout()
|
||||
end)
|
||||
|
||||
self.addContextMenuItem("Toggle percentages", function()
|
||||
if percentage then
|
||||
percentage = false
|
||||
else
|
||||
@ -84,7 +94,7 @@ function onLoad(saveState)
|
||||
layout()
|
||||
end)
|
||||
|
||||
self.addContextMenuItem("Toggle cumulative", function()
|
||||
self.addContextMenuItem("Toggle cumulative", function()
|
||||
if percentage == "cumulative" then
|
||||
percentage = "basic"
|
||||
else
|
||||
@ -156,7 +166,7 @@ function createButtonsAndInputs()
|
||||
inputParameters.position = { pos.x[1] + offset, 0.1, pos.z + i * offset }
|
||||
else
|
||||
buttonParameters.position = { pos.x[2], 0, pos.z + (i - 5) * offset }
|
||||
inputParameters.position = { pos.x[2] + offset, 0.1, pos.z + (i - 5) * offset }
|
||||
inputParameters.position = { pos.x[2] + offset, 0.1, pos.z + (i - 5) * offset }
|
||||
end
|
||||
|
||||
buttonParameters.click_function = "tokenClick" .. i
|
||||
@ -226,23 +236,23 @@ function createPercentageButton(tokenCount, valueCount, tokenName)
|
||||
local startPos = Vector(2.3, -0.05, 0.875 * valueCount)
|
||||
|
||||
if percentage == "cumulative" then
|
||||
percentageLabel.scale = {1.5, 1.5, 1.5}
|
||||
percentageLabel.scale = { 1.5, 1.5, 1.5 }
|
||||
percentageLabel.position = startPos - Vector(0, 0, 2.85)
|
||||
else
|
||||
percentageLabel.scale = {2, 2, 2}
|
||||
percentageLabel.scale = { 2, 2, 2 }
|
||||
percentageLabel.position = startPos - Vector(0, 0, 2.675)
|
||||
end
|
||||
|
||||
-- determine font_color
|
||||
if tokenName == "Elder Sign" then
|
||||
percentageLabel.font_color = {0.35, 0.71, 0.85}
|
||||
percentageLabel.font_color = { 0.35, 0.71, 0.85 }
|
||||
elseif tokenName == "Auto-fail" then
|
||||
percentageLabel.font_color = {0.86, 0.1, 0.1}
|
||||
-- check if the tokenName contains letters (e.g. symbol token)
|
||||
percentageLabel.font_color = { 0.86, 0.1, 0.1 }
|
||||
-- check if the tokenName contains letters (e.g. symbol token)
|
||||
elseif string.match(tokenName, "%a") ~= nil then
|
||||
percentageLabel.font_color = {0.68, 0.53, 0.86}
|
||||
percentageLabel.font_color = { 0.68, 0.53, 0.86 }
|
||||
else
|
||||
percentageLabel.font_color = {0.85, 0.67, 0.33}
|
||||
percentageLabel.font_color = { 0.85, 0.67, 0.33 }
|
||||
end
|
||||
|
||||
-- create label for base percentage
|
||||
@ -253,8 +263,8 @@ function createPercentageButton(tokenCount, valueCount, tokenName)
|
||||
-- optionally create label for cumulative percentage
|
||||
if percentage == "cumulative" then
|
||||
percentageLabel.position = startPos - Vector(0, 0, 2.45)
|
||||
percentageLabel.font_color = {1, 1, 1}
|
||||
|
||||
percentageLabel.font_color = { 1, 1, 1 }
|
||||
|
||||
-- only display one digit for 100%
|
||||
if tokenCount.sum == tokenCount.total then
|
||||
percentageLabel.label = "100.0%"
|
||||
@ -278,7 +288,7 @@ function layout(_, _, isRightClick)
|
||||
return
|
||||
end
|
||||
|
||||
-- get ChaosBag and stop if not found
|
||||
-- get ChaosBag and stop if not found
|
||||
local chaosBag = chaosBagApi.findChaosBag()
|
||||
if not chaosBag then
|
||||
updating = false
|
||||
@ -286,8 +296,18 @@ function layout(_, _, isRightClick)
|
||||
end
|
||||
|
||||
-- clone tokens from chaos bag (default position above trash can)
|
||||
local rawData = chaosBag.getData().ContainedObjects
|
||||
|
||||
-- optionally get the data for tokens in play
|
||||
if includeDrawnTokens then
|
||||
for _, token in pairs(chaosBagApi.getTokensInPlay()) do
|
||||
if token ~= nil then table.insert(rawData, token.getData()) end
|
||||
end
|
||||
end
|
||||
|
||||
-- generate layout data
|
||||
local data = {}
|
||||
for i, objData in ipairs(chaosBag.getData().ContainedObjects) do
|
||||
for i, objData in ipairs(rawData) do
|
||||
objData["Tags"] = { "tempToken" }
|
||||
local value = tonumber(objData.Nickname)
|
||||
local precedence = tokenPrecedence[objData.Nickname]
|
||||
@ -316,7 +336,7 @@ function layout(_, _, isRightClick)
|
||||
local rotation = self.getRotation()
|
||||
local currentValue = data[1].value
|
||||
local tokenCount = { row = 0, sum = 0, total = #data }
|
||||
local valueCount = 1
|
||||
local valueCount = 1
|
||||
local tokenName = false
|
||||
|
||||
for i, item in ipairs(data) do
|
||||
@ -327,10 +347,10 @@ function layout(_, _, isRightClick)
|
||||
createPercentageButton(tokenCount, valueCount, tokenName)
|
||||
end
|
||||
|
||||
location.x = location.x - 1.75
|
||||
location.z = pos.z
|
||||
currentValue = item.value
|
||||
valueCount = valueCount + 1
|
||||
location.x = location.x - 1.75
|
||||
location.z = pos.z
|
||||
currentValue = item.value
|
||||
valueCount = valueCount + 1
|
||||
tokenCount.row = 0
|
||||
end
|
||||
|
||||
@ -339,7 +359,7 @@ function layout(_, _, isRightClick)
|
||||
position = location,
|
||||
rotation = rotation
|
||||
})
|
||||
tokenName = item.token.Nickname
|
||||
tokenName = item.token.Nickname
|
||||
location.z = location.z - 1.75
|
||||
tokenCount.row = tokenCount.row + 1
|
||||
end
|
||||
|
@ -23,6 +23,11 @@ do
|
||||
return Global.call("findChaosBag")
|
||||
end
|
||||
|
||||
-- returns a table of object references to the tokens in play (does not include sealed tokens!)
|
||||
ChaosBagApi.getTokensInPlay = function()
|
||||
return Global.getTable("chaosTokens")
|
||||
end
|
||||
|
||||
-- returns all sealed tokens on cards to the chaos bag
|
||||
ChaosBagApi.releaseAllSealedTokens = function(playerColor)
|
||||
return Global.call("releaseAllSealedTokens", playerColor)
|
||||
|
@ -32,8 +32,10 @@ local NOT_INTERACTABLE = {
|
||||
"975c39", -- vertical border right
|
||||
}
|
||||
|
||||
local chaosTokens = {}
|
||||
-- global variable for access
|
||||
chaosTokens = {}
|
||||
local chaosTokensLastMat = nil
|
||||
|
||||
local bagSearchers = {}
|
||||
local MAT_COLORS = {"White", "Orange", "Green", "Red"}
|
||||
local hideTitleSplashWaitFunctionId = nil
|
||||
|
Loading…
Reference in New Issue
Block a user