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 @@
+
+
+
+
+
+ This enables spawning of clickable resource tokens for player cards.
+
+ |
+
+
+ |
+
+
|