Project

General

Profile

Feature #1171 ยป 0072-AI-Pass-civ_map-to-look_for_charge.patch

Marko Lindqvist, 11/30/2024 06:38 AM

View differences:

ai/default/daimilitary.c
if want is 0 this advisor doesn't want anything
**************************************************************************/
static void dai_unit_consider_bodyguard(struct ai_type *ait,
const struct civ_map *nmap,
struct city *pcity,
struct unit_type *punittype,
struct adv_choice *choice)
......
= unit_virtual_create(pplayer, pcity, punittype,
city_production_unit_veteran_level(pcity,
punittype));
const adv_want want = look_for_charge(ait, pplayer, virtualunit,
const adv_want want = look_for_charge(ait, nmap, pplayer, virtualunit,
&aunit, &acity);
if (want > choice->want) {
......
punittype = dai_choose_bodyguard(ait, nmap, pcity, TC_LAND, L_DEFEND_GOOD,
allow_gold_upkeep);
if (punittype) {
dai_unit_consider_bodyguard(ait, pcity, punittype, choice);
dai_unit_consider_bodyguard(ait, nmap, pcity, punittype, choice);
}
/* If we are in severe danger, don't consider attackers. This is probably
......
punittype = dai_choose_bodyguard(ait, nmap, pcity, TC_OCEAN, L_DEFEND_GOOD,
allow_gold_upkeep);
if (punittype) {
dai_unit_consider_bodyguard(ait, pcity, punittype, choice);
dai_unit_consider_bodyguard(ait, nmap, pcity, punittype, choice);
}
/* Consider making an airplane */
ai/default/daiunit.c
do we attempt to bodyguard units with higher defense than us, or military
units with lower attack than us that are not transports.
**************************************************************************/
adv_want look_for_charge(struct ai_type *ait, struct player *pplayer,
struct unit *punit,
adv_want look_for_charge(struct ai_type *ait, const struct civ_map *nmap,
struct player *pplayer, struct unit *punit,
struct unit **aunit, struct city **acity)
{
struct pf_parameter parameter;
......
int def, best_def = -1;
/* Arbitrary: 3 turns. */
const int max_move_cost = 3 * unit_move_rate(punit);
const struct civ_map *nmap = &(wld.map);
*aunit = NULL;
*acity = NULL;
......
struct city *acity;
struct unit *aunit;
look_for_charge(ait, pplayer, punit, &aunit, &acity);
look_for_charge(ait, nmap, pplayer, punit, &aunit, &acity);
if (acity) {
dai_unit_new_task(ait, punit, AIUNIT_ESCORT, acity->tile);
aiguard_assign_guard_city(ait, acity, punit);
ai/default/daiunit.h
struct city *find_nearest_safe_city(struct unit *punit);
bool uclass_need_trans_between(struct unit_class *pclass,
struct tile *ctile, struct tile *ptile);
adv_want look_for_charge(struct ai_type *ait, struct player *pplayer,
struct unit *punit,
adv_want look_for_charge(struct ai_type *ait, const struct civ_map *nmap,
struct player *pplayer, struct unit *punit,
struct unit **aunit, struct city **acity);
bool dai_can_unit_type_follow_unit_type(const struct unit_type *follower,
const struct unit_type *followee,
    (1-1/1)