more annotations
This commit is contained in:
parent
bb82e6b432
commit
f9faea728f
@ -26,26 +26,17 @@ end
|
||||
function updateMemoryWithMoves()
|
||||
memoryList = memoryListBackup
|
||||
--get the first transposed object's coordinates
|
||||
local obj = getObjectFromGUID(moveGuid)
|
||||
local obj = getObjectFromGUID(moveGuid or "")
|
||||
|
||||
-- p1 is where needs to go, p2 is where it was
|
||||
local refObjPos = memoryList[moveGuid].pos
|
||||
local deltaPos = findOffsetDistance(obj.getPosition(), refObjPos, nil)
|
||||
local movedRotation = obj.getRotation()
|
||||
for guid, entry in pairs(memoryList) do
|
||||
memoryList[guid].pos.x = entry.pos.x - deltaPos.x
|
||||
memoryList[guid].pos.y = entry.pos.y - deltaPos.y
|
||||
memoryList[guid].pos.z = entry.pos.z - deltaPos.z
|
||||
-- memoryList[guid].rot.x = movedRotation.x
|
||||
-- memoryList[guid].rot.y = movedRotation.y
|
||||
-- memoryList[guid].rot.z = movedRotation.z
|
||||
end
|
||||
|
||||
--theList[obj.getGUID()] = {
|
||||
-- pos={x=round(pos.x,4), y=round(pos.y,4), z=round(pos.z,4)},
|
||||
-- rot={x=round(rot.x,4), y=round(rot.y,4), z=round(rot.z,4)},
|
||||
-- lock=obj.getLock()
|
||||
--}
|
||||
moveList = {}
|
||||
end
|
||||
|
||||
|
@ -26,26 +26,17 @@ end
|
||||
function updateMemoryWithMoves()
|
||||
memoryList = memoryListBackup
|
||||
--get the first transposed object's coordinates
|
||||
local obj = getObjectFromGUID(moveGuid)
|
||||
local obj = getObjectFromGUID(moveGuid or "")
|
||||
|
||||
-- p1 is where needs to go, p2 is where it was
|
||||
local refObjPos = memoryList[moveGuid].pos
|
||||
local deltaPos = findOffsetDistance(obj.getPosition(), refObjPos, nil)
|
||||
local movedRotation = obj.getRotation()
|
||||
for guid, entry in pairs(memoryList) do
|
||||
memoryList[guid].pos.x = entry.pos.x - deltaPos.x
|
||||
memoryList[guid].pos.y = entry.pos.y - deltaPos.y
|
||||
memoryList[guid].pos.z = entry.pos.z - deltaPos.z
|
||||
-- memoryList[guid].rot.x = movedRotation.x
|
||||
-- memoryList[guid].rot.y = movedRotation.y
|
||||
-- memoryList[guid].rot.z = movedRotation.z
|
||||
end
|
||||
|
||||
--theList[obj.getGUID()] = {
|
||||
-- pos={x=round(pos.x,4), y=round(pos.y,4), z=round(pos.z,4)},
|
||||
-- rot={x=round(rot.x,4), y=round(rot.y,4), z=round(rot.z,4)},
|
||||
-- lock=obj.getLock()
|
||||
--}
|
||||
moveList = {}
|
||||
end
|
||||
|
||||
|
@ -243,26 +243,17 @@ end
|
||||
function updateMemoryWithMoves()
|
||||
memoryList = memoryListBackup
|
||||
--get the first transposed object's coordinates
|
||||
local obj = getObjectFromGUID(moveGuid)
|
||||
local obj = getObjectFromGUID(moveGuid or "")
|
||||
|
||||
-- p1 is where needs to go, p2 is where it was
|
||||
local refObjPos = memoryList[moveGuid].pos
|
||||
local deltaPos = findOffsetDistance(obj.getPosition(), refObjPos, nil)
|
||||
local movedRotation = obj.getRotation()
|
||||
for guid, entry in pairs(memoryList) do
|
||||
memoryList[guid].pos.x = entry.pos.x - deltaPos.x
|
||||
memoryList[guid].pos.y = entry.pos.y - deltaPos.y
|
||||
memoryList[guid].pos.z = entry.pos.z - deltaPos.z
|
||||
-- memoryList[guid].rot.x = movedRotation.x
|
||||
-- memoryList[guid].rot.y = movedRotation.y
|
||||
-- memoryList[guid].rot.z = movedRotation.z
|
||||
end
|
||||
|
||||
--theList[obj.getGUID()] = {
|
||||
-- pos={x=round(pos.x,4), y=round(pos.y,4), z=round(pos.z,4)},
|
||||
-- rot={x=round(rot.x,4), y=round(rot.y,4), z=round(rot.z,4)},
|
||||
-- lock=obj.getLock()
|
||||
--}
|
||||
moveList = {}
|
||||
end
|
||||
|
||||
@ -809,4 +800,3 @@ end
|
||||
function AllMemoryBagsInScene:getGuidList()
|
||||
return Global.getTable(self.NAME_OF_GLOBAL_VARIABLE) or {}
|
||||
end
|
||||
|
||||
|
@ -63,8 +63,11 @@ do
|
||||
return false, "Indexing not complete"
|
||||
end
|
||||
|
||||
local deckUri = { configuration.api_uri,
|
||||
isPrivate and configuration.private_deck or configuration.public_deck, deckId }
|
||||
local deckUri = {
|
||||
configuration.api_uri,
|
||||
isPrivate and configuration.private_deck or configuration.public_deck,
|
||||
deckId
|
||||
}
|
||||
|
||||
local deck = Request.start(deckUri, function(status)
|
||||
if string.find(status.text, "<!DOCTYPE html>") then
|
||||
@ -408,9 +411,9 @@ do
|
||||
is_successful = false
|
||||
}
|
||||
|
||||
-- Creates a new instance of a Request. Should not be directly called. Instead use Request.start and Request.deferred.
|
||||
---@param uri string
|
||||
---@param configure fun(request: Request, status: WebRequestStatus)
|
||||
-- Creates a new instance of a Request. Should not be directly called. Instead use Request.start() and Request.deferred().
|
||||
---@param uri table
|
||||
---@param configure fun(request, status)
|
||||
---@return Request
|
||||
function Request:new(uri, configure)
|
||||
local this = {}
|
||||
@ -431,9 +434,8 @@ do
|
||||
-- Creates a new request. on_success should set the request's is_done, is_successful, and content variables.
|
||||
-- Deferred should be used when you don't want to set is_done immediately (such as if you want to wait for another request to finish)
|
||||
---@param uri table
|
||||
---@param on_success fun(request: Request, status: WebRequestStatus, vararg: any)
|
||||
---@param on_error fun(status: WebRequestStatus)|nil
|
||||
---@vararg any[]
|
||||
---@param on_success fun(request, status, vararg)
|
||||
---@param on_error fun(status)|nil
|
||||
---@return Request
|
||||
function Request.deferred(uri, on_success, on_error, ...)
|
||||
local parameters = table.pack(...)
|
||||
@ -450,10 +452,10 @@ do
|
||||
end)
|
||||
end
|
||||
|
||||
-- Creates a new request. on_success should return weather the resultant data is as expected, and the processed content of the request.
|
||||
-- Creates a new request. on_success should return whether the resultant data is as expected, and the processed content of the request.
|
||||
---@param uri table
|
||||
---@param on_success fun(status: WebRequestStatus, vararg: any): boolean, any
|
||||
---@param on_error nil|fun(status: WebRequestStatus, vararg: any): string
|
||||
---@param on_success fun(status, vararg): boolean, any
|
||||
---@param on_error nil|fun(status, vararg): string
|
||||
---@vararg any
|
||||
---@return Request
|
||||
function Request.start(uri, on_success, on_error, ...)
|
||||
|
@ -6,16 +6,18 @@ do
|
||||
return guidReferenceApi.getObjectByOwnerAndType("Mythos", "DeckImporter")
|
||||
end
|
||||
|
||||
---@class uiStateTable
|
||||
---@field redDeck string Deck ID to load for the red player
|
||||
---@field orangeDeck string Deck ID to load for the orange player
|
||||
---@field whiteDeck string Deck ID to load for the white player
|
||||
---@field greenDeck string Deck ID to load for the green player
|
||||
---@field privateDeck boolean True to load a private deck, false to load a public deck
|
||||
---@field loadNewest boolean True if the most upgraded version of the deck should be loaded
|
||||
---@field investigators boolean True if investigator cards should be spawned
|
||||
|
||||
-- Returns a table with the full state of the UI, including options and deck IDs.
|
||||
-- This can be used to persist via onSave(), or provide values for a load operation
|
||||
-- Table values:
|
||||
-- redDeck: Deck ID to load for the red player
|
||||
-- orangeDeck: Deck ID to load for the orange player
|
||||
-- whiteDeck: Deck ID to load for the white player
|
||||
-- greenDeck: Deck ID to load for the green player
|
||||
-- private: True to load a private deck, false to load a public deck
|
||||
-- loadNewest: True if the most upgraded version of the deck should be loaded
|
||||
-- investigators: True if investigator cards should be spawned
|
||||
---@return uiStateTable uiStateTable Contains data about the current UI state
|
||||
DeckImporterApi.getUiState = function()
|
||||
local passthroughTable = {}
|
||||
for k,v in pairs(getDeckImporter().call("getUiState")) do
|
||||
@ -25,15 +27,7 @@ do
|
||||
end
|
||||
|
||||
-- Updates the state of the UI based on the provided table. Any values not provided will be left the same.
|
||||
---@param uiStateTable table Table of values to update on importer
|
||||
-- Table values:
|
||||
-- redDeck: Deck ID to load for the red player
|
||||
-- orangeDeck: Deck ID to load for the orange player
|
||||
-- whiteDeck: Deck ID to load for the white player
|
||||
-- greenDeck: Deck ID to load for the green player
|
||||
-- private: True to load a private deck, false to load a public deck
|
||||
-- loadNewest: True if the most upgraded version of the deck should be loaded
|
||||
-- investigators: True if investigator cards should be spawned
|
||||
---@return uiStateTable uiStateTable Contains data about the current UI state
|
||||
DeckImporterApi.setUiState = function(uiStateTable)
|
||||
return getDeckImporter().call("setUiState", uiStateTable)
|
||||
end
|
||||
|
@ -59,7 +59,7 @@ function buildDeck(playerColor, deckId)
|
||||
arkhamDb.getDecklist(
|
||||
playerColor,
|
||||
deckId,
|
||||
uiState.private,
|
||||
uiState.privateDeck,
|
||||
uiState.loadNewest,
|
||||
uiState.investigators,
|
||||
loadCards)
|
||||
|
@ -27,21 +27,14 @@ local loadInvestigators = false
|
||||
|
||||
-- Returns a table with the full state of the UI, including options and deck IDs.
|
||||
-- This can be used to persist via onSave(), or provide values for a load operation
|
||||
-- Table values:
|
||||
-- redDeck: Deck ID to load for the red player
|
||||
-- orangeDeck: Deck ID to load for the orange player
|
||||
-- whiteDeck: Deck ID to load for the white player
|
||||
-- greenDeck: Deck ID to load for the green player
|
||||
-- private: True to load a private deck, false to load a public deck
|
||||
-- loadNewest: True if the most upgraded version of the deck should be loaded
|
||||
-- investigators: True if investigator cards should be spawned
|
||||
---@return uiStateTable uiStateTable Contains data about the current UI state
|
||||
function getUiState()
|
||||
return {
|
||||
redDeck = redDeckId,
|
||||
orangeDeck = orangeDeckId,
|
||||
whiteDeck = whiteDeckId,
|
||||
greenDeck = greenDeckId,
|
||||
private = privateDeck,
|
||||
privateDeck = privateDeck,
|
||||
loadNewest = loadNewestDeck,
|
||||
investigators = loadInvestigators
|
||||
}
|
||||
@ -49,14 +42,6 @@ end
|
||||
|
||||
-- Updates the state of the UI based on the provided table. Any values not provided will be left the same.
|
||||
---@param uiStateTable table Table of values to update on importer
|
||||
-- Table values:
|
||||
-- redDeck: Deck ID to load for the red player
|
||||
-- orangeDeck: Deck ID to load for the orange player
|
||||
-- whiteDeck: Deck ID to load for the white player
|
||||
-- greenDeck: Deck ID to load for the green player
|
||||
-- private: True to load a private deck, false to load a public deck
|
||||
-- loadNewest: True if the most upgraded version of the deck should be loaded
|
||||
-- investigators: True if investigator cards should be spawned
|
||||
function setUiState(uiStateTable)
|
||||
self.clearButtons()
|
||||
self.clearInputs()
|
||||
@ -70,7 +55,7 @@ function initializeUi(savedUiState)
|
||||
orangeDeckId = savedUiState.orangeDeck
|
||||
whiteDeckId = savedUiState.whiteDeck
|
||||
greenDeckId = savedUiState.greenDeck
|
||||
privateDeck = savedUiState.private
|
||||
privateDeck = savedUiState.privateDeck
|
||||
loadNewestDeck = savedUiState.loadNewest
|
||||
loadInvestigators = savedUiState.investigators
|
||||
end
|
||||
|
@ -63,7 +63,6 @@ function initializeState()
|
||||
|
||||
-- count tokens in the bag
|
||||
local chaosBag = chaosBagApi.findChaosBag()
|
||||
local tokens = {}
|
||||
for _, v in ipairs(chaosBag.getObjects()) do
|
||||
if v.name == "Bless" then
|
||||
numInPlay.Bless = numInPlay.Bless + 1
|
||||
@ -207,7 +206,7 @@ end
|
||||
---------------------------------------------------------
|
||||
|
||||
-- returns a formatted string with information about the provided token type (bless / curse)
|
||||
---@param type string "Bless" or "Curse"
|
||||
---@param type string Type of chaos token ("Bless" or "Curse")
|
||||
---@param omitBrackets? boolean Controls whether the brackets should be omitted from the return
|
||||
---@return string tokenCount
|
||||
function formatTokenCount(type, omitBrackets)
|
||||
|
@ -15,16 +15,22 @@ do
|
||||
end
|
||||
|
||||
-- updates the internal count (called by cards that seal bless/curse tokens)
|
||||
---@param type string Type of chaos token ("Bless" or "Curse")
|
||||
---@param guid string GUID of the token
|
||||
BlessCurseManagerApi.sealedToken = function(type, guid)
|
||||
getManager().call("sealedToken", { type = type, guid = guid })
|
||||
end
|
||||
|
||||
-- updates the internal count (called by cards that seal bless/curse tokens)
|
||||
---@param type string Type of chaos token ("Bless" or "Curse")
|
||||
---@param guid string GUID of the token
|
||||
BlessCurseManagerApi.releasedToken = function(type, guid)
|
||||
getManager().call("releasedToken", { type = type, guid = guid })
|
||||
end
|
||||
|
||||
-- updates the internal count (called by cards that seal bless/curse tokens)
|
||||
---@param type string Type of chaos token ("Bless" or "Curse")
|
||||
---@param guid string GUID of the token
|
||||
BlessCurseManagerApi.returnedToken = function(type, guid)
|
||||
getManager().call("returnedToken", { type = type, guid = guid })
|
||||
end
|
||||
|
@ -29,13 +29,14 @@ do
|
||||
end
|
||||
|
||||
-- returns all sealed tokens on cards to the chaos bag
|
||||
---@param playerColor string Color of the player to show the broadcast to
|
||||
ChaosBagApi.releaseAllSealedTokens = function(playerColor)
|
||||
return Global.call("releaseAllSealedTokens", playerColor)
|
||||
end
|
||||
|
||||
-- returns all drawn tokens to the chaos bag
|
||||
ChaosBagApi.returnChaosTokens = function(playerColor)
|
||||
return Global.call("returnChaosTokens", playerColor)
|
||||
ChaosBagApi.returnChaosTokens = function()
|
||||
return Global.call("returnChaosTokens")
|
||||
end
|
||||
|
||||
-- removes the specified chaos token from the chaos bag
|
||||
@ -45,7 +46,7 @@ do
|
||||
end
|
||||
|
||||
-- returns a chaos token to the bag and calls all relevant functions
|
||||
---@param token tts__GameObject Chaos Token to return
|
||||
---@param token tts__GameObject Chaos token to return
|
||||
ChaosBagApi.returnChaosTokenToBag = function(token)
|
||||
return Global.call("returnChaosTokenToBag", token)
|
||||
end
|
||||
@ -66,6 +67,8 @@ do
|
||||
end
|
||||
|
||||
-- called by playermats (by the "Draw chaos token" button)
|
||||
---@param mat tts__GameObject Playermat that triggered this
|
||||
---@param drawAdditional boolean Controls whether additional tokens should be drawn
|
||||
ChaosBagApi.drawChaosToken = function(mat, drawAdditional)
|
||||
return Global.call("drawChaosToken", {mat = mat, drawAdditional = drawAdditional})
|
||||
end
|
||||
|
@ -5,21 +5,23 @@ do
|
||||
return getObjectFromGUID("123456")
|
||||
end
|
||||
|
||||
-- returns all matching objects as a table with references
|
||||
---@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
|
||||
|
@ -1291,7 +1291,7 @@ end
|
||||
|
||||
-- handles the applying of option selections and calls the respective functions based
|
||||
---@param id string ID of the option that was selected or deselected
|
||||
---@param state boolean State of the option (true = enabled)
|
||||
---@param state boolean|any State of the option (true = enabled)
|
||||
function applyOptionPanelChange(id, state)
|
||||
-- option: Snap tags
|
||||
if id == "useSnapTags" then
|
||||
@ -1397,8 +1397,8 @@ end
|
||||
|
||||
-- copies the specified tool (by name) from the option panel source bag
|
||||
---@param name string Name of the object that should be copied
|
||||
---@param position table Desired position of the object
|
||||
---@param rotation table Desired rotation of the object (defaults to object's rotation)
|
||||
---@param position tts__Vector Desired position of the object
|
||||
---@param rotation? tts__Vector Desired rotation of the object (defaults to object's rotation)
|
||||
function spawnHelperObject(name, position, rotation)
|
||||
local sourceBag = guidReferenceApi.getObjectByOwnerAndType("Mythos","OptionPanelSource")
|
||||
|
||||
@ -1457,6 +1457,8 @@ end
|
||||
|
||||
-- loads saved options
|
||||
function loadSettings(newOptions)
|
||||
-- TO-DO: instead of overriding, keep original table and only add new data
|
||||
-- this will ensure that new options aren't set to nil when importing an old state
|
||||
optionPanel = newOptions
|
||||
updateOptionPanelState()
|
||||
for id, state in pairs(optionPanel) do
|
||||
|
@ -6,17 +6,19 @@ do
|
||||
return guidReferenceApi.getObjectByOwnerAndType("Mythos", "MythosArea")
|
||||
end
|
||||
|
||||
-- returns the chaos token metadata (if provided through scenario reference card)
|
||||
---@return any: Table of chaos token metadata (if provided through scenario reference card)
|
||||
MythosAreaApi.returnTokenData = function()
|
||||
return getMythosArea().call("returnTokenData")
|
||||
end
|
||||
|
||||
-- returns an object reference to the encounter deck
|
||||
---@return any: Object reference to the encounter deck
|
||||
MythosAreaApi.getEncounterDeck = function()
|
||||
return getMythosArea().call("getEncounterDeck")
|
||||
end
|
||||
|
||||
-- draw an encounter card for the requesting mat
|
||||
---@param mat tts__GameObject Playermat that triggered this
|
||||
---@param alwaysFaceUp boolean Whether the card should be drawn face-up
|
||||
MythosAreaApi.drawEncounterCard = function(mat, alwaysFaceUp)
|
||||
getMythosArea().call("drawEncounterCard", {mat = mat, alwaysFaceUp = alwaysFaceUp})
|
||||
end
|
||||
|
@ -6,7 +6,7 @@ do
|
||||
return guidReferenceApi.getObjectByOwnerAndType("Mythos", "NavigationOverlayHandler")
|
||||
end
|
||||
|
||||
-- Copies the visibility for the Navigation overlay
|
||||
-- copies the visibility for the Navigation overlay
|
||||
---@param startColor string Color of the player to copy from
|
||||
---@param targetColor string Color of the targeted player
|
||||
NavigationOverlayApi.copyVisibility = function(startColor, targetColor)
|
||||
@ -14,9 +14,9 @@ do
|
||||
startColor = startColor,
|
||||
targetColor = targetColor
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
-- Changes the Navigation Overlay view ("Full View" --> "Play Areas" --> "Closed" etc.)
|
||||
-- changes the Navigation Overlay view ("Full View" --> "Play Areas" --> "Closed" etc.)
|
||||
---@param playerColor string Color of the player to update the visibility for
|
||||
NavigationOverlayApi.cycleVisibility = function(playerColor)
|
||||
getNOHandler().call("cycleVisibility", playerColor)
|
||||
|
@ -236,7 +236,7 @@ end
|
||||
|
||||
-- handles all button clicks
|
||||
function buttonClicked(player, _, id)
|
||||
local index = tonumber(id)
|
||||
local index = tonumber(id) or ""
|
||||
|
||||
if index == 19 then
|
||||
setVisibility("toggle", player.color)
|
||||
|
@ -2,12 +2,12 @@ do
|
||||
local OptionPanelApi = {}
|
||||
|
||||
-- loads saved options
|
||||
---@param options table New options table
|
||||
---@param options table Set a new state for the option table
|
||||
OptionPanelApi.loadSettings = function(options)
|
||||
return Global.call("loadSettings", options)
|
||||
end
|
||||
|
||||
-- returns option panel table
|
||||
---@return any: Table of option panel state
|
||||
OptionPanelApi.getOptions = function()
|
||||
return Global.getTable("optionPanel")
|
||||
end
|
||||
|
@ -125,7 +125,7 @@ function onCollisionEnter(collisionInfo)
|
||||
-- If this card was being dragged, clear the dragging connections. A multi-drag/drop may send
|
||||
-- the dropped card immediately into a deck, so this has to be done here
|
||||
if draggingGuids[card.getGUID()] ~= nil then
|
||||
card.setVectorLines(nil)
|
||||
card.setVectorLines({})
|
||||
draggingGuids[card.getGUID()] = nil
|
||||
end
|
||||
|
||||
@ -197,7 +197,7 @@ function onUpdate()
|
||||
-- If object still exists then it's been dragged outside the area and needs to clear the
|
||||
-- lines attached to it
|
||||
if obj ~= nil then
|
||||
obj.setVectorLines(nil)
|
||||
obj.setVectorLines({})
|
||||
end
|
||||
end
|
||||
-- Even if the last location left the play area, need one last draw to clear the lines
|
||||
@ -257,11 +257,11 @@ end
|
||||
-- Global event handler, delegated from Global. Clears any connection lines from dragged cards
|
||||
-- before they are destroyed by entering a deck. Removal of the card from the dragging list will
|
||||
-- be handled during the next onUpdate() call.
|
||||
function tryObjectEnterContainer(params)
|
||||
function tryObjectEnterContainer()
|
||||
for draggedGuid, _ in pairs(draggingGuids) do
|
||||
local draggedObj = getObjectFromGUID(draggedGuid)
|
||||
if draggedObj ~= nil then
|
||||
draggedObj.setVectorLines(nil)
|
||||
draggedObj.setVectorLines({})
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -451,13 +451,11 @@ function addOneWayVector(origin, target, vectorOwner, lines)
|
||||
-- Calculate card distance to be closer for horizontal positions than vertical, since cards are
|
||||
-- taller than they are wide
|
||||
local heading = Vector(originPos):sub(targetPos):heading("y")
|
||||
local distanceFromCard = DIRECTIONAL_ARROW_DISTANCE * 0.7 +
|
||||
DIRECTIONAL_ARROW_DISTANCE * 0.3 * math.abs(math.sin(math.rad(heading)))
|
||||
local distanceFromCard = DIRECTIONAL_ARROW_DISTANCE * 0.7 + DIRECTIONAL_ARROW_DISTANCE * 0.3 * math.abs(math.sin(math.rad(heading)))
|
||||
|
||||
-- Calculate the three possible arrow positions. These are offset by half the arrow length to
|
||||
-- make them visually balanced by keeping the arrows centered, not tracking the point
|
||||
local midpoint = Vector(originPos):add(targetPos):scale(Vector(0.5, 0.5, 0.5)):moveTowards(targetPos,
|
||||
ARROW_ARM_LENGTH / 2)
|
||||
local midpoint = Vector(originPos):add(targetPos):scale(0.5):moveTowards(targetPos, ARROW_ARM_LENGTH / 2)
|
||||
local closeToOrigin = Vector(originPos):moveTowards(targetPos, distanceFromCard + ARROW_ARM_LENGTH / 2)
|
||||
local closeToTarget = Vector(targetPos):moveTowards(originPos, distanceFromCard - ARROW_ARM_LENGTH / 2)
|
||||
|
||||
@ -470,16 +468,14 @@ function addOneWayVector(origin, target, vectorOwner, lines)
|
||||
end
|
||||
|
||||
-- Draws an arrowhead at the given position.
|
||||
---@param arrowheadPos table Centerpoint of the arrowhead to draw (NOT the tip of the arrow)
|
||||
---@param originPos table Origin point of the connection, used to position the arrow arms
|
||||
---@param arrowheadPos tts__Vector Centerpoint of the arrowhead to draw (NOT the tip of the arrow)
|
||||
---@param originPos tts__Vector Origin point of the connection, used to position the arrow arms
|
||||
---@param vectorOwner tts__GameObject The object which these lines will be set to. Used for relative
|
||||
--- positioning and scaling, as well as highlighting connections during a drag operation
|
||||
---@param lines table List of vector line elements. Mutable, will be updated to add this arrow
|
||||
function addArrowLines(arrowheadPos, originPos, vectorOwner, lines)
|
||||
local arrowArm1 = Vector(arrowheadPos):moveTowards(originPos, ARROW_ARM_LENGTH):sub(arrowheadPos):rotateOver("y",
|
||||
-1 * ARROW_ANGLE):add(arrowheadPos)
|
||||
local arrowArm2 = Vector(arrowheadPos):moveTowards(originPos, ARROW_ARM_LENGTH):sub(arrowheadPos):rotateOver("y",
|
||||
ARROW_ANGLE):add(arrowheadPos)
|
||||
local arrowArm1 = Vector(arrowheadPos):moveTowards(originPos, ARROW_ARM_LENGTH):sub(arrowheadPos):rotateOver("y", -1 * ARROW_ANGLE):add(arrowheadPos)
|
||||
local arrowArm2 = Vector(arrowheadPos):moveTowards(originPos, ARROW_ARM_LENGTH):sub(arrowheadPos):rotateOver("y", ARROW_ANGLE):add(arrowheadPos)
|
||||
|
||||
local head = vectorOwner.positionToLocal(arrowheadPos)
|
||||
local arm1 = vectorOwner.positionToLocal(arrowArm1)
|
||||
|
@ -22,41 +22,41 @@ do
|
||||
getInvestigatorCounter().call("updateVal", count)
|
||||
end
|
||||
|
||||
-- Move all contents on the play area (cards, tokens, etc) one slot in the given direction. Certain
|
||||
-- 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 string Color of the player requesting the shift for messages
|
||||
PlayAreaApi.shiftContentsUp = function(playerColor)
|
||||
return getPlayArea().call("shiftContentsUp", playerColor)
|
||||
getPlayArea().call("shiftContentsUp", playerColor)
|
||||
end
|
||||
|
||||
PlayAreaApi.shiftContentsDown = function(playerColor)
|
||||
return getPlayArea().call("shiftContentsDown", playerColor)
|
||||
getPlayArea().call("shiftContentsDown", playerColor)
|
||||
end
|
||||
|
||||
PlayAreaApi.shiftContentsLeft = function(playerColor)
|
||||
return getPlayArea().call("shiftContentsLeft", playerColor)
|
||||
getPlayArea().call("shiftContentsLeft", playerColor)
|
||||
end
|
||||
|
||||
PlayAreaApi.shiftContentsRight = function(playerColor)
|
||||
return getPlayArea().call("shiftContentsRight", playerColor)
|
||||
getPlayArea().call("shiftContentsRight", playerColor)
|
||||
end
|
||||
|
||||
-- Reset the play area's tracking of which cards have had tokens spawned.
|
||||
PlayAreaApi.resetSpawnedCards = function()
|
||||
return getPlayArea().call("resetSpawnedCards")
|
||||
getPlayArea().call("resetSpawnedCards")
|
||||
end
|
||||
|
||||
-- Sets whether location connections should be drawn
|
||||
---@param state boolean This controls whether location connections should be drawn
|
||||
PlayAreaApi.setConnectionDrawState = function(state)
|
||||
getPlayArea().call("setConnectionDrawState", state)
|
||||
end
|
||||
|
||||
-- Sets the connection color
|
||||
---@param color string Connection color to be used for location connections
|
||||
PlayAreaApi.setConnectionColor = function(color)
|
||||
getPlayArea().call("setConnectionColor", color)
|
||||
end
|
||||
|
||||
-- Event to be called when the current scenario has changed.
|
||||
-- Event to be called when the current scenario has changed
|
||||
---@param scenarioName string Name of the new scenario
|
||||
PlayAreaApi.onScenarioChanged = function(scenarioName)
|
||||
getPlayArea().call("onScenarioChanged", scenarioName)
|
||||
@ -64,7 +64,7 @@ do
|
||||
|
||||
-- Sets this playmat's snap points to limit snapping to locations or not.
|
||||
-- If matchTypes is false, snap points will be reset to snap all cards.
|
||||
---@param matchCardTypes boolean Whether snap points should only snap for the matching card types.
|
||||
---@param matchCardTypes boolean Whether snap points should only snap for the matching card types
|
||||
PlayAreaApi.setLimitSnapsByType = function(matchCardTypes)
|
||||
getPlayArea().call("setLimitSnapsByType", matchCardTypes)
|
||||
end
|
||||
|
@ -9,6 +9,7 @@ do
|
||||
["Dark Souls"] = 2
|
||||
}
|
||||
|
||||
---@param index number Index of the sound effect to play
|
||||
local function playTriggerEffect(index)
|
||||
local SoundCube = guidReferenceApi.getObjectByOwnerAndType("Mythos", "SoundCube")
|
||||
SoundCube.AssetBundle.playTriggerEffect(index)
|
||||
|
@ -6,7 +6,7 @@ do
|
||||
return guidReferenceApi.getObjectByOwnerAndType("Mythos", "VictoryDisplay")
|
||||
end
|
||||
|
||||
-- triggers an update of the Victory count
|
||||
-- triggers an update of the victory count
|
||||
---@param delay number Delay in seconds after which the update call is executed
|
||||
VictoryDisplayApi.update = function(delay)
|
||||
getVictoryDisplay().call("startUpdate", delay)
|
||||
|
@ -1,3 +1,4 @@
|
||||
---@diagnostic disable: param-type-mismatch
|
||||
require("playercards/PlayerCardPanelData")
|
||||
|
||||
local allCardsBagApi = require("playercards/AllCardsBagApi")
|
||||
@ -400,8 +401,7 @@ function scalePositions()
|
||||
startPositions = { }
|
||||
for key, pos in pairs(START_POSITIONS) do
|
||||
-- Because a scaled object means a different global size, using global distance for Z results in
|
||||
-- the cards being closer or farther depending on the scale. Leave the Z values and only scale
|
||||
-- X and Y
|
||||
-- the cards being closer or farther depending on the scale. Leave the Z values and only scale X and Y
|
||||
startPositions[key] = Vector(pos)
|
||||
startPositions[key].x = startPositions[key].x * scale
|
||||
startPositions[key].y = startPositions[key].y * scale
|
||||
@ -486,11 +486,11 @@ function buildInvestigatorSpawnSpec(investigatorName, investigatorData, position
|
||||
local sigPos = Vector(position):add(investigatorSignatureOffset)
|
||||
local spawns = buildCommonSpawnSpec(investigatorName, investigatorData, position)
|
||||
table.insert(spawns, {
|
||||
name = investigatorName.."signatures",
|
||||
cards = investigatorData.signatures,
|
||||
globalPos = self.positionToWorld(sigPos),
|
||||
rotation = FACE_UP_ROTATION,
|
||||
})
|
||||
name = investigatorName.."signatures",
|
||||
cards = investigatorData.signatures,
|
||||
globalPos = self.positionToWorld(sigPos),
|
||||
rotation = FACE_UP_ROTATION,
|
||||
})
|
||||
|
||||
return spawns
|
||||
end
|
||||
@ -506,18 +506,18 @@ end
|
||||
function buildCommonSpawnSpec(investigatorName, investigatorData, position, oneCardOnly)
|
||||
local cardPos = Vector(position):add(investigatorCardOffset)
|
||||
return {
|
||||
{
|
||||
name = investigatorName.."minicards",
|
||||
cards = oneCardOnly and { investigatorData.minicards[1] } or investigatorData.minicards,
|
||||
globalPos = self.positionToWorld(position),
|
||||
rotation = FACE_UP_ROTATION,
|
||||
},
|
||||
{
|
||||
name = investigatorName.."cards",
|
||||
cards = oneCardOnly and { investigatorData.cards[1] } or investigatorData.cards,
|
||||
globalPos = self.positionToWorld(cardPos),
|
||||
rotation = FACE_UP_ROTATION,
|
||||
},
|
||||
{
|
||||
name = investigatorName.."minicards",
|
||||
cards = oneCardOnly and { investigatorData.minicards[1] } or investigatorData.minicards,
|
||||
globalPos = self.positionToWorld(position),
|
||||
rotation = FACE_UP_ROTATION,
|
||||
},
|
||||
{
|
||||
name = investigatorName.."cards",
|
||||
cards = oneCardOnly and { investigatorData.cards[1] } or investigatorData.cards,
|
||||
globalPos = self.positionToWorld(cardPos),
|
||||
rotation = FACE_UP_ROTATION,
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
|
@ -219,7 +219,7 @@ function updateTextField(rowIndex)
|
||||
end
|
||||
end
|
||||
|
||||
function clickCheckbox(row, col, buttonIndex)
|
||||
function clickCheckbox(row, col)
|
||||
if selectedUpgrades[row] == nil then
|
||||
selectedUpgrades[row] = { }
|
||||
selectedUpgrades[row].xp = 0
|
||||
|
Loading…
Reference in New Issue
Block a user