SCED/objects/Fan-MadeAccessories.aa8b38/AttachmentHelper.d45664.ttslua
2022-11-12 15:36:48 +01:00

193 lines
6.3 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- Attachment Helper
-- updated by: Chr1Z
-- original by: -
-- description: displays cards in it with cost/skill icons
information = {
version = "1.6",
last_updated = "09.11.2022"
}
option_text = {
"Ancestral Knowledge",
"Astronomical Atlas",
"Crystallizer of Dreams",
"Diana Stanley",
"Gloria Goldberg",
"Sefina Rousseau",
"Wooden Sledge"
}
imageList = {
-- Ancestral Knowledge
"http://cloud-3.steamusercontent.com/ugc/1915746489207287888/2F9F6F211ED0F98E66C9D35D93221E4C7FB6DD3C/",
-- Astronomical Atlas
"http://cloud-3.steamusercontent.com/ugc/1754695853007989004/9153BC204FC707AE564ECFAC063A11CB8C2B5D1E/",
-- Crystallizer of Dreams
"http://cloud-3.steamusercontent.com/ugc/1915746489207280958/100F16441939E5E23818651D1EB5C209BF3125B9/",
-- Diana Stanley
"http://cloud-3.steamusercontent.com/ugc/1754695635919071208/1AB7222850201630826BFFBA8F2BD0065E2D572F/",
-- Gloria Goldberg
"http://cloud-3.steamusercontent.com/ugc/1754695635919102502/453D4426118C8A6DE2EA281184716E26CA924C84/",
-- Sefina Rousseau
"http://cloud-3.steamusercontent.com/ugc/1754695635919099826/3C3CBFFAADB2ACA9957C736491F470AE906CC953/",
-- Wooden Sledge
"http://cloud-3.steamusercontent.com/ugc/1750192233783143973/D526236AAE16BDBB98D3F30E27BAFC1D3E21F4AC/"
}
-- save state and options to restore onLoad
function onSave() return JSON.encode({ cardsInBag, showCost, showIcons }) end
-- load variables and create context menu
function onLoad(saved_data)
local loaded_data = JSON.decode(saved_data)
cardsInBag = loaded_data[1] or {}
showCost = loaded_data[2] or true
showIcons = loaded_data[3] or true
recreateButtons()
self.addContextMenuItem("Select image", selectImage)
self.addContextMenuItem("Toggle cost", function(color)
showCost = not showCost
printToColor("Show cost of cards: " .. tostring(showCost), color, "White")
refresh()
end)
self.addContextMenuItem("Toggle skill icons", function(color)
showIcons = not showIcons
printToColor("Show skill icons of cards: " .. tostring(showIcons), color, "White")
refresh()
end)
self.addContextMenuItem("More Information", function()
printToAll("------------------------------", "White")
printToAll("Attachment Helper v" .. information["version"] .. " by Chr1Z", "Orange")
printToAll("original by: bankey", "White")
printToAll("last updated: " .. information["last_updated"], "White")
end)
end
function selectImage(color)
Player[color].showOptionsDialog("Select image:", option_text, 1, function(_, option_index)
local customInfo = self.getCustomObject()
customInfo.diffuse = imageList[option_index]
self.setCustomObject(customInfo)
self.reload()
end)
end
-- called for every card that enters
function onObjectEnterContainer(container, object)
if container == self then
findCard(object.getGUID(), object.getName(), object.getGMNotes())
recreateButtons()
end
end
-- removes leaving cards from the "cardInBag" table
function onObjectLeaveContainer(container, object)
if container == self then
local guid = object.getGUID()
for i, card in ipairs(cardsInBag) do
if card.id == guid then table.remove(cardsInBag, i) end
end
recreateButtons()
end
end
-- refreshes displayed buttons based on contained cards
function refresh()
cardsInBag = {}
for _, object in ipairs(self.getObjects()) do
findCard(object.guid, object.name, object.gm_notes)
end
recreateButtons()
end
-- gets cost and icons for a card
function findCard(guid, name, GMNotes)
local cost = ""
local icons = {}
local metadata = {}
if name == nil or name == "" then name = "unnamed" end
if showCost or showIcons then metadata = JSON.decode(GMNotes) end
if showCost then
if GMNotes ~= "" then cost = metadata.cost end
if cost == nil or cost == "" then cost = "" end
name = "[" .. cost .. "] " .. name
end
if showIcons then
if GMNotes ~= "" then
icons[1] = metadata.wildIcons
icons[2] = metadata.willpowerIcons
icons[3] = metadata.intellectIcons
icons[4] = metadata.combatIcons
icons[5] = metadata.agilityIcons
end
local IconTypes = { "Wild", "Willpower", "Intellect", "Combat", "Agility" }
local found = false
for i = 1, 5 do
if icons[i] ~= nil and icons[i] ~= "" then
if found == false then
name = name .. "\n" .. IconTypes[i] .. ": " .. icons[i]
found = true
else
name = name .. " " .. IconTypes[i] .. ": " .. icons[i]
end
end
end
end
table.insert(cardsInBag, { name = name, id = guid })
end
-- recreates buttons with up-to-date labels
function recreateButtons()
self.clearButtons()
local verticalPosition = 1.65
for _, card in ipairs(cardsInBag) do
if _G['removeCard' .. card.id] == nil then
_G['removeCard' .. card.id] = function() removeCard(card.id) end
end
self.createButton({
label = card.name,
click_function = "removeCard" .. card.id,
function_owner = self,
position = { 0, 0, verticalPosition },
height = 200,
width = 1200,
font_size = string.len(card.name) > 20 and 75 or 100
})
verticalPosition = verticalPosition - 0.5
end
local countLabel = '\nAttachment\nHelper\n' .. information["version"]
if #cardsInBag ~= 0 then countLabel = #cardsInBag end
self.createButton({
label = countLabel,
click_function = "none",
function_owner = self,
position = { 0, 0, -1.35 },
height = 0,
width = 0,
font_size = 225,
font_color = { 1, 1, 1, 1 }
})
end
-- click-function for buttons to take a card out of the bag
function removeCard(cardGUID)
self.takeObject({
guid = cardGUID,
rotation = self.getRotation(),
position = self.getPosition() + Vector(0, 0.25, 0),
callback_function = function(obj) obj.resting = true end
})
end