diff --git a/src/core/Global.ttslua b/src/core/Global.ttslua index cbca475f..08234c7c 100644 --- a/src/core/Global.ttslua +++ b/src/core/Global.ttslua @@ -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") @@ -850,17 +851,19 @@ function applyOptionPanelChange(id, state) -- option: Show hand helper for each player elseif id == "showHandHelper" then - optionPanel[id][1] = spawnOrRemoveHelper(state, "Hand Helper", playmatAPI.transformLocalPosition({0.05, 0, -1.182}, "White") , {0, 270, 0}) - optionPanel[id][2] = spawnOrRemoveHelper(state, "Hand Helper", playmatAPI.transformLocalPosition({0.05, 0, -1.182}, "Orange"), {0, 270, 0}) - optionPanel[id][3] = spawnOrRemoveHelper(state, "Hand Helper", playmatAPI.transformLocalPosition({0.05, 0, -1.182}, "Green"), {0, 000, 0}) - optionPanel[id][4] = spawnOrRemoveHelper(state, "Hand Helper", playmatAPI.transformLocalPosition({0.05, 0, -1.182}, "Red"), {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", playmatAPI.transformLocalPosition({-0.3, 0, -1.182}, "White"), {0, 270, 0}) - optionPanel[id][2] = spawnOrRemoveHelper(state, "Search Assistant", playmatAPI.transformLocalPosition({-0.3, 0, -1.182}, "Orange"), {0, 270, 0}) - optionPanel[id][3] = spawnOrRemoveHelper(state, "Search Assistant", playmatAPI.transformLocalPosition({-0.3, 0, -1.182}, "Green"), {0, 000, 0}) - optionPanel[id][4] = spawnOrRemoveHelper(state, "Search Assistant", playmatAPI.transformLocalPosition({-0.3, 0, -1.182}, "Red"), {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 @@ -907,7 +910,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 diff --git a/src/playermat/Playmat.ttslua b/src/playermat/Playmat.ttslua index d1250715..fbc72e82 100644 --- a/src/playermat/Playmat.ttslua +++ b/src/playermat/Playmat.ttslua @@ -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 @@ -158,7 +157,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, @@ -181,7 +180,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}) @@ -220,7 +219,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, @@ -252,7 +251,7 @@ function doUpkeep(_, color, alt_click) 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 @@ -700,10 +699,6 @@ function returnGlobalDiscardPosition() return self.positionToWorld(DISCARD_PILE_POSITION) end -function transformLocalPosition(localPos) - return self.positionToWorld(localPos) -end - -- Sets this playermat's draw 1 button to visible ---@param visible Boolean. Whether the draw 1 button should be visible function showDrawButton(visible) @@ -766,7 +761,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 diff --git a/src/playermat/PlaymatApi.ttslua b/src/playermat/PlaymatApi.ttslua index d9f11010..df49ded4 100644 --- a/src/playermat/PlaymatApi.ttslua +++ b/src/playermat/PlaymatApi.ttslua @@ -75,7 +75,14 @@ do ---@param matColor String Color of the playermat PlaymatApi.transformLocalPosition = function(localPos, matColor) local mat = getObjectFromGUID(MAT_IDS[matColor]) - return mat.call("transformLocalPosition", localPos) + 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