Merge branch 'main' into chaos-token-updates
This commit is contained in:
commit
5239229bde
@ -1473,7 +1473,7 @@
|
||||
"PowerWordUpgradeSheet.0d9481",
|
||||
"PocketMultiToolUpgradeSheet.d706e7",
|
||||
"MakeshiftTrapUpgradeSheet.64dfce",
|
||||
"LivingLinkUpgradeSheet.19a05b",
|
||||
"LivingInkUpgradeSheet.19a05b",
|
||||
"HyperphysicalShotcasterUpgradeSheet.a4eec2",
|
||||
"HuntersArmorUpgradeSheet.d2d01b",
|
||||
"HonedInstinctUpgradeSheet.ba0e34",
|
||||
|
@ -37,7 +37,7 @@
|
||||
"LuaScriptState": "[[0,0,0,0,0,0,0,0,0,0],[]]",
|
||||
"MeasureMovement": false,
|
||||
"Name": "CardCustom",
|
||||
"Nickname": "Living Link Upgrade Sheet",
|
||||
"Nickname": "Living Ink Upgrade Sheet",
|
||||
"SidewaysCard": false,
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
@ -58,4 +58,4 @@
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
||||
}
|
@ -19,7 +19,7 @@
|
||||
},
|
||||
"ImageScalar": 1,
|
||||
"ImageSecondaryURL": "",
|
||||
"ImageURL": "http://cloud-3.steamusercontent.com/ugc/1910115722577754046/64AF9853E51B79561BEAA3BEF13BBC694BBF9A34/",
|
||||
"ImageURL": "http://cloud-3.steamusercontent.com/ugc/2018214163835858903/EECF1C00C9A0C837DD40D7B5A3456B88DF0CEC08/",
|
||||
"WidthScale": 0
|
||||
},
|
||||
"Description": "Left-Click: Add token\nRight-Click: Remove token\n\nContextmenu allows resetting the current state or removing all bless/curse tokens from play.\n\nSee Notebook for detailed instructions.",
|
||||
|
@ -34,7 +34,7 @@
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": true,
|
||||
"LuaScript": "",
|
||||
"LuaScript": "require(\"util/Trashcan\")",
|
||||
"LuaScriptState": "",
|
||||
"MaterialIndex": -1,
|
||||
"MeasureMovement": false,
|
||||
|
@ -34,7 +34,7 @@
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": true,
|
||||
"LuaScript": "",
|
||||
"LuaScript": "require(\"util/Trashcan\")",
|
||||
"LuaScriptState": "",
|
||||
"MaterialIndex": -1,
|
||||
"MeasureMovement": false,
|
||||
|
@ -34,7 +34,7 @@
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": true,
|
||||
"LuaScript": "",
|
||||
"LuaScript": "require(\"util/Trashcan\")",
|
||||
"LuaScriptState": "",
|
||||
"MaterialIndex": -1,
|
||||
"MeasureMovement": false,
|
||||
|
@ -34,7 +34,7 @@
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": true,
|
||||
"LuaScript": "",
|
||||
"LuaScript": "require(\"util/Trashcan\")",
|
||||
"LuaScriptState": "",
|
||||
"MaterialIndex": -1,
|
||||
"MeasureMovement": false,
|
||||
|
@ -34,7 +34,7 @@
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": true,
|
||||
"LuaScript": "",
|
||||
"LuaScript": "require(\"util/Trashcan\")",
|
||||
"LuaScriptState": "",
|
||||
"MaterialIndex": -1,
|
||||
"MeasureMovement": false,
|
||||
|
@ -35,6 +35,11 @@ local BACKGROUNDS = {
|
||||
url = "http://cloud-3.steamusercontent.com/ugc/1754695635919099826/3C3CBFFAADB2ACA9957C736491F470AE906CC953/",
|
||||
fontcolor = { 0, 0, 0 }
|
||||
},
|
||||
{
|
||||
title = "Stick to the Plan",
|
||||
url = "http://cloud-3.steamusercontent.com/ugc/2018214163838897493/8E38B96C5A8D703A59009A932432CBE21ABE63A2/",
|
||||
fontcolor = { 1, 1, 1 }
|
||||
},
|
||||
{
|
||||
title = "Wooden Sledge",
|
||||
url = "http://cloud-3.steamusercontent.com/ugc/1750192233783143973/D526236AAE16BDBB98D3F30E27BAFC1D3E21F4AC/",
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -29,6 +29,7 @@ local chaosTokens = {}
|
||||
local chaosTokensLastMat = nil
|
||||
local IS_RESHUFFLING = false
|
||||
local bagSearchers = {}
|
||||
local MAT_COLORS = {"White", "Orange", "Green", "Red"}
|
||||
local hideTitleSplashWaitFunctionId = nil
|
||||
local playmatApi = require("playermat/PlaymatApi")
|
||||
local tokenManager = require("core/token/TokenManager")
|
||||
@ -179,7 +180,8 @@ function actualEncounterCardDraw(card, params)
|
||||
local alwaysFaceUp = params[3]
|
||||
local faceUpRotation = 0
|
||||
if not alwaysFaceUp then
|
||||
if getObjectFromGUID(DATA_HELPER_GUID).call('checkHiddenCard', card.getName()) then
|
||||
local metadata = JSON.decode(card.getGMNotes()) or {}
|
||||
if metadata.hidden or getObjectFromGUID(DATA_HELPER_GUID).call('checkHiddenCard', card.getName()) then
|
||||
faceUpRotation = 180
|
||||
end
|
||||
end
|
||||
@ -856,17 +858,19 @@ function applyOptionPanelChange(id, state)
|
||||
|
||||
-- option: Show hand helper for each player
|
||||
elseif id == "showHandHelper" then
|
||||
optionPanel[id][1] = spawnOrRemoveHelper(state, "Hand Helper", {-50.85, 1.6, 7.32}, {0, 270, 0})
|
||||
optionPanel[id][2] = spawnOrRemoveHelper(state, "Hand Helper", {-50.85, 1.6, -24.88}, {0, 270, 0})
|
||||
optionPanel[id][3] = spawnOrRemoveHelper(state, "Hand Helper", {-39.13, 1.6, 22.45}, {0, 000, 0})
|
||||
optionPanel[id][4] = spawnOrRemoveHelper(state, "Hand Helper", {-21.57, 1.6, -22.45}, {0, 180, 0})
|
||||
for i, color in ipairs(MAT_COLORS) do
|
||||
local pos = playmatApi.transformLocalPosition({0.05, 0, -1.182}, color)
|
||||
local rot = playmatApi.returnRotation(color)
|
||||
optionPanel[id][i] = spawnOrRemoveHelper(state, "Hand Helper", pos, rot)
|
||||
end
|
||||
|
||||
-- option: Show search assistant for each player
|
||||
elseif id == "showSearchAssistant" then
|
||||
optionPanel[id][1] = spawnOrRemoveHelper(state, "Search Assistant", {-50.85, 1.6, 10.25}, {0, 270, 0})
|
||||
optionPanel[id][2] = spawnOrRemoveHelper(state, "Search Assistant", {-50.85, 1.6, -21.95}, {0, 270, 0})
|
||||
optionPanel[id][3] = spawnOrRemoveHelper(state, "Search Assistant", {-36.20, 1.6, 22.45}, {0, 000, 0})
|
||||
optionPanel[id][4] = spawnOrRemoveHelper(state, "Search Assistant", {-24.50, 1.6, -22.45}, {0, 180, 0})
|
||||
for i, color in ipairs(MAT_COLORS) do
|
||||
local pos = playmatApi.transformLocalPosition({-0.3, 0, -1.182}, color)
|
||||
local rot = playmatApi.returnRotation(color)
|
||||
optionPanel[id][i] = spawnOrRemoveHelper(state, "Search Assistant", pos, rot)
|
||||
end
|
||||
|
||||
-- option: Show chaos bag manager
|
||||
elseif id == "showChaosBagManager" then
|
||||
@ -913,7 +917,6 @@ end
|
||||
---@param name String Name of the object that should be copied
|
||||
---@param position Table Desired position of the object
|
||||
function spawnHelperObject(name, position, rotation)
|
||||
|
||||
local sourceBag = getObjectFromGUID("830bd0")
|
||||
|
||||
-- error handling for missing sourceBag
|
||||
|
@ -309,7 +309,8 @@ function buildConnection(cardId, iconCardList, locData)
|
||||
for _, connectedGuid in ipairs(iconCardList[icon]) do
|
||||
-- If the reciprocal exists, convert it to BiDi, otherwise add as a one-way
|
||||
if locationConnections[connectedGuid] ~= nil
|
||||
and locationConnections[connectedGuid][cardId] == ONE_WAY then
|
||||
and (locationConnections[connectedGuid][cardId] == ONE_WAY
|
||||
or locationConnections[connectedGuid][cardId] == BIDIRECTIONAL) then
|
||||
locationConnections[connectedGuid][cardId] = BIDIRECTIONAL
|
||||
locationConnections[cardId][connectedGuid] = nil
|
||||
else
|
||||
|
@ -197,7 +197,7 @@ function getCardVP(obj, notes)
|
||||
cardVP = tonumber(notes.locationBack.victory)
|
||||
end
|
||||
end
|
||||
if cardVP > 0 then
|
||||
if (cardVP or 0) > 0 then
|
||||
table.insert(countedVP, obj)
|
||||
end
|
||||
else
|
||||
|
@ -52,7 +52,6 @@ local THREAT_AREA = {
|
||||
|
||||
local DRAW_DECK_POSITION = { x = -1.82, y = 1, z = 0 }
|
||||
local DISCARD_PILE_POSITION = { x = -1.82, y = 1.5, z = 0.61 }
|
||||
local PLAY_ZONE_ROTATION = self.getRotation()
|
||||
|
||||
local TRASHCAN
|
||||
local STAT_TRACKER
|
||||
@ -151,7 +150,7 @@ function searchArea(origin, size)
|
||||
return Physics.cast({
|
||||
origin = origin,
|
||||
direction = {0, 1, 0},
|
||||
orientation = PLAY_ZONE_ROTATION,
|
||||
orientation = self.getRotation(),
|
||||
type = 3,
|
||||
size = size,
|
||||
max_distance = 1,
|
||||
@ -176,7 +175,7 @@ function makeDiscardHandlerFor(searchPosition, discardPosition)
|
||||
if obj.tag == "Deck" or obj.tag == "Card" then
|
||||
if obj.hasTag("PlayerCard") then
|
||||
obj.setPositionSmooth(self.positionToWorld(DISCARD_PILE_POSITION), false, true)
|
||||
obj.setRotation(PLAY_ZONE_ROTATION)
|
||||
obj.setRotation(self.getRotation())
|
||||
else
|
||||
obj.setPositionSmooth(discardPosition, false, true)
|
||||
obj.setRotation({0, -90, 0})
|
||||
@ -215,7 +214,7 @@ function findObjectsAtPosition(localPos)
|
||||
return Physics.cast({
|
||||
origin = self.positionToWorld(localPos),
|
||||
direction = {0, 1, 0},
|
||||
orientation = {0, PLAY_ZONE_ROTATION.y + 90, 0},
|
||||
orientation = {0, self.getRotation().y + 90, 0},
|
||||
type = 3,
|
||||
size = {3.2, 1, 2},
|
||||
max_distance = 0,
|
||||
@ -246,7 +245,7 @@ function doUpkeep(_, clickedByColor, isRightClick)
|
||||
elseif obj.tag == "Card" and not obj.is_face_down and not inArea(self.positionToLocal(obj.getPosition()), INVESTIGATOR_AREA) then
|
||||
local cardMetadata = JSON.decode(obj.getGMNotes()) or {}
|
||||
if not doNotReady(obj) then
|
||||
obj.setRotation(PLAY_ZONE_ROTATION)
|
||||
obj.setRotation(self.getRotation())
|
||||
end
|
||||
if cardMetadata.id == "08031" then
|
||||
forcedLearning = true
|
||||
@ -810,7 +809,7 @@ function clickableClues(showCounter)
|
||||
local pos = self.positionToWorld({x = -1.12, y = 0.05, z = 0.7})
|
||||
for i = 1, clueCount do
|
||||
pos.y = pos.y + 0.045 * i
|
||||
tokenManager.spawnToken(pos, "clue", PLAY_ZONE_ROTATION)
|
||||
tokenManager.spawnToken(pos, "clue", self.getRotation())
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -48,7 +48,7 @@ do
|
||||
return mat.getVar("playerColor")
|
||||
end
|
||||
|
||||
-- Returns if there is the card"Dream-Enhancing Serum" on the requested playermat
|
||||
-- Returns if there is the card "Dream-Enhancing Serum" on the requested playermat
|
||||
---@param matColor String Color of the playermat
|
||||
PlaymatApi.isDES = function(matColor)
|
||||
local mat = getObjectFromGUID(MAT_IDS[matColor])
|
||||
@ -70,6 +70,21 @@ do
|
||||
return mat.call("returnGlobalDiscardPosition")
|
||||
end
|
||||
|
||||
-- Transforms a local position into a global position
|
||||
---@param localPos Table Local position to be transformed
|
||||
---@param matColor String Color of the playermat
|
||||
PlaymatApi.transformLocalPosition = function(localPos, matColor)
|
||||
local mat = getObjectFromGUID(MAT_IDS[matColor])
|
||||
return mat.positionToWorld(localPos)
|
||||
end
|
||||
|
||||
-- Returns the rotation of the requested playmat
|
||||
---@param matColor String Color of the playermat
|
||||
PlaymatApi.returnRotation = function(matColor)
|
||||
local mat = getObjectFromGUID(MAT_IDS[matColor])
|
||||
return mat.getRotation()
|
||||
end
|
||||
|
||||
-- Sets the requested playermat's snap points to limit snapping to matching card types or not. If
|
||||
-- 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
|
||||
|
@ -28,9 +28,9 @@ do
|
||||
playerMatGuids["White"] = "8b081b"
|
||||
playerMatGuids["Green"] = "383d8b"
|
||||
|
||||
local commonZones = {}
|
||||
local commonZones = {}
|
||||
commonZones["Investigator"] = { -1.17702, 0, 0.00209 }
|
||||
commonZones["Minicard"] = { -0.16, 0, -1.222326 }
|
||||
commonZones["Minicard"] = { -1.17702, 0, -1.45 }
|
||||
commonZones["Deck"] = { -1.822724, 0, -0.02940192 }
|
||||
commonZones["Discard"] = { -1.822451, 0, 0.6092291 }
|
||||
commonZones["Ally"] = { -0.6157398, 0, 0.02435675 }
|
||||
@ -48,7 +48,7 @@ do
|
||||
commonZones["Threat3"] = { 0.002246313, 0, -0.6430681 }
|
||||
commonZones["Threat4"] = { 0.4590618, 0, -0.6432732 }
|
||||
|
||||
local zoneData = {}
|
||||
local zoneData = {}
|
||||
zoneData["White"] = {}
|
||||
zoneData["White"]["Investigator"] = commonZones["Investigator"]
|
||||
zoneData["White"]["Minicard"] = commonZones["Minicard"]
|
||||
|
11
src/util/Trashcan.ttslua
Normal file
11
src/util/Trashcan.ttslua
Normal file
@ -0,0 +1,11 @@
|
||||
-- adds a context menu entry to trigger the emptying
|
||||
function onLoad()
|
||||
self.addContextMenuItem("Empty Trash", emptyTrash)
|
||||
end
|
||||
|
||||
-- removes all objects by taking them out and then destructing them
|
||||
function emptyTrash()
|
||||
for _, trash in ipairs(self.getObjects()) do
|
||||
self.takeObject().destruct()
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue
Block a user