106 lines
3.4 KiB
Plaintext
106 lines
3.4 KiB
Plaintext
|
---
|
||
|
--- Generated by EmmyLua(https://github.com/EmmyLua)
|
||
|
--- Created by Whimsical.
|
||
|
--- DateTime: 2021-08-30 5:05 p.m.
|
||
|
---
|
||
|
|
||
|
command_name = "include"
|
||
|
|
||
|
---@type ArkhamImport_Command_RunDirectives
|
||
|
runOn = {
|
||
|
instructions = true,
|
||
|
handlers = true
|
||
|
}
|
||
|
|
||
|
local back_image_default = "https://images-ext-2.discordapp.net/external/QY_dmo_UnAHEi1pgWwaRr1-HSB8AtrAv0W74Mh_Z6vg/https/i.imgur.com/EcbhVuh.jpg"
|
||
|
|
||
|
---@param parameters ArkhamImport_Command_DescriptionInstructionArguments
|
||
|
---@return ArkhamImport_Command_DescriptionInstructionResults
|
||
|
function do_instruction(parameters)
|
||
|
local args = parameters.arguments
|
||
|
local arg_count = #args
|
||
|
|
||
|
if (arg_count<4 or arg_count>6) then
|
||
|
return {
|
||
|
is_successful = false,
|
||
|
error_message = "Include Command requires between 4 and 6 arguments. " .. arg_count .. " were provided."
|
||
|
}
|
||
|
end
|
||
|
|
||
|
if not parameters.command_state["include-command"] then
|
||
|
parameters.command_state["include-command"] = {
|
||
|
has_run = false,
|
||
|
includes = {},
|
||
|
index = 1
|
||
|
}
|
||
|
end
|
||
|
|
||
|
local index = parameters.command_state["include-command"].index
|
||
|
parameters.command_state["include-command"].index = index + 1
|
||
|
|
||
|
parameters.command_state["include-command"].includes[index] = {
|
||
|
count = args[1],
|
||
|
name = args[2],
|
||
|
subtitle = args[3],
|
||
|
image_uri = args[4],
|
||
|
zone = args[5] or "default",
|
||
|
back_image_uri = args[6] or back_image_default
|
||
|
}
|
||
|
|
||
|
return { is_successful = true, command_state = parameters.command_state }
|
||
|
end
|
||
|
|
||
|
---@param parameters ArkhamImport_Command_HandlerArguments
|
||
|
---@return ArkhamImport_Command_HandlerResults
|
||
|
function handle_card(parameters)
|
||
|
local state = parameters.command_state["include-command"]
|
||
|
|
||
|
if state.has_run then return { is_successful = true } end
|
||
|
|
||
|
state.has_run = true
|
||
|
|
||
|
local source = getObjectFromGUID(parameters.source_guid)
|
||
|
local offset = 0.1
|
||
|
|
||
|
for _, include in pairs(state.includes) do
|
||
|
local zone_name = include.zone
|
||
|
local zone = parameters.configuration.zones[zone_name]
|
||
|
|
||
|
if not zone then
|
||
|
return {
|
||
|
is_successful = false,
|
||
|
command_state = parameters.command_state,
|
||
|
error_message = "Include Card [" .. include.name .. "]: Zone \"" .. tostring(zone_name) .. "\" was not found."
|
||
|
}
|
||
|
end
|
||
|
|
||
|
local position = zone.is_absolute and zone.position or source:positionToWorld(zone.position)
|
||
|
|
||
|
for _=1, include.count do
|
||
|
local new = spawnObject {
|
||
|
type = "CardCustom",
|
||
|
position = position + Vector(0, offset, 0),
|
||
|
rotaiton = source:getRotation() + Vector(0, 0, zone.is_facedown and 180 or 0),
|
||
|
---@param card TTSObject
|
||
|
callback_function = function (card)
|
||
|
card:setName(include.name)
|
||
|
card:setDescription(include.subtitle)
|
||
|
end
|
||
|
}
|
||
|
|
||
|
new:setCustomObject {
|
||
|
type = 0,
|
||
|
face = include.image_uri,
|
||
|
back = include.back_image_uri
|
||
|
}
|
||
|
offset = offset + 1
|
||
|
end
|
||
|
end
|
||
|
|
||
|
return {
|
||
|
handled = false, -- This is adding cards without respect to the deck content. So the card we're using to fire this command still needs proper handling
|
||
|
command_state = parameters.command_state,
|
||
|
is_successful = true
|
||
|
}
|
||
|
end
|