second part of updates

This commit is contained in:
Chr1Z93 2023-02-28 12:35:35 +01:00
parent a23c3d8150
commit b9fe13b658
6 changed files with 106 additions and 136 deletions

View File

@ -49,8 +49,8 @@
"normalized": "location"
},
{
"displayed": "to_be_deleted",
"normalized": "to_be_deleted"
"displayed": "tempToken",
"normalized": "temptoken"
},
{
"displayed": "Minicard",

View File

@ -45,10 +45,10 @@
],
"Tooltip": true,
"Transform": {
"posX": 22.951,
"posY": 5.242,
"posZ": -30.295,
"rotX": 1,
"posX": -42.3,
"posY": 1.53,
"posZ": -46.5,
"rotX": 0,
"rotY": 270,
"rotZ": 0,
"scaleX": 2,

View File

@ -1,4 +1,4 @@
-- names of tokens in order
local TOKEN_PRECEDENCE = {}
local TOKEN_NAMES = {
"Elder Sign",
"Skull",
@ -12,21 +12,6 @@ local TOKEN_NAMES = {
""
}
-- token modifiers for sorting (and order for same modifier)
-- order starts at 2 because there is a "+1" token
local TOKEN_PRECEDENCE = {
["Elder Sign"] = { 100, 2 },
["Skull"] = { -1, 3 },
["Cultist"] = { -2, 4 },
["Tablet"] = { -3, 5 },
["Elder Thing"] = { -4, 6 },
["Auto-fail"] = { -100, 7 },
["Bless"] = { 101, 8 },
["Curse"] = { -101, 9 },
["Frost"] = { -99, 10 },
[""] = { 0, 11 }
}
-- common parameters
local buttonParameters = {}
buttonParameters.function_owner = self
@ -52,13 +37,15 @@ function onSave() return JSON.encode(TOKEN_PRECEDENCE) end
function onLoad(saveState)
if saveState ~= nil then
TOKEN_PRECEDENCE = JSON.decode(saveState)
else
loadDefaultValues()
end
-- create UI
local offset = 0.725
local pos = { x = { -1.067, 0.377 }, z = -2.175 }
-- button and inputs index 1-10
-- button and inputs index 0-9
for i = 1, 10 do
if i < 6 then
buttonParameters.position = { pos.x[1], 0, pos.z + i * offset }
@ -76,7 +63,7 @@ function onLoad(saveState)
self.createInput(inputParameters)
end
-- index 11: "Update / Hide" button
-- index 10: "Update / Hide" button
buttonParameters.label = "Update / Hide"
buttonParameters.click_function = "layout"
buttonParameters.tooltip = "Left-Click: Update!\nRight-Click: Hide Tokens!"
@ -85,55 +72,52 @@ function onLoad(saveState)
buttonParameters.width = 675
buttonParameters.height = 175
self.createButton(buttonParameters)
-- send object reference to bless/curse manager
Wait.time(function() getObjectFromGUID("5933fb").setVar("tokenArranger", self) end, 1)
-- reset context menu
self.addContextMenuItem("Load default values", function()
loadDefaultValues()
updateUI()
layout()
end)
end
-- delete tokens and remove reference from bless/curse manager
function onDestroy()
deleteCopiedTokens()
-- remove object reference from bless/curse manager
getObjectFromGUID("5933fb").setVar("tokenArranger", nil)
end
-- delete temporary tokens when destroyed
function onDestroy() deleteCopiedTokens() end
-- layout tokens when dropped (after 2 seconds)
function onDrop() Wait.time(layout, 2) end
-- delete tokens when picked up
-- delete temporary tokens when picked up
function onPickUp() deleteCopiedTokens() end
-- helper functions to carry index
function attachIndex(click_function, index)
local fn_name = click_function .. index
_G[fn_name] = function(obj, player_color, isRightClick)
_G[click_function](obj, player_color, isRightClick, index)
_G[fn_name] = function(_, _, isRightClick)
_G[click_function](isRightClick, index)
end
return fn_name
end
function attachIndex2(input_function, index)
local fn_name = input_function .. index
_G[fn_name] = function(obj, player_color, input, selected)
_G[input_function](obj, player_color, input, selected, index)
_G[fn_name] = function(_, _, input, selected)
_G[input_function](input, selected, index)
end
return fn_name
end
-- click_function for buttons on chaos tokens
function tokenClick(_, _, isRightClick, index)
if not updating then
updating = true
local change = tonumber(isRightClick and "-1" or "1")
TOKEN_PRECEDENCE[TOKEN_NAMES[index]][1] = TOKEN_PRECEDENCE[TOKEN_NAMES[index]][1] + change
self.editInput({ index = index - 1, value = TOKEN_PRECEDENCE[TOKEN_NAMES[index]][1] })
layout()
end
function tokenClick(isRightClick, index)
local change = tonumber(isRightClick and "-1" or "1")
TOKEN_PRECEDENCE[TOKEN_NAMES[index]][1] = TOKEN_PRECEDENCE[TOKEN_NAMES[index]][1] + change
self.editInput({ index = index - 1, value = TOKEN_PRECEDENCE[TOKEN_NAMES[index]][1] })
layout()
end
-- input_function for input_boxes
function tokenInput(_, _, input, selected, index)
if selected == false and not updating then
updating = true
function tokenInput(input, selected, index)
if selected == false then
local num = tonumber(input)
if num ~= nil then
TOKEN_PRECEDENCE[TOKEN_NAMES[index]][1] = num
@ -142,6 +126,31 @@ function tokenInput(_, _, input, selected, index)
end
end
-- loads the default precedence table
function loadDefaultValues()
-- token modifiers for sorting (and order for same modifier)
-- order starts at 2 because there is a "+1" token
TOKEN_PRECEDENCE = {
["Elder Sign"] = { 100, 2 },
["Skull"] = { -1, 3 },
["Cultist"] = { -2, 4 },
["Tablet"] = { -3, 5 },
["Elder Thing"] = { -4, 6 },
["Auto-fail"] = { -100, 7 },
["Bless"] = { 101, 8 },
["Curse"] = { -101, 9 },
["Frost"] = { -99, 10 },
[""] = { 0, 11 }
}
end
-- update input fields
function updateUI()
for i = 1, 10 do
self.editInput({ index = i-1, value = TOKEN_PRECEDENCE[TOKEN_NAMES[i]][1] })
end
end
-- order function for data sorting
function token_value_comparator(left, right)
if left.value > right.value then return true
@ -152,49 +161,35 @@ function token_value_comparator(left, right)
end
end
-- get chaos bag from scripting zone and description
function getChaosBag()
local chaosbag = nil
local chaosbag_zone = getObjectFromGUID("83ef06")
-- error handling: scripting zone not found
if chaosbag_zone == nil then
printToAll("Zone for chaos bag detection couldn't be found.", "Red")
return nil
end
for _, v in ipairs(chaosbag_zone.getObjects()) do
if v.getDescription() == "Chaos Bag" then
chaosbag = getObjectFromGUID(v.getGUID())
break
-- checks scripting zone for chaos bag
function findChaosBag()
for _, item in ipairs(getObjectFromGUID("83ef06").getObjects()) do
if item.getDescription() == "Chaos Bag" then
return item
end
end
-- error handling: chaos bag not found
if chaosbag == nil then
printToAll("Chaos bag couldn't be found.", "Red")
end
return chaosbag
end
-- deletes previously placed tokens
function deleteCopiedTokens()
for _, token in ipairs(getObjectsWithTag("to_be_deleted")) do token.destruct() end
for _, token in ipairs(getObjectsWithTag("tempToken")) do token.destruct() end
end
-- main function (delete old tokens, clone chaos bag content, sort it and position it)
function layout(_, _, isRightClick)
if updating then return end
updating = true
deleteCopiedTokens()
-- stop here if right-clicked
if isRightClick then return end
local chaosBag = getChaosBag()
local chaosBag = findChaosBag()
local data = {}
-- clone tokens from chaos bag (default position above trash can)
for i, obj in ipairs(chaosBag.getData().ContainedObjects) do
obj["Tags"] = { "to_be_deleted" }
obj["Tags"] = { "tempToken" }
local spawnedObj = spawnObjectData({
data = obj,
position = { 0.49, 3, 0 }
@ -220,7 +215,7 @@ function layout(_, _, isRightClick)
-- error handling for removal of token arranger
if self == nil then
for _, token in ipairs(getObjectsWithTag("to_be_deleted")) do token.destruct() end
for _, token in ipairs(getObjectsWithTag("tempToken")) do token.destruct() end
return
end
@ -239,28 +234,17 @@ function layout(_, _, isRightClick)
item.token.setRotation(self.getRotation())
location.z = location.z - 1.75
end
updating = false
Wait.time(function() updating = false end, 0.1)
end
-- called from outside to set default values for tokens
function onTokenDataChanged(tokenData)
-- Skull
local table = tokenData["Skull"] or {}
local skullModifier = table.modifier or ""
print("Skull: " .. skullModifier)
-- Cultist
local table = tokenData.Cultist or {}
local cultistModifier = table.modifier or ""
print("Cultist: " .. cultistModifier)
-- Tablet
local table = tokenData.Tablet or {}
local tabletModifier = table.modifier or ""
print("Tablet: " .. tabletModifier)
-- Elder Thing
local table = tokenData.ElderThing or {}
local elderThingModifier = table.modifier or ""
print("Elder Thing: " .. elderThingModifier)
-- update token precedence
for key, table in pairs(tokenData) do
local modifier = table.modifier
if modifier == -999 then modifier = 0 end
TOKEN_PRECEDENCE[key][1] = modifier
end
updateUI()
layout()
end

View File

@ -1,13 +1,31 @@
do
local TokenArrangerApi = {}
TokenArrangerApi.onTokenDataChanged = function(tokenData)
-- local function to call the token arranger, if it is on the table
---@param functionName String Name of the function to cal
---@param argument Variant Parameter to pass
local function callIfExistent(functionName, argument)
local tokenArranger = getObjectsWithTag("TokenArranger")[1]
if tokenArranger ~= nil then
tokenArranger.call("onTokenDataChanged", tokenData)
tokenArranger.call(functionName, argument)
end
end
-- updates the token modifiers with the provided data
---@param tokenData Table Contains the chaos token metadata
TokenArrangerApi.onTokenDataChanged = function(tokenData)
callIfExistent("onTokenDataChanged", tokenData)
end
-- deletes already laid out tokens
TokenArrangerApi.deleteCopiedTokens = function()
callIfExistent("deleteCopiedTokens")
end
-- updates the laid out tokens
TokenArrangerApi.layout = function()
callIfExistent("layout")
end
return TokenArrangerApi
end

View File

@ -1,11 +1,4 @@
-- Bless / Curse Manager
-- updated by: Chr1Z
-- made by: Tikatoy
-- description: helps with adding / removing and sealing of bless and curse tokens
information = {
version = "3.5",
last_updated = "12.11.2022"
}
local tokenArrangerApi = require("accessories/TokenArrangerApi")
local IMAGE_URL = {
Bless = "http://cloud-3.steamusercontent.com/ugc/1655601092778627699/339FB716CB25CA6025C338F13AFDFD9AC6FA8356/",
@ -25,9 +18,6 @@ local BUTTON_COLOR = { [false] = { 0.4, 0.4, 0.4 }, [true] = { 0.9, 0.9, 0.9 } }
local FONT_COLOR = { [false] = { 1, 1, 1 }, [true] = { 0, 0, 0 } }
local whitespace = " "
-- variable will be set by outside call
tokenArranger = nil
---------------------------------------------------------
-- creating buttons and menus + initializing tables
---------------------------------------------------------
@ -67,12 +57,6 @@ function onLoad(saved_state)
-- context menu
self.addContextMenuItem("Remove all", doRemove)
self.addContextMenuItem("Reset", doReset)
self.addContextMenuItem("More Information", function()
printToAll("------------------------------", "White")
printToAll("Bless / Curse Manager v" .. information["version"] .. " by Chr1Z", "Orange")
printToAll("last updated: " .. information["last_updated"], "White")
printToAll("original by Tikatoy", "White")
end)
-- hotkeys
addHotkey("Bless Curse Status", printStatus, false)
@ -173,15 +157,13 @@ end
-- context menu function 2
function doReset(color)
-- delete previously pulled out tokens by the token arranger
if tokenArranger then
tokenArranger.call("deleteCopiedTokens")
end
tokenArrangerApi.deleteCopiedTokens()
playerColor = color
numInPlay = { Bless = 0, Curse = 0 }
tokensTaken = { Bless = {}, Curse = {} }
initializeState()
updateTokenArranger()
tokenArrangerApi.layout()
end
---------------------------------------------------------
@ -263,18 +245,7 @@ function callFunctions(token, isRightClick)
success = takeToken(token, false)
end
end
if success ~= 0 then updateTokenArranger() end
end
UPDATING = false
function updateTokenArranger()
if tokenArranger and not UPDATING then
UPDATING = true
Wait.time(function()
UPDATING = false
tokenArranger.call("layout")
end, 1.5)
end
if success ~= 0 then tokenArrangerApi.layout() end
end
function getChaosBag()
@ -405,22 +376,22 @@ function addMenuOptions(playerColor, hoveredObject)
hoveredObject.addContextMenuItem("Seal Bless", function(color)
sealToken("Bless", color, hoveredObject)
updateTokenArranger()
tokenArrangerApi.layout()
end, true)
hoveredObject.addContextMenuItem("Release Bless", function(color)
releaseToken("Bless", color, hoveredObject)
updateTokenArranger()
tokenArrangerApi.layout()
end, true)
hoveredObject.addContextMenuItem("Seal Curse", function(color)
sealToken("Curse", color, hoveredObject)
updateTokenArranger()
tokenArrangerApi.layout()
end, true)
hoveredObject.addContextMenuItem("Release Curse", function(color)
releaseToken("Curse", color, hoveredObject)
updateTokenArranger()
tokenArrangerApi.layout()
end, true)
broadcastToColor("Right-click seal options added to " .. hoveredObject.getName(), playerColor)

View File

@ -845,9 +845,6 @@ function applyOptionPanelChange(id, state)
-- option: Show token arranger
elseif id == "showTokenArranger" then
-- delete previously pulled out tokens
for _, token in ipairs(getObjectsWithTag("to_be_deleted")) do token.destruct() end
optionPanel[id] = spawnOrRemoveHelper(state, "Token Arranger", {-42.3, 1.6, -46.5})
-- option: Show clean up helper