mirror of
https://github.com/wesnoth/wesnoth
synced 2025-04-25 16:16:23 +00:00

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.
68 lines
2.7 KiB
Lua
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
|