Feature #308 ยป 0027-Drop-unused-caravan_evaluate.patch
| common/aicore/caravan.c | ||
|---|---|---|
|
Functions to compute the benefit of moving the caravan to dest.
|
||
|
****************************************************************************/
|
||
|
/************************************************************************//**
|
||
|
Ignoring the transit time, return the value of moving the caravan
|
||
|
to dest.
|
||
|
****************************************************************************/
|
||
|
static void caravan_evaluate_notransit(const struct unit *caravan,
|
||
|
const struct city *dest,
|
||
|
const struct caravan_parameter *param,
|
||
|
struct caravan_result *result)
|
||
|
{
|
||
|
const struct city *src = game_city_by_number(caravan->homecity);
|
||
|
caravan_result_init(result, src, dest, 0);
|
||
|
get_discounted_reward(caravan, param, result);
|
||
|
}
|
||
|
/************************************************************************//**
|
||
|
Structure and callback for the caravan_search invocation in
|
||
|
caravan_evaluate_withtransit().
|
||
|
****************************************************************************/
|
||
|
struct cewt_data {
|
||
|
const struct unit *caravan;
|
||
|
struct caravan_result *result;
|
||
|
const struct caravan_parameter *param;
|
||
|
};
|
||
|
static bool cewt_callback(void *vdata, const struct city *dest,
|
||
|
int arrival_time, int moves_left)
|
||
|
{
|
||
|
struct cewt_data *data = vdata;
|
||
|
fc_assert_ret_val(data->result, FALSE);
|
||
|
if (dest == data->result->dest) {
|
||
|
data->result->arrival_time = arrival_time;
|
||
|
get_discounted_reward(data->caravan, data->param, data->result);
|
||
|
return TRUE;
|
||
|
} else {
|
||
|
return FALSE;
|
||
|
}
|
||
|
}
|
||
|
/************************************************************************//**
|
||
|
Using the caravan_search function to take transit time into account,
|
||
|
evaluate the benefit of sending the caravan to dest.
|
||
|
****************************************************************************/
|
||
|
static void caravan_evaluate_withtransit(const struct civ_map *nmap,
|
||
|
const struct unit *caravan,
|
||
|
const struct city *dest,
|
||
|
const struct caravan_parameter *param,
|
||
|
struct caravan_result *result,
|
||
|
bool omniscient)
|
||
|
{
|
||
|
struct cewt_data data;
|
||
|
data.caravan = caravan;
|
||
|
data.param = param;
|
||
|
caravan_result_init(result, game_city_by_number(caravan->homecity),
|
||
|
dest, 0);
|
||
|
data.result = result;
|
||
|
caravan_search_from(nmap, caravan, param, unit_tile(caravan), 0,
|
||
|
caravan->moves_left, omniscient, cewt_callback, &data);
|
||
|
}
|
||
|
/************************************************************************//**
|
||
|
Evaluate the value of sending the caravan to dest.
|
||
|
****************************************************************************/
|
||
|
void caravan_evaluate(const struct unit *caravan,
|
||
|
const struct city *dest,
|
||
|
const struct caravan_parameter *param,
|
||
|
struct caravan_result *result, bool omniscient)
|
||
|
{
|
||
|
const struct civ_map *nmap = &(wld.map);
|
||
|
if (param->ignore_transit_time) {
|
||
|
caravan_evaluate_notransit(caravan, dest, param, result);
|
||
|
} else {
|
||
|
caravan_evaluate_withtransit(nmap, caravan, dest, param, result, omniscient);
|
||
|
}
|
||
|
}
|
||
|
/************************************************************************//**
|
||
|
Find the best destination for the caravan, ignoring transit time.
|
||
|
****************************************************************************/
|
||
| ... | ... | |
|
/************************************************************************//**
|
||
|
Callback and struct for caravan_search invocation in
|
||
|
caravan_find_best_destination_withtransit.
|
||
|
caravan_find_best_destination_withtransit().
|
||
|
****************************************************************************/
|
||
|
struct cfbdw_data {
|
||
|
const struct caravan_parameter *param;
|
||
| common/aicore/caravan.h | ||
|---|---|---|
|
int caravan_result_compare(const struct caravan_result *a,
|
||
|
const struct caravan_result *b);
|
||
|
void caravan_evaluate(const struct unit *caravan, const struct city *dest,
|
||
|
const struct caravan_parameter *parameter,
|
||
|
struct caravan_result *result, bool omniscient);
|
||
|
void caravan_find_best_destination(const struct unit *caravan,
|
||
|
const struct caravan_parameter *parameter,
|
||
|
struct caravan_result *result, bool omniscient);
|
||