Merge branch 'main' into optionpanel-2

This commit is contained in:
Chr1Z93 2022-12-13 20:14:36 +01:00
commit c9afcdb5cc
9 changed files with 149 additions and 54 deletions

View File

@ -5,6 +5,7 @@
-- - puts everything on playmats and hands into respective trashcans -- - puts everything on playmats and hands into respective trashcans
-- - use the IGNORE_TAG to exclude objects from tidying (default: "CleanUpHelper_Ignore") -- - use the IGNORE_TAG to exclude objects from tidying (default: "CleanUpHelper_Ignore")
local playAreaApi = require("core/PlayAreaApi")
-- enable this for debugging -- enable this for debugging
local SHOW_RAYS = false local SHOW_RAYS = false
@ -209,7 +210,7 @@ function resetCounters()
-- reset doom on agenda -- reset doom on agenda
local doomcounter = getObjectFromGUID("85c4c6") local doomcounter = getObjectFromGUID("85c4c6")
if doomcounter ~= nil then if doomcounter ~= nil then
doomcounter.call("setToZero") doomcounter.call("updateVal")
end end
for i, guid in ipairs(TRACKER_GUIDS) do for i, guid in ipairs(TRACKER_GUIDS) do
@ -300,10 +301,7 @@ function tidyPlaymatCoroutine()
end end
end end
local PLAYMAT = getObjectFromGUID('721ba2') playAreaApi.resetSpawnedCards()
if PLAYMAT then
PLAYMAT.setTable("SPAWNED_LOCATION_GUIDS", {})
end
printToAll("Tidying playermats and agenda mat...", "White") printToAll("Tidying playermats and agenda mat...", "White")
startLuaCoroutine(self, "tidyPlayerMatCoroutine") startLuaCoroutine(self, "tidyPlayerMatCoroutine")

View File

@ -762,4 +762,3 @@ function removeImages()
tile.destruct() tile.destruct()
end end
end end

View File

@ -1,15 +1,4 @@
local excluded = { local playAreaApi = require("core/PlayAreaApi")
["b7b45b"] = true,
["f182ee"] = true,
["721ba2"] = true
}
local OFFSETS = {
left = { x = 0.00, y = 0, z = 7.67 },
right = { x = 0.00, y = 0, z = -7.67 },
up = { x = 6.54, y = 0, z = 0.00 },
down = { x = -6.54, y = 0, z = 0.00 }
}
local UI_offset = 1.15 local UI_offset = 1.15
@ -46,24 +35,10 @@ function onLoad()
self.createButton(buttonParamaters) self.createButton(buttonParamaters)
end end
function shift_left(color) shift(color, "left") end function shift_left(color) playAreaApi.shiftContentsLeft(color) end
function shift_right(color) shift(color, "right") end function shift_right(color) playAreaApi.shiftContentsRight(color) end
function shift_up(color) shift(color, "up") end function shift_up(color) playAreaApi.shiftContentsUp(color) end
function shift_down(color) shift(color, "down") end function shift_down(color) playAreaApi.shiftContentsDown(color) end
function shift(color, direction)
local zone = getObjectFromGUID("a2f932")
if not zone then
broadcastToColor("Scripting zone couldn't be found.", color, "Red")
return
end
for _, object in ipairs(zone.getObjects()) do
if not (excluded[object.getGUID()] or object.hasTag("displacement_excluded")) then
object.translate(OFFSETS[direction])
end
end
end

View File

@ -1,5 +1,6 @@
require("arkhamdb/LoaderUi") require("arkhamdb/LoaderUi")
require("playercards/PlayerCardSpawner") require("playercards/PlayerCardSpawner")
local playAreaApi = require("core/PlayAreaApi")
local zones = require("playermat/Zones") local zones = require("playermat/Zones")
@ -33,8 +34,6 @@ customizationRowsWithFields["09101"].inputMap[1] = 1
customizationRowsWithFields["09101"].inputMap[2] = 2 customizationRowsWithFields["09101"].inputMap[2] = 2
customizationRowsWithFields["09101"].inputMap[3] = 3 customizationRowsWithFields["09101"].inputMap[3] = 3
local PLAY_AREA_GUID = "721ba2"
local RANDOM_WEAKNESS_ID = "01000" local RANDOM_WEAKNESS_ID = "01000"
local tags = { configuration = "import_configuration_provider" } local tags = { configuration = "import_configuration_provider" }
local Priority = { local Priority = {
@ -152,7 +151,7 @@ local function onDeckResult(deck, playerColor, configuration)
maybeAddInvestigatorCards(deck, slots) maybeAddInvestigatorCards(deck, slots)
maybeAddCustomizeUpgradeSheets(slots, configuration) maybeAddCustomizeUpgradeSheets(slots, configuration)
maybeAddSummonedServitor(slots) maybeAddSummonedServitor(slots)
maybeAddOnTheMend(slots) maybeAddOnTheMend(slots, playerColor)
extractBondedCards(slots, configuration) extractBondedCards(slots, configuration)
checkTaboos(deck.taboo_id, slots, playerColor, configuration) checkTaboos(deck.taboo_id, slots, playerColor, configuration)
@ -258,11 +257,15 @@ end
-- the count based on the investigator count -- the count based on the investigator count
---@param slots: The slot list for cards in this deck. Table key is the cardId, value is the number ---@param slots: The slot list for cards in this deck. Table key is the cardId, value is the number
-- of those cards which will be spawned -- of those cards which will be spawned
function maybeAddOnTheMend(slots) ---@param playerColor: Color name of the player this deck is being loaded for. Used for broadcast if an error occurs
function maybeAddOnTheMend(slots, playerColor)
if slots["09006"] ~= nil then if slots["09006"] ~= nil then
local playArea = getObjectFromGUID(PLAY_AREA_GUID) local investigatorCount = playAreaApi.getInvestigatorCount()
if playArea ~= nil then if investigatorCount ~= nil then
slots["09006"] = playArea.call("getInvestigatorCount") slots["09006"] = investigatorCount
else
debugPrint("Something went wrong with the load, adding 4 copies of On the Mend", Priority.INFO, playerColor)
slots["09006"] = 4
end end
end end
end end

View File

@ -923,6 +923,31 @@ PLAYER_CARD_TOKEN_OFFSETS = {
{ 0, 3, 0.5 }, { 0, 3, 0.5 },
{ -0.7, 3, 0.5 } { -0.7, 3, 0.5 }
}, },
[10] = {
{ 0.7, 3, -0.9 },
{ 0, 3, -0.9 },
{ -0.7, 3, -0.9 },
{ 0.7, 3, -0.2 },
{ 0, 3, -0.2 },
{ -0.7, 3, -0.2 },
{ 0.7, 3, 0.5 },
{ 0, 3, 0.5 },
{ -0.7, 3, 0.5 },
{ 0, 3, 1.2 }
},
[11] = {
{ 0.7, 3, -0.9 },
{ 0, 3, -0.9 },
{ -0.7, 3, -0.9 },
{ 0.7, 3, -0.2 },
{ 0, 3, -0.2 },
{ -0.7, 3, -0.2 },
{ 0.7, 3, 0.5 },
{ 0, 3, 0.5 },
{ -0.7, 3, 0.5 },
{ -0.35, 3, 1.2 },
{ 0.35, 3, 1.2 }
},
[12] = { [12] = {
{ 0.7, 3, -0.9 }, { 0.7, 3, -0.9 },
{ 0, 3, -0.9 }, { 0, 3, -0.9 },

View File

@ -8,7 +8,21 @@ DEBUG = false
-- we use this to turn off collision handling until onLoad() is complete -- we use this to turn off collision handling until onLoad() is complete
COLLISION_ENABLED = false COLLISION_ENABLED = false
local SHIFT_OFFSETS = {
left = { x = 0.00, y = 0, z = 7.67 },
right = { x = 0.00, y = 0, z = -7.67 },
up = { x = 6.54, y = 0, z = 0.00 },
down = { x = -6.54, y = 0, z = 0.00 }
}
local SHIFT_EXCLUSION = {
["b7b45b"] = true,
["f182ee"] = true,
["721ba2"] = true
}
local INVESTIGATOR_COUNTER_GUID = "f182ee" local INVESTIGATOR_COUNTER_GUID = "f182ee"
local PLAY_AREA_ZONE_GUID = "a2f932"
local clueData = {} local clueData = {}
spawnedLocationGUIDs = {} spawnedLocationGUIDs = {}
@ -122,7 +136,49 @@ function onCollisionEnter(collision_info)
end end
end end
-- Move all contents on the play area (cards, tokens, etc) one slot in the given direction. Certain
-- fixed objects will be ignored, as will anything the player has tagged with
-- 'displacement_excluded'
---@param playerColor Color of the player requesting the shift. Used solely to send an error
--- message in the unlikely case that the scripting zone has been deleted
function shiftContentsUp(playerColor)
shiftContents(playerColor, "up")
end
function shiftContentsDown(playerColor)
shiftContents(playerColor, "down")
end
function shiftContentsLeft(playerColor)
shiftContents(playerColor, "left")
end
function shiftContentsRight(playerColor)
shiftContents(playerColor, "right")
end
function shiftContents(playerColor, direction)
local zone = getObjectFromGUID(PLAY_AREA_ZONE_GUID)
if not zone then
broadcastToColor("Scripting zone couldn't be found.", playerColor, "Red")
return
end
for _, object in ipairs(zone.getObjects()) do
if not (SHIFT_EXCLUSION[object.getGUID()] or object.hasTag("displacement_excluded")) then
object.translate(SHIFT_OFFSETS[direction])
end
end
end
-- Returns the current value of the investigator counter from the playmat
---@return Integer. Number of investigators currently set on the counter
function getInvestigatorCount() function getInvestigatorCount()
local investigatorCounter = getObjectFromGUID('f182ee') local investigatorCounter = getObjectFromGUID("f182ee")
return investigatorCounter.getVar("val") return investigatorCounter.getVar("val")
end end
-- Reset the play area's tracking of which cards have had tokens spawned.
function resetSpawnedCards()
spawnedLocationGUIDs = {}
end

View File

@ -0,0 +1,39 @@
do
local PlayAreaApi = { }
local PLAY_AREA_GUID = "721ba2"
-- Returns the current value of the investigator counter from the playmat
---@return Integer. Number of investigators currently set on the counter
PlayAreaApi.getInvestigatorCount = function()
return getObjectFromGUID(PLAY_AREA_GUID).call("getInvestigatorCount")
end
-- Move all contents on the play area (cards, tokens, etc) one slot in the given direction. Certain
-- fixed objects will be ignored, as will anything the player has tagged with
-- 'displacement_excluded'
---@param playerColor Color of the player requesting the shift. Used solely to send an error
--- message in the unlikely case that the scripting zone has been deleted
PlayAreaApi.shiftContentsUp = function(playerColor)
return getObjectFromGUID(PLAY_AREA_GUID).call("shiftContentsUp", playerColor)
end
PlayAreaApi.shiftContentsDown = function(playerColor)
return getObjectFromGUID(PLAY_AREA_GUID).call("shiftContentsDown", playerColor)
end
PlayAreaApi.shiftContentsLeft = function(playerColor)
return getObjectFromGUID(PLAY_AREA_GUID).call("shiftContentsLeft", playerColor)
end
PlayAreaApi.shiftContentsRight = function(playerColor)
return getObjectFromGUID(PLAY_AREA_GUID).call("shiftContentsRight", playerColor)
end
-- Reset the play area's tracking of which cards have had tokens spawned.
PlayAreaApi.resetSpawnedCards = function()
return getObjectFromGUID(PLAY_AREA_GUID).call("resetSpawnedCards")
end
return PlayAreaApi
end

View File

@ -45,14 +45,14 @@ local RESOURCE_COUNTER
-- global variable so it can be reset by the Clean Up Helper -- global variable so it can be reset by the Clean Up Helper
activeInvestigatorId = "00000" activeInvestigatorId = "00000"
local drawButton = false local isDrawButtonVisible = false
function onSave() function onSave()
return JSON.encode({ return JSON.encode({
zoneID = zoneID, zoneID = zoneID,
playerColor = PLAYER_COLOR, playerColor = PLAYER_COLOR,
activeInvestigatorId = activeInvestigatorId, activeInvestigatorId = activeInvestigatorId,
drawButton = drawButton isDrawButtonVisible = isDrawButtonVisible
}) })
end end
@ -104,10 +104,10 @@ function onLoad(save_state)
zoneID = state.zoneID zoneID = state.zoneID
PLAYER_COLOR = state.playerColor PLAYER_COLOR = state.playerColor
activeInvestigatorId = state.activeInvestigatorId activeInvestigatorId = state.activeInvestigatorId
drawButton = state.drawButton isDrawButtonVisible = state.isDrawButtonVisible
end end
showDrawButton(drawButton) showDrawButton(isDrawButtonVisible)
if getObjectFromGUID(zoneID) == nil then spawnDeckZone() end if getObjectFromGUID(zoneID) == nil then spawnDeckZone() end
COLLISION_ENABLED = true COLLISION_ENABLED = true
@ -662,10 +662,10 @@ end
-- Sets this playermat's draw 1 button to visible -- Sets this playermat's draw 1 button to visible
---@param visible Boolean. Whether the draw 1 button should be visible ---@param visible Boolean. Whether the draw 1 button should be visible
function showDrawButton(visible) function showDrawButton(visible)
drawButton = visible isDrawButtonVisible = visible
-- create the "Draw 1" button -- create the "Draw 1" button
if drawButton then if isDrawButtonVisible then
self.createButton({ self.createButton({
label = "Draw 1", label = "Draw 1",
click_function = "doDrawOne", click_function = "doDrawOne",

View File

@ -25,17 +25,17 @@ do
-- Sets the requested playermat's draw 1 button to visible -- Sets the requested playermat's draw 1 button to visible
---@param visible Boolean. Whether the draw 1 button should be visible or not ---@param isDrawButtonVisible Boolean. Whether the draw 1 button should be visible or not
---@param matColor String for one of the active player colors - White, Orange, Green, Red. Also ---@param matColor String for one of the active player colors - White, Orange, Green, Red. Also
-- accepts "All" as a special value which will apply the setting to all four mats. -- accepts "All" as a special value which will apply the setting to all four mats.
PlaymatApi.showDrawButton = function(visible, matColor) PlaymatApi.showDrawButton = function(isDrawButtonVisible, matColor)
for _, mat in ipairs(internal.getMatForColor(matColor)) do for _, mat in ipairs(internal.getMatForColor(matColor)) do
mat.call("showDrawButton", visible) mat.call("showDrawButton", isDrawButtonVisible)
end end
end end
-- Shows or hides the clickable clue counter for the requested playermat -- Shows or hides the clickable clue counter for the requested playermat
---@param visibleButton Boolean. Whether the clickable counter should be present or not ---@param showCounter Boolean. Whether the clickable counter should be present or not
---@param matColor String for one of the active player colors - White, Orange, Green, Red. Also ---@param matColor String for one of the active player colors - White, Orange, Green, Red. Also
-- accepts "All" as a special value which will apply the setting to all four mats. -- accepts "All" as a special value which will apply the setting to all four mats.
PlaymatApi.clickableClues = function(showCounter, matColor) PlaymatApi.clickableClues = function(showCounter, matColor)