wesnoth/data/ai/micro_ais/micro_ai_unit_variables.lua
Steve Cotton 49ebbb9709 Make fix_whitespace complain about mixing tabs and spaces
Ensures that files either use tabs for indentation or spaces for indentation,
but don't switch between the two within the same file.

This doesn't fix the whitespace, it's a simple check to flag it up
on the assumption that it's better to use an editor or code formatter
to clean up the file.

Elsewhere in the CI we use the luacheck tool - while that can detect
mixing tabs and spaces in a single line's indent, it doesn't check for
inconsistent indentation within a file.
2023-02-05 02:22:53 +01:00

68 lines
2.7 KiB
Lua

-- This set of functions provides a consistent way of storing Micro AI
-- variables in units. Individual variables are stored inside a table with a
-- name specific to the MAI ('micro_ai-' .. ai_id). This table is removed when
-- the Micro AI is deleted in order to ensure that subsequent Micro AIs used
-- in the same scenario (or using the same units in later scenarios) work
-- correctly.
-- Note that, with this method, there can only ever be one of these tables for each
-- ai_id in each unit, but several tables are created for the same unit when there
-- are several Micro AIs with different ai_id values.
-- For the time being, we do not allow sub-tables. This is done because these
-- unit variables are required to be persistent across save-load cycles and
-- therefore need to be in WML table format. This could be extended to allow
-- sub-tables in WML format, but there is no need for that at this time.
function wesnoth.custom_synced_commands.MAI_set_unit_variable(cfg)
local unit = wesnoth.units.find_on_map { id = cfg.id }[1]
local value = wml.get_child(cfg, "value")
unit.variables['micro_ai_' .. cfg.ai_id] = value
end
local function MAI_set_unit_variable(unit, ai_id, value)
-- This is just a wrapper function for the synced command above, so that
-- we don't need to duplicate the code for creating the cfg WML table.
local cfg = {
id = unit.id,
ai_id = ai_id
}
if value then table.insert(cfg, { "value", value }) end
wesnoth.sync.invoke_command("MAI_set_unit_variable", cfg)
end
local micro_ai_unit_variables = {}
function micro_ai_unit_variables.delete_mai_unit_variables(unit, ai_id)
MAI_set_unit_variable(unit, ai_id, nil)
end
function micro_ai_unit_variables.insert_mai_unit_variables(unit, ai_id, vars_table)
local mai_var = unit.variables['micro_ai_' .. ai_id] or {}
-- Restrict to top-level named fields
for k,v in pairs(vars_table) do mai_var[k] = v end
MAI_set_unit_variable(unit, ai_id, mai_var)
end
function micro_ai_unit_variables.set_mai_unit_variables(unit, ai_id, vars_table)
local mai_var = {}
-- Restrict to top-level named fields
for k,v in pairs(vars_table) do mai_var[k] = v end
MAI_set_unit_variable(unit, ai_id, mai_var)
end
function micro_ai_unit_variables.get_mai_unit_variables(unit, ai_id, key)
-- Get the content of [unit][variables]['micro_ai_' .. ai_id] tag
-- Return value:
-- - If tag is found: value of key if @key parameter is given, otherwise entire table
-- - If no such tag is found: nil if @key is given, otherwise empty table
local mai_var = unit.variables['micro_ai_' .. ai_id] or {}
if key then
return mai_var[key]
else
return mai_var
end
end
return micro_ai_unit_variables