Merge pull request #343 from argonui/tool-promotion

Tool promotion: Chaos Bag Manager and Token Arranger
This commit is contained in:
BootleggerFinn 2023-08-22 12:46:49 -05:00 committed by GitHub
commit 477db4dc84
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 72 additions and 122 deletions

View File

@ -3,7 +3,6 @@
"ComponentTags_path": "ComponentTags.json",
"CustomUIAssets_path": "CustomUIAssets.json",
"DecalPallet_path": "DecalPallet.json",
"Decals": [],
"GameComplexity": "",
"GameMode": "Arkham Horror LCG - Super Complete Edition",
"GameType": "",
@ -201,7 +200,9 @@
"NavigationOverlayHandler.797ede",
"CampaignImporterExporter.334ee3",
"Bloodborne-CityoftheUnseen.1e7a0b",
"TheColorOutofOz.806d9a"
"TheColorOutofOz.806d9a",
"TokenArranger.022907",
"ChaosBagManager.023240"
],
"PlayArea": 1,
"PlayerCounts": [

View File

@ -83,6 +83,10 @@
{
"displayed": "CameraZoom_ignore",
"normalized": "camerazoom_ignore"
},
{
"displayed": "TokenArranger",
"normalized": "tokenarranger"
}
]
}

View File

@ -32,7 +32,7 @@
"HideWhenFaceDown": false,
"IgnoreFoW": false,
"LayoutGroupSortIndex": 0,
"Locked": false,
"Locked": true,
"LuaScript": "require(\"accessories/ChaosBagManager\")",
"LuaScriptState": "",
"MeasureMovement": false,
@ -45,9 +45,9 @@
],
"Tooltip": true,
"Transform": {
"posX": 22.215,
"posY": 5.651,
"posZ": -34.811,
"posX": -66,
"posY": 1.531,
"posZ": -49.5,
"rotX": 0,
"rotY": 270,
"rotZ": 0,

View File

@ -1 +1 @@
{"acknowledgedUpgradeVersions":[],"optionPanel":{"cardLanguage":"en","playAreaSnapTags":true,"showAttachmentHelper":false,"showChaosBagManager":false,"showCleanUpHelper":false,"showCustomPlaymatImages":false,"showCYOA":false,"showDisplacementTool":false,"showDrawButton":false,"showHandHelper":[],"showSearchAssistant":[],"showTitleSplash":true,"showTokenArranger":false,"useClueClickers":false,"useSnapTags":true}}
{"acknowledgedUpgradeVersions":[],"optionPanel":{"cardLanguage":"en","playAreaSnapTags":true,"showAttachmentHelper":false,"showCleanUpHelper":false,"showCustomPlaymatImages":false,"showCYOA":false,"showDisplacementTool":false,"showDrawButton":false,"showHandHelper":[],"showSearchAssistant":[],"showTitleSplash":true,"useClueClickers":false,"useSnapTags":true}}

View File

@ -14,8 +14,6 @@
"r": 0.70588
},
"ContainedObjects_order": [
"ChaosBagManager.023240",
"TokenArranger.022907",
"CYOACampaignGuides.e87ea2",
"AttachmentHelper.7f4976",
"SearchAssistant.17aed0",

View File

@ -32,9 +32,9 @@
"HideWhenFaceDown": false,
"IgnoreFoW": false,
"LayoutGroupSortIndex": 0,
"Locked": false,
"Locked": true,
"LuaScript": "require(\"accessories/TokenArranger\")",
"LuaScriptState": "",
"LuaScriptState_path": "TokenArranger.022907.luascriptstate",
"MeasureMovement": false,
"Name": "Custom_Token",
"Nickname": "Token Arranger",
@ -46,7 +46,7 @@
"Tooltip": true,
"Transform": {
"posX": -42.3,
"posY": 1.53,
"posY": 1.531,
"posZ": -46.5,
"rotX": 0,
"rotY": 270,

View File

@ -0,0 +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]}}

View File

@ -59,7 +59,6 @@ function onLoad(saveState)
end
createButtonsAndInputs(true)
layout()
-- context menu items
self.addContextMenuItem("Load default values", function()
@ -73,8 +72,7 @@ function onLoad(saveState)
percentage = false
else
percentage = "basic"
broadcastToAll("Percentages are unreliable when using tokens that draw other tokens (bless or curse for example).",
"Yellow")
broadcastToAll("Percentages are unreliable when using tokens that draw other tokens (bless or curse for example).", "Yellow")
end
layout()
end)
@ -85,8 +83,7 @@ function onLoad(saveState)
else
percentage = "cumulative"
end
broadcastToAll("Percentages are unreliable when using tokens that draw other tokens (bless or curse for example).",
"Yellow")
broadcastToAll("Percentages are unreliable when using tokens that draw other tokens (bless or curse for example).", "Yellow")
layout()
end)
end
@ -228,51 +225,54 @@ function deleteCopiedTokens()
createButtonsAndInputs()
end
-- creates percentage representation buttons
function createPercentageButton(basePercentage, valueCount, tokenName, cumulativePercentage)
local buttonScale, offset, textColor, labelString
-- creates buttons as labels as display for percentage values
function createPercentageButton(tokenCount, valueCount, tokenName)
-- parameters for button creation
local percentageLabel = {}
percentageLabel.click_function = "none"
percentageLabel.width = 0
percentageLabel.height = 0
local startPos = Vector(2.3, -0.05, 0.875 * valueCount)
if percentage == "cumulative" then
buttonScale = {1.5, 1.5, 1.5}
offset = -2.85
percentageLabel.scale = {1.5, 1.5, 1.5}
percentageLabel.position = startPos - Vector(0, 0, 2.85)
else
buttonScale = {2, 2, 2}
offset = -2.675
percentageLabel.scale = {2, 2, 2}
percentageLabel.position = startPos - Vector(0, 0, 2.675)
end
-- if this is a cumulative button (bottom one of the two created buttons)
if cumulativePercentage then
offset = -2.45
textColor = {1, 1, 1}
-- determine font_color
if tokenName == "Elder Sign" then
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)
elseif string.match(tokenName, "%a") ~= nil then
percentageLabel.font_color = {0.68, 0.53, 0.86}
else
percentageLabel.font_color = {0.85, 0.67, 0.33}
end
-- create label for base percentage
local basePercentage = math.floor((tokenCount.row / tokenCount.total) * 10000) / 100
percentageLabel.label = string.format("%s", string.format("%05.2f", basePercentage) .. "%")
self.createButton(percentageLabel)
-- optionally create label for cumulative percentage
if percentage == "cumulative" then
percentageLabel.position = startPos - Vector(0, 0, 2.45)
percentageLabel.font_color = {1, 1, 1}
-- only display one digit for 100%
if cumulativePercentage == 100 then
labelString = string.format("%s", string.format("%05.1f", cumulativePercentage) .. "%")
if tokenCount.sum == tokenCount.total then
percentageLabel.label = "100.0%"
else
labelString = string.format("%s", string.format("%05.2f", cumulativePercentage) .. "%")
end
else
labelString = string.format("%s", string.format("%05.2f", basePercentage) .. "%")
if tokenName == "Elder Sign" then
textColor = {0.35, 0.71, 0.85}
elseif tokenName == "Auto-fail" then
textColor = {0.86, 0.1, 0.1}
elseif tokenName then
textColor = {0.68, 0.53, 0.86}
else
textColor = {0.85, 0.67, 0.33}
local cumulativePercentage = math.floor((tokenCount.sum / tokenCount.total) * 10000) / 100
percentageLabel.label = string.format("%s", string.format("%05.2f", cumulativePercentage) .. "%")
end
self.createButton(percentageLabel)
end
self.createButton({
label = labelString,
click_function = "none",
width = 0,
height = 0,
scale = buttonScale,
font_color = textColor,
position = Vector(2.3, -0.05, offset + 0.875 * valueCount)
})
end
-- main function (delete old tokens, clone chaos bag content, sort it and position it)
@ -293,14 +293,13 @@ function layout(_, _, isRightClick)
-- clone tokens from chaos bag (default position above trash can)
for i, obj in ipairs(chaosBag.getData().ContainedObjects) do
obj["Tags"] = { "tempToken" }
local value = tonumber(obj.Nickname)
local precedence = tokenPrecedence[obj.Nickname]
local spawnedObj = spawnObjectData({
data = obj,
position = { 0.49, 3, 0 }
})
local value = tonumber(obj.Nickname)
local precedence = tokenPrecedence[obj.Nickname]
data[i] = {
token = spawnedObj,
value = value or precedence[1]
@ -323,50 +322,37 @@ function layout(_, _, isRightClick)
local location = { x = pos.x, y = pos.y, z = pos.z }
local currentValue = data[1].value
local tokenCount = 0
local tokenCount = { row = 0, sum = 0, total = #data }
local valueCount = 1
local cumulativePercentage = 0
local tokenName = false
for _, item in ipairs(data) do
for i, item in ipairs(data) do
-- this is true for the first token in a new row
if item.value ~= currentValue then
if percentage then
local basePercentage = math.floor((tokenCount / #data) * 10000) / 100
createPercentageButton(basePercentage, valueCount, tokenName)
if percentage == "cumulative" then
cumulativePercentage = cumulativePercentage + basePercentage
createPercentageButton(basePercentage, valueCount, tokenName, cumulativePercentage)
end
tokenCount.sum = tokenCount.sum + tokenCount.row
createPercentageButton(tokenCount, valueCount, tokenName)
end
location.x = location.x - 1.75
location.z = pos.z
currentValue = item.value
valueCount = valueCount + 1
tokenCount = 0
location.x = location.x - 1.75
location.z = pos.z
currentValue = item.value
valueCount = valueCount + 1
tokenCount.row = 0
end
item.token.setPosition(location)
item.token.setRotation(self.getRotation())
item.token.setLock(true)
location.z = location.z - 1.75
tokenCount = tokenCount + 1
tokenName = item.token.getName()
-- set tokenName to false if it does not contain letters
-- tokenName is used by `createPercentageButton()` to determine the textcolor for percentages
if string.match(tokenName, "%a") == nil then
tokenName = false
end
tokenCount.row = tokenCount.row + 1
end
-- this is repeated to create the button for the last token
if percentage then
local basePercentage = math.floor((tokenCount / #data) * 10000) / 100
createPercentageButton(basePercentage, valueCount, tokenName)
if percentage == "cumulative" then
cumulativePercentage = cumulativePercentage + basePercentage
createPercentageButton(basePercentage, valueCount, tokenName, cumulativePercentage)
end
tokenCount.sum = tokenCount.sum + tokenCount.row
createPercentageButton(tokenCount, valueCount, tokenName)
end
-- introducing a small delay to limit update calls

View File

@ -951,10 +951,6 @@ function applyOptionPanelChange(id, state)
elseif id == "showTitleSplash" then
optionPanel[id] = state
-- option: Show token arranger
elseif id == "showTokenArranger" then
optionPanel[id] = spawnOrRemoveHelper(state, "Token Arranger", {-42.3, 1.6, -46.5})
-- option: Show clean up helper
elseif id == "showCleanUpHelper" then
optionPanel[id] = spawnOrRemoveHelper(state, "Clean Up Helper", {-66, 1.6, 46})
@ -975,10 +971,6 @@ function applyOptionPanelChange(id, state)
optionPanel[id][i] = spawnOrRemoveHelper(state, "Search Assistant", pos, rot)
end
-- option: Show chaos bag manager
elseif id == "showChaosBagManager" then
optionPanel[id] = spawnOrRemoveHelper(state, "Chaos Bag Manager", {-66, 1.6, -49.5})
-- option: Show attachment helper
elseif id == "showAttachmentHelper" then
optionPanel[id] = spawnOrRemoveHelper(state, "Attachment Helper", {-62, 1.4, 0})
@ -1049,11 +1041,9 @@ end
function removeHelperObject(name)
-- links objects name to the respective option name (to grab the GUID for removal)
local referenceTable = {
["Token Arranger"] = "showTokenArranger",
["Clean Up Helper"] = "showCleanUpHelper",
["Hand Helper"] = "showHandHelper",
["Search Assistant"] = "showSearchAssistant",
["Chaos Bag Manager"] = "showChaosBagManager",
["Displacement Tool"] = "showDisplacementTool",
["Custom Playmat Images"] = "showCustomPlaymatImages",
["Attachment Helper"] = "showAttachmentHelper",
@ -1101,7 +1091,6 @@ function onClick_defaultSettings()
playAreaSnapTags = true,
showAttachmentHelper = false,
showCleanUpHelper = false,
showChaosBagManager = false,
showCustomPlaymatImages = false,
showCYOA = false,
showDisplacementTool = false,
@ -1109,7 +1098,6 @@ function onClick_defaultSettings()
showHandHelper = {},
showSearchAssistant = {},
showTitleSplash = true,
showTokenArranger = false,
useClueClickers = false,
useSnapTags = true
}

View File

@ -252,20 +252,6 @@
</Cell>
</Row>
<!-- Option: show chaos bag manager -->
<Row class="option-text">
<Cell class="option-text">
<VerticalLayout class="text-column">
<Text class="option-header">Chaos Bag Manager</Text>
<Text class="description">Panel for easy addition or removal of chaos tokens to the bag - very useful for EotE because of Frost tokens!</Text>
</VerticalLayout>
</Cell>
<Cell class="option-button">
<Toggle id="showChaosBagManager"
onValueChanged="onClick_toggleOption(showChaosBagManager)"/>
</Cell>
</Row>
<!-- Option: show clean up helper -->
<Row class="option-text">
<Cell class="option-text">
@ -349,20 +335,6 @@
onValueChanged="onClick_toggleOption(showSearchAssistant)"/>
</Cell>
</Row>
<!-- Option: show token arranger -->
<Row class="option-text">
<Cell class="option-text">
<VerticalLayout class="text-column">
<Text class="option-header">Token Arranger</Text>
<Text class="description">See the contents of the chaos bag at a glance! This tool displays a sorted table of the tokens to allow easier guessing of your odds.</Text>
</VerticalLayout>
</Cell>
<Cell class="option-button">
<Toggle id="showTokenArranger"
onValueChanged="onClick_toggleOption(showTokenArranger)"/>
</Cell>
</Row>
</TableLayout>
</VerticalScrollView>
</Cell>