mirror of
https://github.com/wesnoth/wesnoth
synced 2025-05-19 09:14:18 +00:00
107 lines
2.1 KiB
Plaintext
107 lines
2.1 KiB
Plaintext
fai 'ai/formula/lib/map_evaluation.fai' #===== Evaluation how good unit is on a map ===== #
|
|
|
|
# filter out important locations #
|
|
|
|
# creates a 'map' data type that assigns terrain to location #
|
|
def location_to_terrain_map(ai*)
|
|
tomap( map(map.terrain, loc), map.terrain );
|
|
|
|
# creates a 'map' data type that assigns location to terrain#
|
|
def id_to_location_map(ai*)
|
|
map( tomap( map(map.terrain, id)), find(map.terrain, id=key).loc);
|
|
|
|
#this function returns all input hexes and hexes within some radius of them#
|
|
def get_locations_surroundings(ai*, input_locs, range)
|
|
sum(
|
|
map(input_locs,
|
|
locations_in_radius( self, range)
|
|
)
|
|
);
|
|
|
|
#this function returns all keeps and hexes within some radius#
|
|
def get_keeps_with_surroundings(ai*, range)
|
|
sum(map(keeps, locations_in_radius( self, range)));
|
|
|
|
|
|
|
|
|
|
# evaluate average defense #
|
|
|
|
#gives map where key is id of terrain, and value is number of hexes of that terrain on a gamemap#
|
|
def locations_map(ai*)
|
|
tomap(
|
|
map(
|
|
map.terrain,
|
|
id
|
|
)
|
|
);
|
|
|
|
|
|
#
|
|
filters terrain map,
|
|
min_percent it minimal % of map that terrain has to occupy to be considered in later evaluations
|
|
#
|
|
def filtered_locations_map(ai*, min_percent)
|
|
filter(
|
|
locations_map(ai) ,
|
|
value > (map.w * map.h) / ( 100 / min_percent )
|
|
);
|
|
|
|
|
|
#returns average defense of the unit #
|
|
def unit_average_defense(ai*, unit, terrain_min_percent )
|
|
sum(
|
|
values(
|
|
map(
|
|
filtered_locations_map(ai,terrain_min_percent),
|
|
defense_on(
|
|
unit,
|
|
find(map.terrain,id=key).loc
|
|
) *
|
|
value
|
|
)
|
|
)
|
|
) /
|
|
sum(
|
|
values(
|
|
filtered_locations_map(
|
|
ai,
|
|
terrain_min_percent
|
|
)
|
|
)
|
|
);
|
|
|
|
#returns map of units from units_list and their average defense (more -> better) #
|
|
|
|
def map_units_average_defense(ai*, units_list, terrain_min_percent)
|
|
tomap(
|
|
map(
|
|
units_list,
|
|
id
|
|
),
|
|
map(
|
|
units_list, 'unit',
|
|
unit_average_defense(
|
|
ai,
|
|
unit,
|
|
terrain_min_percent
|
|
)
|
|
)
|
|
);
|
|
|
|
def units_average_defense(ai*, units_list, terrain_min_percent)
|
|
sum(
|
|
map(
|
|
units_list, 'unit',
|
|
unit_average_defense(
|
|
ai,
|
|
unit,
|
|
terrain_min_percent
|
|
)
|
|
)
|
|
) /
|
|
size(
|
|
units_list
|
|
);
|
|
|
|
faiend |