ah_sce_unpacked/unpacked/Bag All Player Cards 15bb07/Card Well Connected 66b7d5.ttslua

674 lines
24 KiB
Plaintext
Raw Normal View History

2024-01-06 21:32:07 -05:00
-- Bundled by luabundle {"version":"1.6.0"}
local __bundle_require, __bundle_loaded, __bundle_register, __bundle_modules = (function(superRequire)
local loadingPlaceholder = {[{}] = true}
local register
local modules = {}
local require
local loaded = {}
register = function(name, body)
if not modules[name] then
modules[name] = body
end
end
require = function(name)
local loadedModule = loaded[name]
if loadedModule then
if loadedModule == loadingPlaceholder then
return nil
end
else
if not modules[name] then
if not superRequire then
local identifier = type(name) == 'string' and '\"' .. name .. '\"' or tostring(name)
error('Tried to require ' .. identifier .. ', but no such module has been registered')
else
return superRequire(name)
end
end
loaded[name] = loadingPlaceholder
loadedModule = modules[name](require, loaded, register, modules)
loaded[name] = loadedModule
end
return loadedModule
end
return require, loaded, register, modules
end)(nil)
2024-07-27 21:47:52 -04:00
__bundle_register("playercards/CardsWithHelper", function(require, _LOADED, __bundle_register, __bundle_modules)
--[[ Library for cards that have helpers
This file is used to share code between cards with helpers.
It syncs the visibility of the helper with the option panel and
makes sure the card has the respective tag.
Additionally, it will call 'initiliaze()' and 'shutOff()'
in the parent file if they are present.
Instructions:
1) Define the global variables before requiring this file:
hasXML = true (whether the card has an XML display)
isHelperEnabled = false (default state of the helper, should be 'false')
2) In 'onLoad()'', call 'syncDisplayWithOptionPanel()'
----------------------------------------------------------]]
local optionPanelApi = require("core/OptionPanelApi")
-- if the respective option is enabled in onLoad(), enable the helper
function syncDisplayWithOptionPanel()
self.addTag("CardWithHelper")
local options = optionPanelApi.getOptions()
if options.enableCardHelpers then
setHelperState(true)
2024-01-06 21:32:29 -05:00
else
2024-07-27 21:47:52 -04:00
updateDisplay()
2024-01-06 21:32:29 -05:00
end
2024-07-27 21:47:52 -04:00
end
2024-01-06 21:32:07 -05:00
2024-07-27 21:47:52 -04:00
-- forces a new state
function setHelperState(newState)
isHelperEnabled = newState
updateSave()
updateDisplay()
2024-01-06 21:32:07 -05:00
end
2024-07-27 21:47:52 -04:00
-- toggles the current state
function toggleHelper()
isHelperEnabled = not isHelperEnabled
updateSave()
updateDisplay()
2024-01-06 21:32:07 -05:00
end
2024-07-27 21:47:52 -04:00
-- updates the visibility and calls events (after a small delay to allow XML being set)
2024-01-06 21:32:29 -05:00
function updateDisplay()
2024-07-27 21:47:52 -04:00
Wait.frames(actualDisplayUpdate, 5)
end
function actualDisplayUpdate()
if isHelperEnabled then
self.clearContextMenu()
self.addContextMenuItem("Disable Helper", toggleHelper)
if hasXML then self.UI.show("Helper") end
if initialize then initialize() end
else
self.clearContextMenu()
self.addContextMenuItem("Enable Helper", toggleHelper)
if hasXML then self.UI.hide("Helper") end
if shutOff then shutOff() end
end
2024-01-06 21:32:07 -05:00
end
end)
2024-07-27 21:47:52 -04:00
__bundle_register("playermat/PlayermatApi", function(require, _LOADED, __bundle_register, __bundle_modules)
2024-01-06 21:32:07 -05:00
do
2024-07-27 21:47:52 -04:00
local PlayermatApi = {}
2024-01-06 21:32:29 -05:00
local guidReferenceApi = require("core/GUIDReferenceApi")
2024-02-04 10:51:51 -05:00
local searchLib = require("util/SearchLib")
2024-07-27 21:47:52 -04:00
local localInvestigatorPosition = { x = -1.17, y = 1, z = -0.01 }
2024-01-06 21:32:29 -05:00
-- Convenience function to look up a mat's object by color, or get all mats.
2024-07-27 21:47:52 -04:00
---@param matColor string Color of the playermat - White, Orange, Green, Red or All
---@return table: Single-element if only single playermat is requested
2024-01-06 21:32:29 -05:00
local function getMatForColor(matColor)
if matColor == "All" then
return guidReferenceApi.getObjectsByType("Playermat")
2024-01-06 21:32:07 -05:00
else
2024-01-06 21:32:29 -05:00
return { matColor = guidReferenceApi.getObjectByOwnerAndType(matColor, "Playermat") }
end
end
2024-07-27 21:47:52 -04:00
-- Returns the color of the closest playermat
2024-02-17 19:48:30 -05:00
---@param startPos table Starting position to get the closest mat from
2024-07-27 21:47:52 -04:00
PlayermatApi.getMatColorByPosition = function(startPos)
2024-01-06 21:32:29 -05:00
local result, smallestDistance
for matColor, mat in pairs(getMatForColor("All")) do
local distance = Vector.between(startPos, mat.getPosition()):magnitude()
if smallestDistance == nil or distance < smallestDistance then
smallestDistance = distance
result = matColor
2024-01-06 21:32:07 -05:00
end
end
2024-01-06 21:32:29 -05:00
return result
2024-01-06 21:32:07 -05:00
end
2024-07-27 21:47:52 -04:00
-- Returns the color of the player's hand that is seated next to the playermat
---@param matColor string Color of the playermat - White, Orange, Green or Red (does not support "All")
PlayermatApi.getPlayerColor = function(matColor)
2024-01-06 21:32:29 -05:00
for _, mat in pairs(getMatForColor(matColor)) do
return mat.getVar("playerColor")
end
2024-01-06 21:32:07 -05:00
end
2024-07-27 21:47:52 -04:00
-- Returns the color of the playermat that owns the playercolor's hand
---@param handColor string Color of the playermat
PlayermatApi.getMatColor = function(handColor)
2024-01-06 21:32:29 -05:00
for matColor, mat in pairs(getMatForColor("All")) do
local playerColor = mat.getVar("playerColor")
if playerColor == handColor then
return matColor
end
2024-01-06 21:32:07 -05:00
end
end
2024-07-27 21:47:52 -04:00
-- Instructs a playermat to check for DES
---@param matColor string Color of the playermat - White, Orange, Green, Red or All
PlayermatApi.checkForDES = function(matColor)
2024-01-06 21:32:29 -05:00
for _, mat in pairs(getMatForColor(matColor)) do
2024-07-27 21:47:52 -04:00
mat.call("checkForDES")
2024-01-06 21:32:29 -05:00
end
2024-01-06 21:32:07 -05:00
end
2024-07-27 21:47:52 -04:00
-- Returns if there is the card "Dream-Enhancing Serum" on the requested playermat
---@param matColor string Color of the playermat - White, Orange, Green or Red (does not support "All")
---@return boolean: whether DES is present on the playermat
PlayermatApi.hasDES = function(matColor)
for _, mat in pairs(getMatForColor(matColor)) do
return mat.getVar("hasDES")
end
end
-- gets the slot data for the playermat
---@param matColor string Color of the playermat - White, Orange, Green or Red (does not support "All")
PlayermatApi.getSlotData = function(matColor)
for _, mat in pairs(getMatForColor(matColor)) do
return mat.getTable("slotData")
end
end
-- sets the slot data for the playermat
---@param matColor string Color of the playermat - White, Orange, Green or Red (does not support "All")
---@param newSlotData table New slot data for the playermat
PlayermatApi.loadSlotData = function(matColor, newSlotData)
for _, mat in pairs(getMatForColor(matColor)) do
mat.setTable("slotData", newSlotData)
mat.call("redrawSlotSymbols")
return
end
end
-- Performs a search of the deck area of the requested playermat and returns the result as table
---@param matColor string Color of the playermat - White, Orange, Green or Red (does not support "All")
PlayermatApi.getDeckAreaObjects = function(matColor)
2024-01-06 21:32:29 -05:00
for _, mat in pairs(getMatForColor(matColor)) do
return mat.call("getDeckAreaObjects")
end
2024-01-06 21:32:07 -05:00
end
2024-01-06 21:32:29 -05:00
-- Flips the top card of the deck (useful after deck manipulation for Norman Withers)
2024-07-27 21:47:52 -04:00
---@param matColor string Color of the playermat - White, Orange, Green or Red (does not support "All")
PlayermatApi.flipTopCardFromDeck = function(matColor)
2024-01-06 21:32:29 -05:00
for _, mat in pairs(getMatForColor(matColor)) do
return mat.call("flipTopCardFromDeck")
end
2024-01-06 21:32:07 -05:00
end
2024-07-27 21:47:52 -04:00
-- Returns the position of the discard pile of the requested playermat
---@param matColor string Color of the playermat - White, Orange, Green or Red (does not support "All")
PlayermatApi.getDiscardPosition = function(matColor)
2024-01-06 21:32:29 -05:00
for _, mat in pairs(getMatForColor(matColor)) do
return mat.call("returnGlobalDiscardPosition")
end
2024-01-06 21:32:07 -05:00
end
2024-07-27 21:47:52 -04:00
-- Returns the position of the draw pile of the requested playermat
---@param matColor string Color of the playermat - White, Orange, Green or Red (does not support "All")
PlayermatApi.getDrawPosition = function(matColor)
2024-06-09 10:10:21 -04:00
for _, mat in pairs(getMatForColor(matColor)) do
return mat.call("returnGlobalDrawPosition")
end
end
2024-01-06 21:32:07 -05:00
-- Transforms a local position into a global position
2024-02-17 19:48:30 -05:00
---@param localPos table Local position to be transformed
2024-07-27 21:47:52 -04:00
---@param matColor string Color of the playermat - White, Orange, Green or Red (does not support "All")
PlayermatApi.transformLocalPosition = function(localPos, matColor)
2024-01-06 21:32:29 -05:00
for _, mat in pairs(getMatForColor(matColor)) do
return mat.positionToWorld(localPos)
end
2024-01-06 21:32:07 -05:00
end
2024-07-27 21:47:52 -04:00
-- Returns the rotation of the requested playermat
---@param matColor string Color of the playermat - White, Orange, Green or Red (does not support "All")
PlayermatApi.returnRotation = function(matColor)
2024-01-06 21:32:29 -05:00
for _, mat in pairs(getMatForColor(matColor)) do
return mat.getRotation()
end
2024-01-06 21:32:07 -05:00
end
2024-02-04 10:51:51 -05:00
-- Returns a table with spawn data (position and rotation) for a helper object
2024-07-27 21:47:52 -04:00
---@param matColor string Color of the playermat - White, Orange, Green, Red or All
2024-02-17 19:48:30 -05:00
---@param helperName string Name of the helper object
2024-07-27 21:47:52 -04:00
PlayermatApi.getHelperSpawnData = function(matColor, helperName)
2024-02-04 10:51:51 -05:00
local resultTable = {}
local localPositionTable = {
["Hand Helper"] = {0.05, 0, -1.182},
["Search Assistant"] = {-0.3, 0, -1.182}
}
for color, mat in pairs(getMatForColor(matColor)) do
resultTable[color] = {
position = mat.positionToWorld(localPositionTable[helperName]),
rotation = mat.getRotation()
}
end
return resultTable
end
2024-07-27 21:47:52 -04:00
-- Triggers the Upkeep for the requested playermat
---@param matColor string Color of the playermat - White, Orange, Green, Red or All
2024-02-17 19:48:30 -05:00
---@param playerColor string Color of the calling player (for messages)
2024-07-27 21:47:52 -04:00
PlayermatApi.doUpkeepFromHotkey = function(matColor, playerColor)
2024-01-06 21:32:29 -05:00
for _, mat in pairs(getMatForColor(matColor)) do
mat.call("doUpkeepFromHotkey", playerColor)
end
end
2024-07-27 21:47:52 -04:00
-- Handles discarding for the requested playermat for the provided list of objects
---@param matColor string Color of the playermat - White, Orange, Green or Red (does not support "All")
2024-02-17 19:48:30 -05:00
---@param objList table List of objects to discard
2024-07-27 21:47:52 -04:00
PlayermatApi.discardListOfObjects = function(matColor, objList)
2024-01-06 21:32:29 -05:00
for _, mat in pairs(getMatForColor(matColor)) do
mat.call("discardListOfObjects", objList)
end
2024-01-06 21:32:07 -05:00
end
-- Returns the active investigator id
2024-07-27 21:47:52 -04:00
---@param matColor string Color of the playermat - White, Orange, Green or Red (does not support "All")
PlayermatApi.returnInvestigatorId = function(matColor)
2024-01-06 21:32:29 -05:00
for _, mat in pairs(getMatForColor(matColor)) do
return mat.getVar("activeInvestigatorId")
end
2024-01-06 21:32:07 -05:00
end
2024-07-27 21:47:52 -04:00
-- Returns the class of the active investigator
---@param matColor string Color of the playermat - White, Orange, Green or Red (does not support "All")
PlayermatApi.returnInvestigatorClass = function(matColor)
for _, mat in pairs(getMatForColor(matColor)) do
return mat.getVar("activeInvestigatorClass")
end
end
2024-06-09 10:10:21 -04:00
-- Returns the position for encounter card drawing
2024-07-27 21:47:52 -04:00
---@param matColor string Color of the playermat - White, Orange, Green or Red (does not support "All")
2024-06-09 10:10:21 -04:00
---@param stack boolean If true, returns the leftmost position instead of the first empty from the right
2024-07-27 21:47:52 -04:00
PlayermatApi.getEncounterCardDrawPosition = function(matColor, stack)
2024-06-09 10:10:21 -04:00
for _, mat in pairs(getMatForColor(matColor)) do
return Vector(mat.call("getEncounterCardDrawPosition", stack))
end
end
2024-07-27 21:47:52 -04:00
-- Sets the requested playermat's snap points to limit snapping to matching card types or not. If
2024-01-06 21:32:07 -05:00
-- matchTypes is true, the main card slot snap points will only snap assets, while the
-- investigator area point will only snap Investigators. If matchTypes is false, snap points will
-- be reset to snap all cards.
2024-02-17 19:48:30 -05:00
---@param matchCardTypes boolean Whether snap points should only snap for the matching card types
2024-07-27 21:47:52 -04:00
---@param matColor string Color of the playermat - White, Orange, Green, Red or All
PlayermatApi.setLimitSnapsByType = function(matchCardTypes, matColor)
2024-01-06 21:32:29 -05:00
for _, mat in pairs(getMatForColor(matColor)) do
2024-01-06 21:32:07 -05:00
mat.call("setLimitSnapsByType", matchCardTypes)
end
end
2024-07-27 21:47:52 -04:00
-- Sets the requested playermat's draw 1 button to visible
2024-02-17 19:48:30 -05:00
---@param isDrawButtonVisible boolean Whether the draw 1 button should be visible or not
2024-07-27 21:47:52 -04:00
---@param matColor string Color of the playermat - White, Orange, Green, Red or All
PlayermatApi.showDrawButton = function(isDrawButtonVisible, matColor)
2024-01-06 21:32:29 -05:00
for _, mat in pairs(getMatForColor(matColor)) do
2024-01-06 21:32:07 -05:00
mat.call("showDrawButton", isDrawButtonVisible)
end
end
2024-07-27 21:47:52 -04:00
-- Shows or hides the clickable clue counter for the requested playermat
2024-02-17 19:48:30 -05:00
---@param showCounter boolean Whether the clickable counter should be present or not
2024-07-27 21:47:52 -04:00
---@param matColor string Color of the playermat - White, Orange, Green, Red or All
PlayermatApi.clickableClues = function(showCounter, matColor)
2024-01-06 21:32:29 -05:00
for _, mat in pairs(getMatForColor(matColor)) do
2024-01-06 21:32:07 -05:00
mat.call("clickableClues", showCounter)
end
end
2024-07-27 21:47:52 -04:00
-- Toggles the use of class textures for the requested playermat
---@param state boolean Whether the class texture should be used or not
---@param matColor string Color of the playermat - White, Orange, Green, Red or All
PlayermatApi.useClassTexture = function(state, matColor)
for _, mat in pairs(getMatForColor(matColor)) do
mat.call("useClassTexture", state)
end
end
-- Removes all clues (to the trash for tokens and counters set to 0) for the requested playermat
---@param matColor string Color of the playermat - White, Orange, Green, Red or All
PlayermatApi.removeClues = function(matColor)
2024-01-06 21:32:29 -05:00
for _, mat in pairs(getMatForColor(matColor)) do
2024-01-06 21:32:07 -05:00
mat.call("removeClues")
end
end
2024-07-27 21:47:52 -04:00
-- Reports the clue count for the requested playermat
2024-02-17 19:48:30 -05:00
---@param useClickableCounters boolean Controls which type of counter is getting checked
2024-07-27 21:47:52 -04:00
PlayermatApi.getClueCount = function(useClickableCounters, matColor)
2024-01-06 21:32:07 -05:00
local count = 0
2024-01-06 21:32:29 -05:00
for _, mat in pairs(getMatForColor(matColor)) do
count = count + mat.call("getClueCount", useClickableCounters)
2024-01-06 21:32:07 -05:00
end
return count
end
2024-06-09 10:10:21 -04:00
-- Updates the specified owned counter
2024-07-27 21:47:52 -04:00
---@param matColor string Color of the playermat - White, Orange, Green, Red or All
2024-02-17 19:48:30 -05:00
---@param type string Counter to target
---@param newValue number Value to set the counter to
---@param modifier number If newValue is not provided, the existing value will be adjusted by this modifier
2024-07-27 21:47:52 -04:00
PlayermatApi.updateCounter = function(matColor, type, newValue, modifier)
2024-01-06 21:32:29 -05:00
for _, mat in pairs(getMatForColor(matColor)) do
mat.call("updateCounter", { type = type, newValue = newValue, modifier = modifier })
end
end
2024-07-27 21:47:52 -04:00
-- Triggers the draw function for the specified playermat
---@param matColor string Color of the playermat - White, Orange, Green, Red or All
2024-02-17 19:48:30 -05:00
---@param number number Amount of cards to draw
2024-07-27 21:47:52 -04:00
PlayermatApi.drawCardsWithReshuffle = function(matColor, number)
2024-02-04 10:51:51 -05:00
for _, mat in pairs(getMatForColor(matColor)) do
mat.call("drawCardsWithReshuffle", number)
end
end
2024-06-09 10:10:21 -04:00
-- Returns the resource counter amount
2024-07-27 21:47:52 -04:00
---@param matColor string Color of the playermat - White, Orange, Green or Red (does not support "All")
2024-02-17 19:48:30 -05:00
---@param type string Counter to target
2024-07-27 21:47:52 -04:00
PlayermatApi.getCounterValue = function(matColor, type)
2024-01-06 21:32:29 -05:00
for _, mat in pairs(getMatForColor(matColor)) do
return mat.call("getCounterValue", type)
2024-01-06 21:32:07 -05:00
end
end
2024-06-09 10:10:21 -04:00
-- Returns a list of mat colors that have an investigator placed
2024-07-27 21:47:52 -04:00
PlayermatApi.getUsedMatColors = function()
2024-02-04 10:51:51 -05:00
local usedColors = {}
for matColor, mat in pairs(getMatForColor("All")) do
local searchPos = mat.positionToWorld(localInvestigatorPosition)
local searchResult = searchLib.atPosition(searchPos, "isCardOrDeck")
if #searchResult > 0 then
table.insert(usedColors, matColor)
end
end
return usedColors
end
2024-07-27 21:47:52 -04:00
-- Returns investigator name
---@param matColor string Color of the playmat - White, Orange, Green or Red (does not support "All")
PlayermatApi.getInvestigatorName = function(matColor)
for _, mat in pairs(getMatForColor(matColor)) do
local searchPos = mat.positionToWorld(localInvestigatorPosition)
local searchResult = searchLib.atPosition(searchPos, "isCardOrDeck")
if #searchResult == 1 then
return searchResult[1].getName()
end
end
return ""
end
2024-06-09 10:10:21 -04:00
-- Resets the specified skill tracker to "1, 1, 1, 1"
2024-07-27 21:47:52 -04:00
---@param matColor string Color of the playermat - White, Orange, Green, Red or All
PlayermatApi.resetSkillTracker = function(matColor)
2024-01-06 21:32:29 -05:00
for _, mat in pairs(getMatForColor(matColor)) do
mat.call("resetSkillTracker")
end
end
2024-07-27 21:47:52 -04:00
-- Redraws the XML for the slot symbols based on the slotData table
---@param matColor string Color of the playermat - White, Orange, Green, Red or All
PlayermatApi.redrawSlotSymbols = function(matColor)
for _, mat in pairs(getMatForColor(matColor)) do
mat.call("redrawSlotSymbols")
end
end
-- Finds all objects on the playermat and associated set aside zone and returns a table
---@param matColor string Color of the playermat - White, Orange, Green, Red or All
2024-02-17 19:48:30 -05:00
---@param filter string Name of the filte function (see util/SearchLib)
2024-07-27 21:47:52 -04:00
PlayermatApi.searchAroundPlayermat = function(matColor, filter)
2024-01-06 21:32:29 -05:00
local objList = {}
for _, mat in pairs(getMatForColor(matColor)) do
for _, obj in ipairs(mat.call("searchAroundSelf", filter)) do
table.insert(objList, obj)
end
end
return objList
2024-01-06 21:32:07 -05:00
end
-- Discard a non-hidden card from the corresponding player's hand
2024-07-27 21:47:52 -04:00
---@param matColor string Color of the playermat - White, Orange, Green, Red or All
PlayermatApi.doDiscardOne = function(matColor)
2024-01-06 21:32:29 -05:00
for _, mat in pairs(getMatForColor(matColor)) do
2024-01-06 21:32:07 -05:00
mat.call("doDiscardOne")
end
end
2024-07-27 21:47:52 -04:00
-- Triggers the metadata sync for all playermats
PlayermatApi.syncAllCustomizableCards = function()
2024-01-06 21:32:29 -05:00
for _, mat in pairs(getMatForColor("All")) do
2024-01-06 21:32:07 -05:00
mat.call("syncAllCustomizableCards")
end
end
2024-07-27 21:47:52 -04:00
return PlayermatApi
end
end)
__bundle_register("core/OptionPanelApi", function(require, _LOADED, __bundle_register, __bundle_modules)
do
local OptionPanelApi = {}
-- loads saved options
---@param options table Set a new state for the option table
OptionPanelApi.loadSettings = function(options)
return Global.call("loadSettings", options)
end
---@return any: Table of option panel state
OptionPanelApi.getOptions = function()
return Global.getTable("optionPanel")
end
return OptionPanelApi
2024-01-06 21:32:29 -05:00
end
end)
2024-06-09 10:10:21 -04:00
__bundle_register("core/GUIDReferenceApi", function(require, _LOADED, __bundle_register, __bundle_modules)
do
local GUIDReferenceApi = {}
local function getGuidHandler()
return getObjectFromGUID("123456")
end
-- Returns the matching object
---@param owner string Parent object for this search
---@param type string Type of object to search for
---@return any: Object reference to the matching object
GUIDReferenceApi.getObjectByOwnerAndType = function(owner, type)
return getGuidHandler().call("getObjectByOwnerAndType", { owner = owner, type = type })
end
-- Returns all matching objects as a table with references
---@param type string Type of object to search for
---@return table: List of object references to matching objects
GUIDReferenceApi.getObjectsByType = function(type)
return getGuidHandler().call("getObjectsByType", type)
end
-- Returns all matching objects as a table with references
---@param owner string Parent object for this search
---@return table: List of object references to matching objects
GUIDReferenceApi.getObjectsByOwner = function(owner)
return getGuidHandler().call("getObjectsByOwner", owner)
end
-- Sends new information to the reference handler to edit the main index
---@param owner string Parent of the object
---@param type string Type of the object
---@param guid string GUID of the object
GUIDReferenceApi.editIndex = function(owner, type, guid)
return getGuidHandler().call("editIndex", {
owner = owner,
type = type,
guid = guid
})
end
-- Returns the owner of an object or the object it's located on
---@param object tts__GameObject Object for this search
---@return string: Parent of the object or object it's located on
GUIDReferenceApi.getOwnerOfObject = function(object)
return getGuidHandler().call("getOwnerOfObject", object)
end
return GUIDReferenceApi
end
end)
2024-03-10 09:56:22 -04:00
__bundle_register("util/SearchLib", function(require, _LOADED, __bundle_register, __bundle_modules)
2024-01-06 21:32:29 -05:00
do
2024-03-10 09:56:22 -04:00
local SearchLib = {}
local filterFunctions = {
isCard = function(x) return x.type == "Card" end,
isDeck = function(x) return x.type == "Deck" end,
isCardOrDeck = function(x) return x.type == "Card" or x.type == "Deck" end,
isClue = function(x) return x.memo == "clueDoom" and x.is_face_down == false end,
2024-07-27 21:47:52 -04:00
isTileOrToken = function(x) return x.type == "Tile" end,
isUniversalToken = function(x) return x.getMemo() == "universalActionAbility" end,
2024-03-10 09:56:22 -04:00
}
2024-01-06 21:32:29 -05:00
2024-03-10 09:56:22 -04:00
-- performs the actual search and returns a filtered list of object references
---@param pos tts__Vector Global position
---@param rot? tts__Vector Global rotation
---@param size table Size
---@param filter? string Name of the filter function
---@param direction? table Direction (positive is up)
---@param maxDistance? number Distance for the cast
local function returnSearchResult(pos, rot, size, filter, direction, maxDistance)
local filterFunc
if filter then
filterFunc = filterFunctions[filter]
end
local searchResult = Physics.cast({
origin = pos,
direction = direction or { 0, 1, 0 },
orientation = rot or { 0, 0, 0 },
type = 3,
size = size,
max_distance = maxDistance or 0
})
2024-07-27 21:47:52 -04:00
-- filter the result for matching objects
2024-03-10 09:56:22 -04:00
local objList = {}
for _, v in ipairs(searchResult) do
if not filter or filterFunc(v.hit_object) then
table.insert(objList, v.hit_object)
end
end
return objList
2024-01-06 21:32:07 -05:00
end
2024-03-10 09:56:22 -04:00
-- searches the specified area
SearchLib.inArea = function(pos, rot, size, filter)
return returnSearchResult(pos, rot, size, filter)
2024-01-06 21:32:07 -05:00
end
2024-03-10 09:56:22 -04:00
-- searches the area on an object
SearchLib.onObject = function(obj, filter)
2024-07-27 21:47:52 -04:00
local pos = obj.getPosition()
local size = obj.getBounds().size:setAt("y", 1)
2024-03-10 09:56:22 -04:00
return returnSearchResult(pos, _, size, filter)
2024-01-06 21:32:29 -05:00
end
2024-03-10 09:56:22 -04:00
-- searches the specified position (a single point)
SearchLib.atPosition = function(pos, filter)
2024-07-27 21:47:52 -04:00
local size = { 0.1, 2, 0.1 }
2024-03-10 09:56:22 -04:00
return returnSearchResult(pos, _, size, filter)
2024-01-06 21:32:29 -05:00
end
2024-03-10 09:56:22 -04:00
-- searches below the specified position (downwards until y = 0)
SearchLib.belowPosition = function(pos, filter)
2024-07-27 21:47:52 -04:00
local size = { 0.1, 2, 0.1 }
local direction = { 0, -1, 0 }
local maxDistance = pos.y
2024-03-10 09:56:22 -04:00
return returnSearchResult(pos, _, size, filter, direction, maxDistance)
2024-02-04 10:51:51 -05:00
end
2024-03-10 09:56:22 -04:00
return SearchLib
2024-01-06 21:32:07 -05:00
end
end)
2024-06-09 10:10:21 -04:00
__bundle_register("__root", function(require, _LOADED, __bundle_register, __bundle_modules)
require("playercards/cards/WellConnected")
end)
2024-07-27 21:47:52 -04:00
__bundle_register("playercards/cards/WellConnected", function(require, _LOADED, __bundle_register, __bundle_modules)
require("playercards/CardsWithHelper")
local playermatApi = require("playermat/PlayermatApi")
-- intentionally global
hasXML = false
isHelperEnabled = false
local modValue, loopId
local buttonParameters = {
click_function = "shutOff",
function_owner = self,
position = { 0.88, 0.5, -1.33 },
font_size = 150,
width = 175,
height = 175
}
function updateSave()
self.script_state = JSON.encode({
isHelperEnabled = isHelperEnabled,
loopId = loopId
})
end
function onLoad(savedData)
if savedData and savedData ~= "" then
local loadedData = JSON.decode(savedData)
isHelperEnabled = loadedData.isHelperEnabled
loopId = loadedData.loopId
end
-- use metadata to detect level and adjust modValue accordingly
if JSON.decode(self.getGMNotes()).level == 0 then
modValue = 5
else
modValue = 4
end
syncDisplayWithOptionPanel()
end
function initialize()
self.clearButtons()
self.createButton(buttonParameters)
updateButton()
loopId = Wait.time(updateButton, 2, -1)
end
function shutOff()
self.clearButtons()
if loopId then
Wait.stop(loopId)
loopId = nil
end
end
function updateButton()
local matColor = playermatApi.getMatColorByPosition(self.getPosition())
local resources = playermatApi.getCounterValue(matColor, "ResourceCounter")
local count = tostring(math.floor(resources / modValue))
self.editButton({ index = 0, label = count })
end
end)
2024-01-06 21:32:07 -05:00
return __bundle_require("__root")