From e3a1a0ce2da84c7b9b30c3da3228a9c245322853 Mon Sep 17 00:00:00 2001 From: Chr1Z93 Date: Mon, 2 Jan 2023 02:23:34 +0100 Subject: [PATCH] initial commit --- objects/TokenSource.124381.json | 3 +- .../ResourceCounter.498ec0.json | 57 +++++++++++++++++++ .../ResourceCounter.498ec0.ttslua | 43 ++++++++++++++ src/core/Global.ttslua | 7 ++- src/core/token/TokenManager.ttslua | 12 ++++ src/playermat/Playmat.ttslua | 4 ++ xml/OptionPanel.xml | 14 +++++ 7 files changed, 137 insertions(+), 3 deletions(-) create mode 100644 objects/TokenSource.124381/ResourceCounter.498ec0.json create mode 100644 objects/TokenSource.124381/ResourceCounter.498ec0.ttslua diff --git a/objects/TokenSource.124381.json b/objects/TokenSource.124381.json index 9b468f66..503bb56f 100644 --- a/objects/TokenSource.124381.json +++ b/objects/TokenSource.124381.json @@ -18,7 +18,8 @@ "Damage.cd2a02", "Horror.36be72", "ClueDoom.a3fb6c", - "Resource.00d19a" + "Resource.00d19a", + "ResourceCounter.498ec0" ], "ContainedObjects_path": "TokenSource.124381", "Description": "", diff --git a/objects/TokenSource.124381/ResourceCounter.498ec0.json b/objects/TokenSource.124381/ResourceCounter.498ec0.json new file mode 100644 index 00000000..beb03661 --- /dev/null +++ b/objects/TokenSource.124381/ResourceCounter.498ec0.json @@ -0,0 +1,57 @@ +{ + "AltLookAngle": { + "x": 0, + "y": 0, + "z": 0 + }, + "Autoraise": true, + "ColorDiffuse": { + "b": 1, + "g": 1, + "r": 1 + }, + "CustomImage": { + "CustomToken": { + "MergeDistancePixels": 5, + "Stackable": false, + "StandUp": false, + "Thickness": 0.1 + }, + "ImageScalar": 1, + "ImageSecondaryURL": "", + "ImageURL": "http://cloud-3.steamusercontent.com/ugc/949599153663401115/EAA6D40FC6E15204BBE551BCDED35CC8C75111BF/", + "WidthScale": 0 + }, + "Description": "0", + "DragSelectable": true, + "GMNotes": "resourceCounter", + "GUID": "498ec0", + "Grid": true, + "GridProjection": false, + "Hands": false, + "HideWhenFaceDown": false, + "IgnoreFoW": false, + "LayoutGroupSortIndex": 0, + "Locked": false, + "LuaScriptState": "0", + "LuaScript_path": "TokenSource.124381/ResourceCounter.498ec0.ttslua", + "MeasureMovement": false, + "Name": "Custom_Token", + "Nickname": "Resource Counter", + "Snap": false, + "Sticky": true, + "Tooltip": false, + "Transform": { + "posX": 0, + "posY": 3, + "posZ": 0, + "rotX": 0, + "rotY": 270, + "rotZ": 0, + "scaleX": 0.26, + "scaleY": 1, + "scaleZ": 0.26 + }, + "Value": 0, + "XmlUI": "" +} \ No newline at end of file diff --git a/objects/TokenSource.124381/ResourceCounter.498ec0.ttslua b/objects/TokenSource.124381/ResourceCounter.498ec0.ttslua new file mode 100644 index 00000000..75c9182d --- /dev/null +++ b/objects/TokenSource.124381/ResourceCounter.498ec0.ttslua @@ -0,0 +1,43 @@ +value = 0 + +function onSave() return JSON.encode(value) end + +function onLoad(savedData) + if savedData ~= "" then + value = JSON.decode(savedData) + end + + self.createButton({ + label = tostring(value), + click_function = "addOrSubtract", + function_owner = self, + position = { 0, 0.06, 0.1 }, + height = 600, + width = 1000, + scale = { 1.5, 1.5, 1.5 }, + font_size = 600, + font_color = { 1, 1, 1, 100 }, + color = { 0, 0, 0, 0 } + }) + self.addContextMenuItem("Value from description", function(color) setToDescription(color) end) +end + +function setToDescription(color) + local newValue = tonumber(self.getDescription()) + if type(newValue) == "number" and newValue <= 99 and newValue >= 0 then + updateVal(newValue) + else + printToColor("Description does not contain a valid one or two digit number!", color, "Red") + end +end + +function addOrSubtract(_, _, isRightClick) + local mod = isRightClick and -1 or 1 + newValue = math.min(math.max(value + mod, 0), 99) + updateVal(newValue) +end + +function updateVal(newValue) + value = newValue + self.editButton({ index = 0, label = tostring(newValue) }) +end diff --git a/src/core/Global.ttslua b/src/core/Global.ttslua index c6e3321c..27bcdbd3 100644 --- a/src/core/Global.ttslua +++ b/src/core/Global.ttslua @@ -1,5 +1,3 @@ -local tokenManager = require("core/token/TokenManager") - --------------------------------------------------------- -- general setup --------------------------------------------------------- @@ -36,6 +34,7 @@ local IS_RESHUFFLING = false local bagSearchers = {} local hideTitleSplashWaitFunctionId = nil local playmatAPI = require("playermat/PlaymatApi") +local tokenManager = require("core/token/TokenManager") --------------------------------------------------------- -- data for tokens @@ -819,6 +818,10 @@ function applyOptionPanelChange(id, state) -- update master clue counter getObjectFromGUID("4a3aa4").setVar("useClickableCounters", state) + -- option: Clickable resource counters + elseif id == "useResourceCounters" then + optionPanel[id] = state + -- option: Show Title on placing scenarios elseif id == "showTitleSplash" then optionPanel[id] = state diff --git a/src/core/token/TokenManager.ttslua b/src/core/token/TokenManager.ttslua index e5c62cb4..84d2daa3 100644 --- a/src/core/token/TokenManager.ttslua +++ b/src/core/token/TokenManager.ttslua @@ -149,8 +149,12 @@ do -- spawned state object rather than spawning multiple tokens ---@param shiftDown An offset for the z-value of this group of tokens TokenManager.spawnTokenGroup = function(card, tokenType, tokenCount, shiftDown) + local optionPanel = Global.getTable("optionPanel") + if tokenType == "damage" or tokenType == "horror" then TokenManager.spawnCounterToken(card, tokenType, tokenCount, shiftDown) + elseif tokenType == "resource" and optionPanel["useResourceCounters"] then + TokenManager.spawnResourceCounterToken(card, tokenCount) else TokenManager.spawnMultipleTokens(card, tokenType, tokenCount, shiftDown) end @@ -184,6 +188,14 @@ do end) end + TokenManager.spawnResourceCounterToken = function(card, tokenCount) + local pos = card.getPosition() + Vector(0, 0.2, 0) + local rot = card.getRotation() + TokenManager.spawnToken(pos, "resourceCounter", rot, function(spawned) + spawned.call("updateVal", tokenCount) + end) + end + -- Spawns a number of tokens. ---@param tokenType String type of token to spawn, valid values are resource", "doom", or "clue". -- Other types should use spawnCounterToken() diff --git a/src/playermat/Playmat.ttslua b/src/playermat/Playmat.ttslua index d98e3a31..cb6be6fb 100644 --- a/src/playermat/Playmat.ttslua +++ b/src/playermat/Playmat.ttslua @@ -415,6 +415,10 @@ function replenishTokens(card, count, replenish) if obj.getCustomObject().image == "http://cloud-3.steamusercontent.com/ugc/1758068501357192910/11DDDC7EF621320962FDCF3AE3211D5EDC3D1573/" then foundTokens = foundTokens + math.abs(obj.getQuantity()) obj.destruct() + elseif obj.getName() == "Resource Counter" then + foundTokens = obj.getVar("value") + obj.destruct() + break end end diff --git a/xml/OptionPanel.xml b/xml/OptionPanel.xml index c63c85d9..c3085e23 100644 --- a/xml/OptionPanel.xml +++ b/xml/OptionPanel.xml @@ -142,6 +142,20 @@ + + + + + Use clickable resource counters + This enables spawning of clickable resource tokens for player cards. + + + + + + +