From 5b8fa8c6f830853209d6a1d35a33957d9316eb9a Mon Sep 17 00:00:00 2001 From: Chr1Z93 Date: Fri, 11 Aug 2023 12:02:54 +0200 Subject: [PATCH 1/3] token arranger code update --- src/accessories/TokenArranger.ttslua | 125 ++++++++++++--------------- 1 file changed, 56 insertions(+), 69 deletions(-) diff --git a/src/accessories/TokenArranger.ttslua b/src/accessories/TokenArranger.ttslua index ab40d7a2..7ac2e2a8 100644 --- a/src/accessories/TokenArranger.ttslua +++ b/src/accessories/TokenArranger.ttslua @@ -73,8 +73,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 +84,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 +226,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 + percentageLabel.position = 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.z = percentageLabel.position.z - 2.85 else - buttonScale = {2, 2, 2} - offset = -2.675 + percentageLabel.scale = {2, 2, 2} + percentageLabel.position.z = percentageLabel.position.z - 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.z = percentageLabel.position.z - 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 +294,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 +323,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 From 42b29e4cd77987057d3a34d5860fc67122a8701a Mon Sep 17 00:00:00 2001 From: Chr1Z93 Date: Fri, 11 Aug 2023 12:15:04 +0200 Subject: [PATCH 2/3] pulling tools out of option panel --- config.json | 5 ++-- modsettings/ComponentTags.json | 4 +++ .../ChaosBagManager.023240.json | 8 +++--- objects/LuaScriptState.luascriptstate | 2 +- objects/OptionPanelSource.830bd0.json | 2 -- .../TokenArranger.022907.json | 6 ++-- src/accessories/TokenArranger.ttslua | 9 +++--- src/core/Global.ttslua | 12 -------- xml/OptionPanel.xml | 28 ------------------- 9 files changed, 19 insertions(+), 57 deletions(-) rename objects/{OptionPanelSource.830bd0 => }/ChaosBagManager.023240.json (94%) rename objects/{OptionPanelSource.830bd0 => }/TokenArranger.022907.json (97%) diff --git a/config.json b/config.json index d53587e0..7ace3af2 100644 --- a/config.json +++ b/config.json @@ -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": [ diff --git a/modsettings/ComponentTags.json b/modsettings/ComponentTags.json index 83a638b1..8d28dfae 100644 --- a/modsettings/ComponentTags.json +++ b/modsettings/ComponentTags.json @@ -83,6 +83,10 @@ { "displayed": "CameraZoom_ignore", "normalized": "camerazoom_ignore" + }, + { + "displayed": "TokenArranger", + "normalized": "tokenarranger" } ] } diff --git a/objects/OptionPanelSource.830bd0/ChaosBagManager.023240.json b/objects/ChaosBagManager.023240.json similarity index 94% rename from objects/OptionPanelSource.830bd0/ChaosBagManager.023240.json rename to objects/ChaosBagManager.023240.json index bc4802ed..364994bd 100644 --- a/objects/OptionPanelSource.830bd0/ChaosBagManager.023240.json +++ b/objects/ChaosBagManager.023240.json @@ -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, diff --git a/objects/LuaScriptState.luascriptstate b/objects/LuaScriptState.luascriptstate index 3404240e..599af236 100644 --- a/objects/LuaScriptState.luascriptstate +++ b/objects/LuaScriptState.luascriptstate @@ -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}} diff --git a/objects/OptionPanelSource.830bd0.json b/objects/OptionPanelSource.830bd0.json index 623fc02b..98907beb 100644 --- a/objects/OptionPanelSource.830bd0.json +++ b/objects/OptionPanelSource.830bd0.json @@ -14,8 +14,6 @@ "r": 0.70588 }, "ContainedObjects_order": [ - "ChaosBagManager.023240", - "TokenArranger.022907", "CYOACampaignGuides.e87ea2", "AttachmentHelper.7f4976", "SearchAssistant.17aed0", diff --git a/objects/OptionPanelSource.830bd0/TokenArranger.022907.json b/objects/TokenArranger.022907.json similarity index 97% rename from objects/OptionPanelSource.830bd0/TokenArranger.022907.json rename to objects/TokenArranger.022907.json index 6c12cf42..8deb01fe 100644 --- a/objects/OptionPanelSource.830bd0/TokenArranger.022907.json +++ b/objects/TokenArranger.022907.json @@ -32,7 +32,7 @@ "HideWhenFaceDown": false, "IgnoreFoW": false, "LayoutGroupSortIndex": 0, - "Locked": false, + "Locked": true, "LuaScript": "require(\"accessories/TokenArranger\")", "LuaScriptState": "", "MeasureMovement": false, @@ -46,7 +46,7 @@ "Tooltip": true, "Transform": { "posX": -42.3, - "posY": 1.53, + "posY": 1.531, "posZ": -46.5, "rotX": 0, "rotY": 270, @@ -57,4 +57,4 @@ }, "Value": 0, "XmlUI": "" -} +} \ No newline at end of file diff --git a/src/accessories/TokenArranger.ttslua b/src/accessories/TokenArranger.ttslua index 7ac2e2a8..86a57721 100644 --- a/src/accessories/TokenArranger.ttslua +++ b/src/accessories/TokenArranger.ttslua @@ -59,7 +59,6 @@ function onLoad(saveState) end createButtonsAndInputs(true) - layout() -- context menu items self.addContextMenuItem("Load default values", function() @@ -233,14 +232,14 @@ function createPercentageButton(tokenCount, valueCount, tokenName) percentageLabel.click_function = "none" percentageLabel.width = 0 percentageLabel.height = 0 - percentageLabel.position = Vector(2.3, -0.05, 0.875 * valueCount) + local startPos = Vector(2.3, -0.05, 0.875 * valueCount) if percentage == "cumulative" then percentageLabel.scale = {1.5, 1.5, 1.5} - percentageLabel.position.z = percentageLabel.position.z - 2.85 + percentageLabel.position = startPos - Vector(0, 0, 2.85) else percentageLabel.scale = {2, 2, 2} - percentageLabel.position.z = percentageLabel.position.z - 2.675 + percentageLabel.position = startPos - Vector(0, 0, 2.675) end -- determine font_color @@ -262,7 +261,7 @@ function createPercentageButton(tokenCount, valueCount, tokenName) -- optionally create label for cumulative percentage if percentage == "cumulative" then - percentageLabel.position.z = percentageLabel.position.z - 2.45 + percentageLabel.position = startPos - Vector(0, 0, 2.45) percentageLabel.font_color = {1, 1, 1} -- only display one digit for 100% diff --git a/src/core/Global.ttslua b/src/core/Global.ttslua index 5246ed61..18bea7c0 100644 --- a/src/core/Global.ttslua +++ b/src/core/Global.ttslua @@ -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 } diff --git a/xml/OptionPanel.xml b/xml/OptionPanel.xml index b1d3cdce..5c0da12f 100644 --- a/xml/OptionPanel.xml +++ b/xml/OptionPanel.xml @@ -252,20 +252,6 @@ - - - - - Chaos Bag Manager - Panel for easy addition or removal of chaos tokens to the bag - very useful for EotE because of Frost tokens! - - - - - - - @@ -349,20 +335,6 @@ onValueChanged="onClick_toggleOption(showSearchAssistant)"/> - - - - - - Token Arranger - 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. - - - - - - From f0a9bf59e963d41ef13c6561ceaa6334c507e486 Mon Sep 17 00:00:00 2001 From: Chr1Z93 Date: Fri, 11 Aug 2023 12:16:47 +0200 Subject: [PATCH 3/3] removed initial spawn of tokens --- objects/TokenArranger.022907.json | 4 ++-- objects/TokenArranger.022907.luascriptstate | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 objects/TokenArranger.022907.luascriptstate diff --git a/objects/TokenArranger.022907.json b/objects/TokenArranger.022907.json index 8deb01fe..ec5c2a4a 100644 --- a/objects/TokenArranger.022907.json +++ b/objects/TokenArranger.022907.json @@ -34,7 +34,7 @@ "LayoutGroupSortIndex": 0, "Locked": true, "LuaScript": "require(\"accessories/TokenArranger\")", - "LuaScriptState": "", + "LuaScriptState_path": "TokenArranger.022907.luascriptstate", "MeasureMovement": false, "Name": "Custom_Token", "Nickname": "Token Arranger", @@ -57,4 +57,4 @@ }, "Value": 0, "XmlUI": "" -} \ No newline at end of file +} diff --git a/objects/TokenArranger.022907.luascriptstate b/objects/TokenArranger.022907.luascriptstate new file mode 100644 index 00000000..638cf57f --- /dev/null +++ b/objects/TokenArranger.022907.luascriptstate @@ -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]}}