Merge branch 'hand-visibility' into global-api
This commit is contained in:
commit
6334707115
@ -25,5 +25,6 @@
|
|||||||
"useClueClickers": false,
|
"useClueClickers": false,
|
||||||
"useResourceCounters": "disabled",
|
"useResourceCounters": "disabled",
|
||||||
"useSnapTags": true
|
"useSnapTags": true
|
||||||
}
|
},
|
||||||
|
"handVisibility": []
|
||||||
}
|
}
|
||||||
|
@ -106,7 +106,7 @@ function takeCardIntoThreatArea(playerColor, hoveredObject)
|
|||||||
-- contruct feedback message
|
-- contruct feedback message
|
||||||
local cardName = hoveredObject.getName()
|
local cardName = hoveredObject.getName()
|
||||||
if cardName == "" then cardName = "a card" end
|
if cardName == "" then cardName = "a card" end
|
||||||
local playerName = getColoredName(playerColor)
|
local playerName = Global.call("getColoredName", playerColor)
|
||||||
broadcastToAll("Moved " .. cardName .. " to " .. playerName .. "'s threat area.", "White")
|
broadcastToAll("Moved " .. cardName .. " to " .. playerName .. "'s threat area.", "White")
|
||||||
|
|
||||||
-- get new rotation (rounded)
|
-- get new rotation (rounded)
|
||||||
@ -379,7 +379,7 @@ function removeOneUse(playerColor, hoveredObject)
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- construct feedback message
|
-- construct feedback message
|
||||||
local playerName = getColoredName(playerColor)
|
local playerName = Global.call("getColoredName", playerColor)
|
||||||
local cardInfo = ""
|
local cardInfo = ""
|
||||||
if cardName and cardName ~= "" then
|
if cardName and cardName ~= "" then
|
||||||
cardInfo = " from " .. cardName
|
cardInfo = " from " .. cardName
|
||||||
@ -530,7 +530,7 @@ function takeClueFromLocation(playerColor, hoveredObject)
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- construct feedback message
|
-- construct feedback message
|
||||||
local playerName = getColoredName(playerColor)
|
local playerName = Global.call("getColoredName", playerColor)
|
||||||
local cardInfo = ""
|
local cardInfo = ""
|
||||||
if cardName and cardName ~= "" then
|
if cardName and cardName ~= "" then
|
||||||
cardInfo = " from " .. cardName
|
cardInfo = " from " .. cardName
|
||||||
@ -574,17 +574,6 @@ function getFirstSeatedPlayer()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- returns the colored steam name or color
|
|
||||||
function getColoredName(playerColor)
|
|
||||||
local displayName = playerColor
|
|
||||||
if Player[playerColor].steam_name then
|
|
||||||
displayName = Player[playerColor].steam_name
|
|
||||||
end
|
|
||||||
|
|
||||||
-- add bb-code
|
|
||||||
return "[" .. Color.fromString(playerColor):toHex() .. "]" .. displayName .. "[-]"
|
|
||||||
end
|
|
||||||
|
|
||||||
function roundToMultiple(num, mult)
|
function roundToMultiple(num, mult)
|
||||||
return math.floor((num + mult / 2) / mult) * mult
|
return math.floor((num + mult / 2) / mult) * mult
|
||||||
end
|
end
|
||||||
|
@ -71,6 +71,9 @@ local RESOURCE_OPTIONS = {
|
|||||||
"disabled"
|
"disabled"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
-- tracks the visibility of each hand
|
||||||
|
local handVisibility = {}
|
||||||
|
|
||||||
---------------------------------------------------------
|
---------------------------------------------------------
|
||||||
-- data for tokens
|
-- data for tokens
|
||||||
---------------------------------------------------------
|
---------------------------------------------------------
|
||||||
@ -139,19 +142,21 @@ function onSave()
|
|||||||
end
|
end
|
||||||
|
|
||||||
return JSON.encode({
|
return JSON.encode({
|
||||||
optionPanel = optionPanel,
|
|
||||||
acknowledgedUpgradeVersions = acknowledgedUpgradeVersions,
|
acknowledgedUpgradeVersions = acknowledgedUpgradeVersions,
|
||||||
chaosTokensLastMatGUID = chaosTokensLastMatGUID,
|
chaosTokensLastMatGUID = chaosTokensLastMatGUID,
|
||||||
chaosTokensGUID = chaosTokensGUID
|
chaosTokensGUID = chaosTokensGUID,
|
||||||
|
handVisibility = handVisibility,
|
||||||
|
optionPanel = optionPanel
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
function onLoad(savedData)
|
function onLoad(savedData)
|
||||||
if savedData and savedData ~= "" then
|
if savedData and savedData ~= "" then
|
||||||
local loadedData = JSON.decode(savedData)
|
local loadedData = JSON.decode(savedData)
|
||||||
optionPanel = loadedData.optionPanel
|
|
||||||
acknowledgedUpgradeVersions = loadedData.acknowledgedUpgradeVersions
|
acknowledgedUpgradeVersions = loadedData.acknowledgedUpgradeVersions
|
||||||
chaosTokensLastMatGUID = loadedData.chaosTokensLastMatGUID
|
chaosTokensLastMatGUID = loadedData.chaosTokensLastMatGUID
|
||||||
|
handVisibility = loadedData.handVisibility
|
||||||
|
optionPanel = loadedData.optionPanel
|
||||||
|
|
||||||
-- restore saved state for drawn chaos tokens
|
-- restore saved state for drawn chaos tokens
|
||||||
for _, guid in ipairs(loadedData.chaosTokensGUID or {}) do
|
for _, guid in ipairs(loadedData.chaosTokensGUID or {}) do
|
||||||
@ -167,6 +172,7 @@ function onLoad(savedData)
|
|||||||
end
|
end
|
||||||
|
|
||||||
getModVersion()
|
getModVersion()
|
||||||
|
updateHandVisibility()
|
||||||
math.randomseed(os.time())
|
math.randomseed(os.time())
|
||||||
TokenManager.initialiize()
|
TokenManager.initialiize()
|
||||||
|
|
||||||
@ -244,6 +250,8 @@ function onObjectEnterZone(zone, object)
|
|||||||
object.call("resetSealedTokens")
|
object.call("resetSealedTokens")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
applyHidingToCard(object, zone.getValue())
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -259,6 +267,9 @@ function onObjectLeaveZone(zone, object)
|
|||||||
if zone.type == "Hand" and object.hasTag("CardWithHelper") then
|
if zone.type == "Hand" and object.hasTag("CardWithHelper") then
|
||||||
object.call("syncDisplayWithOptionPanel")
|
object.call("syncDisplayWithOptionPanel")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- make object visible
|
||||||
|
object.setHiddenFrom({})
|
||||||
end, 1)
|
end, 1)
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -1252,8 +1263,7 @@ end
|
|||||||
-- updates the preview window
|
-- updates the preview window
|
||||||
function updatePreviewWindow()
|
function updatePreviewWindow()
|
||||||
local item = library[contentToShow][currentListItem]
|
local item = library[contentToShow][currentListItem]
|
||||||
local tempImage =
|
local tempImage = "https://steamusercontent-a.akamaihd.net/ugc/2115061845788345842/2CD6ABC551555CCF58F9D0DDB7620197BA398B06/"
|
||||||
"https://steamusercontent-a.akamaihd.net/ugc/2115061845788345842/2CD6ABC551555CCF58F9D0DDB7620197BA398B06/"
|
|
||||||
|
|
||||||
-- set default image if not defined
|
-- set default image if not defined
|
||||||
if item.boxsize == nil or item.boxsize == "" or item.boxart == nil or item.boxart == "" then
|
if item.boxsize == nil or item.boxsize == "" or item.boxart == nil or item.boxart == "" then
|
||||||
@ -1416,8 +1426,7 @@ function contentDownloadCallback(request, params)
|
|||||||
if pos then
|
if pos then
|
||||||
spawnTable.position = pos
|
spawnTable.position = pos
|
||||||
else
|
else
|
||||||
broadcastToAll(
|
broadcastToAll("Please make sure there's space in the upper middle of the table and try again.", "Red")
|
||||||
"Please make space in the area below the tentacle stand in the upper middle of the table and try again.", "Red")
|
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -1838,6 +1847,74 @@ function toggleCardHelpers(state)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- toggles the hand visibility of a hand for a specific player
|
||||||
|
function handVisibilityToggle(params)
|
||||||
|
local playerColor = params.playerColor
|
||||||
|
local handColor = params.handColor
|
||||||
|
|
||||||
|
-- collect data for message
|
||||||
|
local state, preposition
|
||||||
|
|
||||||
|
-- modify data table
|
||||||
|
if not handVisibility[handColor] then
|
||||||
|
handVisibility[handColor] = { playerColor, handColor }
|
||||||
|
state, preposition = "Showing", "to"
|
||||||
|
elseif removeValueFromTable(handVisibility[handColor], playerColor) then
|
||||||
|
-- something was removed, maybe clear the table
|
||||||
|
if #handVisibility[handColor] == 1 and handVisibility[handColor][1] == handColor then
|
||||||
|
handVisibility[handColor] = nil
|
||||||
|
end
|
||||||
|
state, preposition = "Hiding", "from"
|
||||||
|
else
|
||||||
|
-- add the new color as viewer
|
||||||
|
table.insert(handVisibility[handColor], playerColor)
|
||||||
|
state, preposition = "Showing", "to"
|
||||||
|
end
|
||||||
|
|
||||||
|
local sourceName = getColoredName(handColor)
|
||||||
|
local targetName = getColoredName(playerColor)
|
||||||
|
broadcastToAll(state .. " " .. sourceName .. "'s hand " .. preposition .. " " .. targetName .. ".")
|
||||||
|
updateHandVisibility()
|
||||||
|
end
|
||||||
|
|
||||||
|
function updateHandVisibility()
|
||||||
|
-- update the global setting
|
||||||
|
if not next(handVisibility) then
|
||||||
|
Hands.hiding = 1
|
||||||
|
else
|
||||||
|
Hands.hiding = 3
|
||||||
|
end
|
||||||
|
|
||||||
|
-- update visibility of cards already in hands (delay seems to be necessary)
|
||||||
|
Wait.frames(function()
|
||||||
|
for _, handColor in ipairs(Player.getAvailableColors()) do
|
||||||
|
for _, handObj in ipairs(Player[handColor].getHandObjects()) do
|
||||||
|
applyHidingToCard(handObj, handColor)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end, 1)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- maybe hide card from non-allowed players
|
||||||
|
---@param card tts__Object Card to maybe hide
|
||||||
|
---@param handColor? string Color of the hand this card is in
|
||||||
|
function applyHidingToCard(card, handColor)
|
||||||
|
if next(handVisibility) then
|
||||||
|
local viewers = { handColor }
|
||||||
|
if handColor and handVisibility[handColor] then
|
||||||
|
viewers = handVisibility[handColor]
|
||||||
|
end
|
||||||
|
|
||||||
|
local hiddenFrom = Player.getColors()
|
||||||
|
for _, viewer in ipairs(viewers) do
|
||||||
|
removeValueFromTable(hiddenFrom, viewer)
|
||||||
|
end
|
||||||
|
card.setHiddenFrom(hiddenFrom)
|
||||||
|
else
|
||||||
|
card.setHiddenFrom({})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
---------------------------------------------------------
|
---------------------------------------------------------
|
||||||
-- Update notification related functionality
|
-- Update notification related functionality
|
||||||
---------------------------------------------------------
|
---------------------------------------------------------
|
||||||
@ -2405,13 +2482,15 @@ function callTable(params)
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- removes a value from a table
|
-- removes a value from a table
|
||||||
|
---@return boolean: True if something was removed
|
||||||
function removeValueFromTable(t, val)
|
function removeValueFromTable(t, val)
|
||||||
for i, v in ipairs(t) do
|
for i, v in ipairs(t) do
|
||||||
if v == val then
|
if v == val then
|
||||||
table.remove(t, i)
|
table.remove(t, i)
|
||||||
break
|
return true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
-- checks if a table is empty
|
-- checks if a table is empty
|
||||||
@ -2422,3 +2501,14 @@ function isTableEmpty(tbl)
|
|||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- returns the colored steam name or color
|
||||||
|
function getColoredName(playerColor)
|
||||||
|
local displayName = playerColor
|
||||||
|
if Player[playerColor].steam_name then
|
||||||
|
displayName = Player[playerColor].steam_name
|
||||||
|
end
|
||||||
|
|
||||||
|
-- add bb-code
|
||||||
|
return "[" .. Color.fromString(playerColor):toHex() .. "]" .. displayName .. "[-]"
|
||||||
|
end
|
||||||
|
@ -26,6 +26,11 @@ local availableOptions = {
|
|||||||
id = "handColorSelect",
|
id = "handColorSelect",
|
||||||
title = "Select Hand Color",
|
title = "Select Hand Color",
|
||||||
type = "button"
|
type = "button"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id = "visibilitySelect",
|
||||||
|
title = "Show/Hide this Hand to me",
|
||||||
|
type = "button"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -619,7 +624,8 @@ function doDiscardOne()
|
|||||||
local cardId = choices[num] .. "/" .. #hand
|
local cardId = choices[num] .. "/" .. #hand
|
||||||
|
|
||||||
deckLib.placeOrMergeIntoDeck(card, returnGlobalDiscardPosition(), self.getRotation())
|
deckLib.placeOrMergeIntoDeck(card, returnGlobalDiscardPosition(), self.getRotation())
|
||||||
broadcastToAll(getColoredName(playerColor) .. " randomly discarded " .. cardName " (" .. cardId .. ").", "White")
|
local playerName = Global.call("getColoredName", playerColor)
|
||||||
|
broadcastToAll(playerName .. " randomly discarded " .. cardName " (" .. cardId .. ").", "White")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -920,6 +926,7 @@ function onClick_hideOrShowOptions(player)
|
|||||||
GlobalApi.changeWindowVisibility(player.color, "optionPanelMain", _, self)
|
GlobalApi.changeWindowVisibility(player.color, "optionPanelMain", _, self)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- show the triggering player a dialog to select a playermat texture
|
||||||
function onClick_textureSelect(player)
|
function onClick_textureSelect(player)
|
||||||
local textureList = {}
|
local textureList = {}
|
||||||
for texture, _ in pairs(nameToTexture) do
|
for texture, _ in pairs(nameToTexture) do
|
||||||
@ -928,6 +935,7 @@ function onClick_textureSelect(player)
|
|||||||
player.showOptionsDialog("Select a texture:", textureList, _, updateTexture)
|
player.showOptionsDialog("Select a texture:", textureList, _, updateTexture)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- show the triggering player a dialog to select a new hand color for this mat
|
||||||
function onClick_handColorSelect(player)
|
function onClick_handColorSelect(player)
|
||||||
local colorList = Player.getColors()
|
local colorList = Player.getColors()
|
||||||
|
|
||||||
@ -964,6 +972,16 @@ function onClick_handColorSelect(player)
|
|||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- instruct Global to update this mat's hand visibility
|
||||||
|
function onClick_visibilitySelect(player)
|
||||||
|
if player.color == playerColor then
|
||||||
|
printToColor("This is meant to be clicked by other players to be able to see your hand (primarily for multi-handed gameplay). It won't do anything for you.", playerColor)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
Global.call("handVisibilityToggle", { playerColor = player.color, handColor = playerColor })
|
||||||
|
end
|
||||||
|
|
||||||
-- changes the UI state and the internal variable for the togglebuttons
|
-- changes the UI state and the internal variable for the togglebuttons
|
||||||
function onClick_toggleOption(player, _, id)
|
function onClick_toggleOption(player, _, id)
|
||||||
local state = optionPanelData[id]
|
local state = optionPanelData[id]
|
||||||
@ -1549,16 +1567,6 @@ function updatePlayerCards(args)
|
|||||||
tokenManagerApi.addPlayerCardData(playerCardData)
|
tokenManagerApi.addPlayerCardData(playerCardData)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- returns the colored steam name or color
|
|
||||||
function getColoredName(playerColor)
|
|
||||||
local displayName = playerColor
|
|
||||||
if Player[playerColor].steam_name then
|
|
||||||
displayName = Player[playerColor].steam_name
|
|
||||||
end
|
|
||||||
|
|
||||||
-- add bb-code
|
|
||||||
return "[" .. Color.fromString(playerColor):toHex() .. "]" .. displayName .. "[-]"
|
|
||||||
end
|
|
||||||
|
|
||||||
function getActiveInvestigatorData() return activeInvestigatorData end
|
function getActiveInvestigatorData() return activeInvestigatorData end
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user