Difference between revisions of "LuaMapGenerator"

From The Battle for Wesnoth Wiki
(Created page with "The page describes the api available for lua map generators that is differnt from the ingame lua api. ==== wesnoth.find_path ==== * '''wesnoth.find_path(''src'', ''dst'', '...")
 
Line 1: Line 1:
The page describes the api available for lua map generators that is differnt from the ingame lua api.
+
{{DevFeature1.15}} The page describes the api available for lua map generators that is differnt from the ingame lua api.
  
  

Revision as of 14:06, 11 December 2018

(Version 1.15.x (please read the template documentation to set the correct version number) and later only) The page describes the api available for lua map generators that is differnt from the ingame lua api.


wesnoth.find_path

  • wesnoth.find_path(src, dst, cost_function, mapsize_x, mapsize_y, include_border)

Behaves slightly differntly than in the ingame lua api with the same name in particular it no longer accepts unit arguments and explicitly nees the map size.


wesnoth.create_map

  • wesnoth.create_map (map_data)
  • wesnoth.find_path(width, height, terrain)

Creates a gamemap object, which has the following functions and properties

  • get_terrain(loc)
  • set_terrain(loc, terrain)
  • get_locations(filter, locs_to_check)
  • get_tiles_radius(locations, filter_radius)
  • terrain_mask(x_offset, y_offset, data, optional_argeument_table)
  • width number
  • height number
  • data string

The filters about use custom lua filter objects that can be constructed via wesnoth.create_filter

wesnoth.create_filter

creates a lua filter object from a table describing a lua terrainfilter, this is similar but not the same as wml filters, compiling these into lua objects makes it much faster. A lua filtertable is a table which at index 1 has the type of the filter and the rest depends on the type of the filter, for example wesnoth.create_filter { "terrain", "K*"} " will create a filter that matches keeps. THe follwing types of theilter are known:

  • { "terrain", terraincode } matches for terrain terraincode
  • { "all", <filter1>, <filter2>, <filter3>, ... } matches when all the subfilters match
  • { "any", <filter1>, <filter2>, <filter3>, ... } matches when any the subfilters match
  • { "none", <filter1>, <filter2>, <filter3>, ... } matches when none the subfilters match
  • { "notall", <filter1>, <filter2>, <filter3>, ... } matches when not all the subfilters match
  • { "adjacent", <subfilter>, [count = <count>], [adjacent = <adjacent>]} matches when count adjacent tiles matchthe subfilter ('adjacent=' defaults to 'n,nw,sw,s,se,ne')
  • { "radius", <radius>, <subfilter>, filter_radius = <filter_radius> } radius: number, filter_radius: subfilter.

It is reccomended to create a helper function for filter construction for example:

f = {
	terrain =  function(terrain)
		return { "terrain", terrain }
	end,
	all =  function(...)
		return { "all", ... }
	end,
	any =  function(...)
		return { "any", ... }
	end,
	none =  function(...)
		return { "none", ... }
	end,
	adjacent =  function(f, ad, count)
		return { "adjacent",  f, adjacent = ad, count = count }
	end,
	radius =  function(r, f, f_r)
		return { "radius", r, f, filter_radius = f_r}
	end,
}

wesnoth.create_filter(
  f.all(
    f.terrain("K*"),
    f.radius(4, f.terrain("^V*"))
  )
)

for a filter that matches keepos that are at most distance 4 to a village