Merge pull request #788 from argonui/search-assistant

Updated topcard handling
This commit is contained in:
dscarpac 2024-08-01 13:24:11 -05:00 committed by GitHub
commit 367d48cadb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 36 additions and 16 deletions

View File

@ -113,11 +113,25 @@ function startSearch(messageColor, number)
-- get draw deck
local deckAreaObjects = playermatApi.getDeckAreaObjects(matColor)
if deckAreaObjects.draw == nil then
if deckAreaObjects.draw == nil and deckAreaObjects.topCard == nil then
printToColor(matColor .. " draw deck could not be found!", messageColor, "Red")
return
end
-- check for harbinger
local harbinger
if deckAreaObjects.topCard then
harbinger = isHarbinger(deckAreaObjects.topCard.getGMNotes())
elseif deckAreaObjects.draw and not deckAreaObjects.draw.is_face_down then
local cards = deckAreaObjects.draw.getObjects()
harbinger = isHarbinger(cards[#cards].gm_notes)
end
if harbinger then
printToColor("The Harbinger is on top of your deck, searching isn't allowed", messageColor)
return
end
-- get bounds to know the height of the deck
local bounds = deckAreaObjects.draw.getBounds()
drawDeckPosition = bounds.center + Vector(0, bounds.size.y / 2 + 0.2, 0)
@ -158,16 +172,21 @@ function startSearch(messageColor, number)
-- handling for Norman Withers
if deckAreaObjects.topCard then
deckAreaObjects.topCard.setRotation(setAsideRotation)
deckAreaObjects.topCard.deal(1, handColor)
number = number - 1
topCardDetected = true
end
searchView()
Wait.time(function()
deckAreaObjects = playermatApi.getDeckAreaObjects(matColor)
if number > 0 then
deckAreaObjects.draw.deal(number, handColor)
end, 1)
end
end
function isHarbinger(notes)
local md = JSON.decode(notes or "") or {}
return md.id == "08006"
end
-- place handCards back into deck and optionally shuffle

View File

@ -258,7 +258,7 @@ function onObjectNumberTyped(hoveredObject, playerColor, number)
end
-- check whether the hovered object is part of a players draw objects
for _, color in ipairs(playermatApi.getUsedMatColors()) do
for color, _ in pairs(guidReferenceApi.getObjectsByType("Playermat")) do
local deckAreaObjects = playermatApi.getDeckAreaObjects(color)
if deckAreaObjects.topCard == hoveredObject or deckAreaObjects.draw == hoveredObject then
playermatApi.drawCardsWithReshuffle(color, number)

View File

@ -438,14 +438,12 @@ function drawCardsWithReshuffle(numCards)
local deckAreaObjects = getDeckAreaObjects()
-- Norman Withers handling
local harbinger = false
if deckAreaObjects.topCard and deckAreaObjects.topCard.getName() == "The Harbinger" then
harbinger = true
local harbinger
if deckAreaObjects.topCard then
harbinger = isHarbinger(deckAreaObjects.topCard.getGMNotes())
elseif deckAreaObjects.draw and not deckAreaObjects.draw.is_face_down then
local cards = deckAreaObjects.draw.getObjects()
if cards[#cards].name == "The Harbinger" then
harbinger = true
end
harbinger = isHarbinger(cards[#cards].gm_notes)
end
if harbinger then
@ -473,8 +471,7 @@ function drawCardsWithReshuffle(numCards)
if deckSize >= numCards then
drawCards(numCards)
-- flip top card again for Norman
if topCardDetected and string.match(activeInvestigatorId, "%d%d%d%d%d") == "08004" then
if topCardDetected then
flipTopCardFromDeck()
end
else
@ -483,8 +480,7 @@ function drawCardsWithReshuffle(numCards)
shuffleDiscardIntoDeck()
Wait.time(function()
drawCards(numCards - deckSize)
-- flip top card again for Norman
if topCardDetected and string.match(activeInvestigatorId, "%d%d%d%d%d") == "08004" then
if topCardDetected then
flipTopCardFromDeck()
end
end, 1)
@ -493,6 +489,11 @@ function drawCardsWithReshuffle(numCards)
end
end
function isHarbinger(notes)
local md = JSON.decode(notes or "") or {}
return md.id == "08006"
end
-- get the draw deck and discard pile objects and returns the references
---@return table: string-indexed table with references to the found objects
function getDeckAreaObjects()