added decklib
This commit is contained in:
parent
0fcc8acfcb
commit
ae25c93837
@ -1,3 +1,4 @@
|
|||||||
|
local deckLib = require("util/DeckLib")
|
||||||
local guidReferenceApi = require("core/GUIDReferenceApi")
|
local guidReferenceApi = require("core/GUIDReferenceApi")
|
||||||
local playAreaApi = require("core/PlayAreaApi")
|
local playAreaApi = require("core/PlayAreaApi")
|
||||||
local searchLib = require("util/SearchLib")
|
local searchLib = require("util/SearchLib")
|
||||||
@ -171,8 +172,7 @@ function actualEncounterCardDraw(card, params)
|
|||||||
faceUpRotation = 180
|
faceUpRotation = 180
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
card.setPositionSmooth(params.pos, false, false)
|
deckLib.placeOrMergeIntoDeck(card, params.pos, { 0, params.rotY, faceUpRotation })
|
||||||
card.setRotationSmooth({ 0, params.rotY, faceUpRotation }, false, false)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function reshuffleEncounterDeck(params)
|
function reshuffleEncounterDeck(params)
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
local searchLib = require("util/SearchLib")
|
|
||||||
local chaosBagApi = require("chaosbag/ChaosBagApi")
|
local chaosBagApi = require("chaosbag/ChaosBagApi")
|
||||||
|
local deckLib = require("util/DeckLib")
|
||||||
local guidReferenceApi = require("core/GUIDReferenceApi")
|
local guidReferenceApi = require("core/GUIDReferenceApi")
|
||||||
local mythosAreaApi = require("core/MythosAreaApi")
|
local mythosAreaApi = require("core/MythosAreaApi")
|
||||||
local navigationOverlayApi = require("core/NavigationOverlayApi")
|
local navigationOverlayApi = require("core/NavigationOverlayApi")
|
||||||
|
local searchLib = require("util/SearchLib")
|
||||||
local tokenChecker = require("core/token/TokenChecker")
|
local tokenChecker = require("core/token/TokenChecker")
|
||||||
local tokenManager = require("core/token/TokenManager")
|
local tokenManager = require("core/token/TokenManager")
|
||||||
|
|
||||||
@ -210,9 +211,9 @@ function discardListOfObjects(objList)
|
|||||||
for _, obj in ipairs(objList) do
|
for _, obj in ipairs(objList) do
|
||||||
if obj.type == "Card" or obj.type == "Deck" then
|
if obj.type == "Card" or obj.type == "Deck" then
|
||||||
if obj.hasTag("PlayerCard") then
|
if obj.hasTag("PlayerCard") then
|
||||||
placeOrMergeIntoDeck(obj, returnGlobalDiscardPosition(), self.getRotation())
|
deckLib.placeOrMergeIntoDeck(obj, returnGlobalDiscardPosition(), self.getRotation())
|
||||||
else
|
else
|
||||||
placeOrMergeIntoDeck(obj, ENCOUNTER_DISCARD_POSITION, {x = 0, y = -90, z = 0})
|
deckLib.placeOrMergeIntoDeck(obj, ENCOUNTER_DISCARD_POSITION, {x = 0, y = -90, z = 0})
|
||||||
end
|
end
|
||||||
-- put chaos tokens back into bag (e.g. Unrelenting)
|
-- put chaos tokens back into bag (e.g. Unrelenting)
|
||||||
elseif tokenChecker.isChaosToken(obj) then
|
elseif tokenChecker.isChaosToken(obj) then
|
||||||
@ -225,46 +226,6 @@ function discardListOfObjects(objList)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- places a card/deck at a position or merges into an existing deck
|
|
||||||
-- rotation is optional
|
|
||||||
function placeOrMergeIntoDeck(obj, pos, rot)
|
|
||||||
if not pos then return end
|
|
||||||
|
|
||||||
local offset = 0.5
|
|
||||||
|
|
||||||
-- search the new position for existing card/deck
|
|
||||||
local searchResult = searchArea(pos, { 1, 1, 1 }, "isCardOrDeck")
|
|
||||||
|
|
||||||
-- get new position
|
|
||||||
local newPos
|
|
||||||
if #searchResult == 1 then
|
|
||||||
local bounds = searchResult[1].getBounds()
|
|
||||||
newPos = Vector(pos):setAt("y", bounds.center.y + bounds.size.y / 2 + offset)
|
|
||||||
else
|
|
||||||
newPos = Vector(pos) + Vector(0, offset, 0)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- allow moving the objects smoothly out of the hand
|
|
||||||
obj.use_hands = false
|
|
||||||
|
|
||||||
if rot then
|
|
||||||
obj.setRotationSmooth(rot, false, true)
|
|
||||||
end
|
|
||||||
obj.setPositionSmooth(newPos, false, true)
|
|
||||||
|
|
||||||
-- continue if the card stops smooth moving
|
|
||||||
Wait.condition(
|
|
||||||
function()
|
|
||||||
obj.use_hands = true
|
|
||||||
-- this avoids a TTS bug that merges unrelated cards that are not resting
|
|
||||||
if #searchResult == 1 and searchResult[1] ~= obj then
|
|
||||||
-- call this with avoiding errors (physics is sometimes too fast so the object doesn't exist for the put)
|
|
||||||
pcall(function() searchResult[1].putObject(obj) end)
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
function() return not obj.isSmoothMoving() end, 3)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- build a discard button to discard from searchPosition (number must be unique)
|
-- build a discard button to discard from searchPosition (number must be unique)
|
||||||
function makeDiscardButton(xValue, number)
|
function makeDiscardButton(xValue, number)
|
||||||
local position = { xValue, 0.1, -0.94}
|
local position = { xValue, 0.1, -0.94}
|
||||||
@ -530,7 +491,7 @@ function doDiscardOne()
|
|||||||
|
|
||||||
-- get a random non-hidden card (from the "choices" table)
|
-- get a random non-hidden card (from the "choices" table)
|
||||||
local num = math.random(1, #choices)
|
local num = math.random(1, #choices)
|
||||||
placeOrMergeIntoDeck(hand[choices[num]], returnGlobalDiscardPosition(), self.getRotation())
|
deckLib.placeOrMergeIntoDeck(hand[choices[num]], returnGlobalDiscardPosition(), self.getRotation())
|
||||||
broadcastToAll(playerColor .. " randomly discarded card " .. choices[num] .. "/" .. #hand .. ".", "White")
|
broadcastToAll(playerColor .. " randomly discarded card " .. choices[num] .. "/" .. #hand .. ".", "White")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
47
src/util/DeckLib.ttslua
Normal file
47
src/util/DeckLib.ttslua
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
do
|
||||||
|
local DeckLib = {}
|
||||||
|
local searchLib = require("util/SearchLib")
|
||||||
|
|
||||||
|
-- places a card/deck at a position or merges into an existing deck
|
||||||
|
---@param obj TTSObject Object to move
|
||||||
|
---@param pos Table New position for the object
|
||||||
|
---@param rot Table New rotation for the object (optional)
|
||||||
|
DeckLib.placeOrMergeIntoDeck = function(obj, pos, rot)
|
||||||
|
if obj == nil or pos == nil then return end
|
||||||
|
|
||||||
|
-- search the new position for existing card/deck
|
||||||
|
local searchResult = searchLib.atPosition(pos, "isCardOrDeck")
|
||||||
|
|
||||||
|
-- get new position
|
||||||
|
local newPos
|
||||||
|
local offset = 0.5
|
||||||
|
if #searchResult == 1 then
|
||||||
|
local bounds = searchResult[1].getBounds()
|
||||||
|
newPos = Vector(pos):setAt("y", bounds.center.y + bounds.size.y / 2 + offset)
|
||||||
|
else
|
||||||
|
newPos = Vector(pos) + Vector(0, offset, 0)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- allow moving the objects smoothly out of the hand
|
||||||
|
obj.use_hands = false
|
||||||
|
|
||||||
|
if rot then
|
||||||
|
obj.setRotationSmooth(rot, false, true)
|
||||||
|
end
|
||||||
|
obj.setPositionSmooth(newPos, false, true)
|
||||||
|
|
||||||
|
-- continue if the card stops smooth moving
|
||||||
|
Wait.condition(
|
||||||
|
function()
|
||||||
|
obj.use_hands = true
|
||||||
|
-- this avoids a TTS bug that merges unrelated cards that are not resting
|
||||||
|
if #searchResult == 1 and searchResult[1] ~= obj then
|
||||||
|
-- call this with avoiding errors (physics is sometimes too fast so the object doesn't exist for the put)
|
||||||
|
pcall(function() searchResult[1].putObject(obj) end)
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
function() return not obj.isSmoothMoving() end, 3)
|
||||||
|
end
|
||||||
|
|
||||||
|
return DeckLib
|
||||||
|
end
|
Loading…
x
Reference in New Issue
Block a user