Please note that some information on this wiki is still based on the demo version.
If you notice any errors, feel free to correct them.
Module:Abilities/Grid: Difference between revisions
From Super Fantasy Kingdom Official Wiki
wgg>Cadaei simplified mark arguments |
var name fix |
||
| (8 intermediate revisions by 4 users not shown) | |||
| Line 2: | Line 2: | ||
function p.grid(f) | function p.grid(f) | ||
-- when called via a template calling invoke | |||
return p.create(f:getParent().args) | return p.create(f:getParent().args) | ||
end | |||
function p.gridInvoke(f) | |||
-- when called with {{#invoke:Abilities/Grid|gridInvoke|mark=1}} | |||
return p.create(f.args) | |||
end | end | ||
function p.create(args) | function p.create(args) | ||
local columns = args.columns or 5 | -- columns and rows are fixed to 5 for now | ||
local rows = args.rows or 5 | local columns = 5 --args.columns or 5 | ||
local rows = 5 --args.rows or 5 | |||
-- indexing fields: starting top left with 1, counting up row by row | -- indexing fields: starting top left with 1, counting up row by row | ||
local centerIndex = math.floor( | local totalCellCount = columns * rows; | ||
local centerIndex = math.floor(totalCellCount / 2) + 1 | |||
local classDefinitions = { | local classDefinitions = { | ||
['center'] = 'influence-center', | ['center'] = 'influence-center', | ||
['1'] = 'influence-blue', | ['1'] = 'influence-blue', | ||
['all'] = 'influence-red' | ['all'] = 'influence-red', | ||
['source'] = 'influence-source' | |||
} | } | ||
local mark = args['mark'] or '' | local mark = args['mark'] or '' | ||
local markAllCells = mark | local markSource = args['markSource'] or '' | ||
local markAllCells = string.find(mark, 'all') ~= nil | |||
local markCells = {} | local markCells = {} | ||
for i in string.gmatch(mark, '%d+') do | for i in string.gmatch(mark, '%d+') do | ||
markCells[i] = true | markCells[tonumber(i)] = true | ||
end | |||
local markCellsSource = {} | |||
for i in string.gmatch(markSource, '%d+') do | |||
markCellsSource[tonumber(i)] = true | |||
end | end | ||
local gridCells = {} | |||
for i = 1, totalCellCount do | |||
local classes = {} | |||
if i == centerIndex then | |||
table.insert(classes, classDefinitions['center']) | |||
end | end | ||
table.insert( | if markAllCells then | ||
table.insert(classes, classDefinitions['all']) | |||
return '< | end | ||
if markCells[i] then | |||
table.insert(classes, classDefinitions['1']) | |||
end | |||
local classStyling = '' | |||
if #classes > 0 then | |||
classStyling = ' class="'..table.concat(classes, ' ')..'"' | |||
end | |||
local sourceMarker = '' | |||
if markCellsSource[i] then | |||
sourceMarker = '<span class="'..classDefinitions['source']..'"/>' | |||
end | |||
table.insert(gridCells, '<div'..classStyling..'>'..sourceMarker..'</div>') | |||
end | |||
return '<div class="influence-grid" title="The center square represents the unit.
Colored squares represent units affected by the effect
Circles represent units needed for the effect.">'.. | |||
table.concat(gridCells)..'</div>' | |||
end | end | ||
return p | return p | ||
Latest revision as of 18:52, 27 November 2025
Creates a grid where some cells can be highlighted. The center is always white unless highlighted by another color.
This module is used by Module:Abilities.
Arguments
mark:allor comma separated list of indices to highlight, e.g.7,8,9.markSource: comma separated list of indices to highlight as effect source, e.g.7,8,9.
Indices
| 1 | 2 | 3 | 4 | 5 |
| 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 |
Examples
mark = 7,8,9,12,14
mark = 7,8,9,12,14 | markSource=18
mark = all
local p = {}
function p.grid(f)
-- when called via a template calling invoke
return p.create(f:getParent().args)
end
function p.gridInvoke(f)
-- when called with {{#invoke:Abilities/Grid|gridInvoke|mark=1}}
return p.create(f.args)
end
function p.create(args)
-- columns and rows are fixed to 5 for now
local columns = 5 --args.columns or 5
local rows = 5 --args.rows or 5
-- indexing fields: starting top left with 1, counting up row by row
local totalCellCount = columns * rows;
local centerIndex = math.floor(totalCellCount / 2) + 1
local classDefinitions = {
['center'] = 'influence-center',
['1'] = 'influence-blue',
['all'] = 'influence-red',
['source'] = 'influence-source'
}
local mark = args['mark'] or ''
local markSource = args['markSource'] or ''
local markAllCells = string.find(mark, 'all') ~= nil
local markCells = {}
for i in string.gmatch(mark, '%d+') do
markCells[tonumber(i)] = true
end
local markCellsSource = {}
for i in string.gmatch(markSource, '%d+') do
markCellsSource[tonumber(i)] = true
end
local gridCells = {}
for i = 1, totalCellCount do
local classes = {}
if i == centerIndex then
table.insert(classes, classDefinitions['center'])
end
if markAllCells then
table.insert(classes, classDefinitions['all'])
end
if markCells[i] then
table.insert(classes, classDefinitions['1'])
end
local classStyling = ''
if #classes > 0 then
classStyling = ' class="'..table.concat(classes, ' ')..'"'
end
local sourceMarker = ''
if markCellsSource[i] then
sourceMarker = '<span class="'..classDefinitions['source']..'"/>'
end
table.insert(gridCells, '<div'..classStyling..'>'..sourceMarker..'</div>')
end
return '<div class="influence-grid" title="The center square represents the unit.
Colored squares represent units affected by the effect
Circles represent units needed for the effect.">'..
table.concat(gridCells)..'</div>'
end
return p


