Project

General

Profile

Feature #1106 ยป 0081-Unhardcode-wld.map-from-city_refresh_from_main_map.patch

Marko Lindqvist, 11/13/2024 05:47 AM

View differences:

ai/default/aihand.c
int rate_sci_balance = RATE_NOT_SET;
int rate_lux_min_celebrate = maxrate;
int delta_tax = 0, delta_sci = 0;
const struct civ_map *nmap = &(wld.map);
#ifdef DEBUG_TIMERS
struct timer *taxtimer = NULL;
......
cm_query_result(pcity, &cmp, cmr, FALSE);
if (cmr->found_a_valid) {
apply_cmresult_to_city(pcity, cmr);
city_refresh_from_main_map(pcity, NULL);
city_refresh_from_main_map(nmap, pcity, NULL);
if (!city_happy(pcity)) {
CITY_LOG(LOG_ERROR, pcity, "is NOT happy when it should be!");
}
......
/* KLUDGE: Must refresh to restore the original values which
* were clobbered in cm_query_result(), after the tax rates
* were changed. */
city_refresh_from_main_map(pcity, NULL);
city_refresh_from_main_map(nmap, pcity, NULL);
} city_list_iterate_end;
}
common/aicore/cm.c
{
struct city *pcity = state->pcity;
int i, city_radius_sq = city_map_radius_sq_get(pcity);
const struct civ_map *nmap = &(wld.map);
#ifndef FREECIV_NDEBUG
int citizen_count = 0;
#endif
......
}
/* Finally we must refresh the city to reset all the precomputed fields. */
city_refresh_from_main_map(pcity, state->workers_map);
city_refresh_from_main_map(nmap, pcity, state->workers_map);
fc_assert_ret(citizen_count == city_size_get(pcity));
}
......
struct cm_result *result, bool negative_ok)
{
struct cm_state *state = cm_state_init(pcity, negative_ok);
const struct civ_map *nmap = &(wld.map);
/* Refresh the city. Otherwise the CM can give wrong results or just be
* slower than necessary. Note that cities are often passed in in an
/* Refresh the city. Otherwise the CM can give wrong results or just be
* slower than necessary. Note that cities are often passed in in an
* unrefreshed state (which should probably be fixed). */
city_refresh_from_main_map(pcity, NULL);
city_refresh_from_main_map(nmap, pcity, NULL);
cm_find_best_solution(state, param, result, negative_ok);
cm_state_free(state);
common/city.c
workers within the city map. It uses the tile index and its size is
defined by city_map_tiles_from_city(_pcity). See also cm_state_init().
**************************************************************************/
static inline void get_worked_tile_output(const struct city *pcity,
static inline void get_worked_tile_output(const struct civ_map *nmap,
const struct city *pcity,
int *output, bool *workers_map)
{
bool is_worked;
......
bool is_celebrating = base_city_celebrating(pcity);
#endif
struct tile *pcenter = city_tile(pcity);
const struct civ_map *nmap = &(wld.map);
memset(output, 0, O_LAST * sizeof(*output));
......
If 'workers_map' is set, only basic updates are needed.
**************************************************************************/
void city_refresh_from_main_map(struct city *pcity, bool *workers_map)
void city_refresh_from_main_map(const struct civ_map *nmap,
struct city *pcity, bool *workers_map)
{
const struct civ_map *nmap = &(wld.map);
if (workers_map == NULL) {
/* do a full refresh */
......
}
/* Calculate output from citizens (uses city_tile_cache_get_output()). */
get_worked_tile_output(pcity, pcity->citizen_base, workers_map);
get_worked_tile_output(nmap, pcity, pcity->citizen_base, workers_map);
add_specialist_output(pcity, pcity->citizen_base);
set_city_production(pcity);
......
pcity->pollution = city_pollution(pcity, pcity->prod[O_SHIELD]);
happy_copy(pcity, FEELING_LUXURY);
citizen_happy_luxury(pcity); /* with our new found luxuries */
citizen_happy_luxury(pcity); /* With our new found luxuries */
happy_copy(pcity, FEELING_EFFECT);
citizen_content_buildings(pcity);
common/city.h
void city_remove_improvement(struct city *pcity,
const struct impr_type *pimprove);
/* city update functions */
void city_refresh_from_main_map(struct city *pcity, bool *workers_map);
/* City update functions */
void city_refresh_from_main_map(const struct civ_map *nmap,
struct city *pcity, bool *workers_map);
int city_waste(const struct city *pcity, Output_type_id otype, int total,
int *breakdown);
......
int get_final_city_output_bonus(const struct city *pcity, Output_type_id otype);
bool city_built_last_turn(const struct city *pcity);
/* city creation / destruction */
/* City creation / destruction */
struct city *create_city_virtual(struct player *pplayer,
struct tile *ptile, const char *name);
void destroy_city_virtual(struct city *pcity);
bool city_is_virtual(const struct city *pcity);
/* misc */
/* Misc */
bool is_city_option_set(const struct city *pcity, enum city_options option);
void city_styles_alloc(int num);
void city_styles_free(void);
server/cityturn.c
bool city_refresh(struct city *pcity)
{
bool retval;
const struct civ_map *nmap = &(wld.map);
pcity->server.needs_refresh = FALSE;
retval = city_map_update_radius_sq(pcity);
city_units_upkeep(pcity); /* update unit upkeep */
city_refresh_from_main_map(pcity, NULL);
city_units_upkeep(pcity); /* Update unit upkeep */
city_refresh_from_main_map(nmap, pcity, NULL);
city_style_refresh(pcity);
if (retval) {
server/sanitycheck.c
city_specialists(pcity));
city_repair_size(pcity, delta);
city_refresh_from_main_map(pcity, NULL);
city_refresh_from_main_map(nmap, pcity, NULL);
}
}
    (1-1/1)