Feature #433 » 0020-Unhardcode-wld.map-from-city_tile_cache_update.patch
common/city.c | ||
---|---|---|
int output[O_LAST];
|
||
};
|
||
static inline void city_tile_cache_update(struct city *pcity);
|
||
static inline void city_tile_cache_update(const struct civ_map *nmap,
|
||
struct city *pcity);
|
||
static inline int city_tile_cache_get_output(const struct city *pcity,
|
||
int city_tile_index,
|
||
enum output_type_id o);
|
||
... | ... | |
bool can_city_build_unit_direct(const struct city *pcity,
|
||
const struct unit_type *punittype)
|
||
{
|
||
const struct civ_map *nmap = &(wld.map);
|
||
if (!can_player_build_unit_direct(city_owner(pcity), punittype)) {
|
||
return FALSE;
|
||
}
|
||
... | ... | |
/* You can't build naval units inland. */
|
||
if (!uclass_has_flag(utype_class(punittype), UCF_BUILD_ANYWHERE)
|
||
&& !is_native_near_tile(&(wld.map), utype_class(punittype),
|
||
&& !is_native_near_tile(nmap, utype_class(punittype),
|
||
pcity->tile)) {
|
||
return FALSE;
|
||
}
|
||
... | ... | |
bool can_city_build_unit_later(const struct city *pcity,
|
||
const struct unit_type *punittype)
|
||
{
|
||
const struct civ_map *nmap = &(wld.map);
|
||
/* Can the _player_ ever build this unit? */
|
||
if (!can_player_build_unit_later(city_owner(pcity), punittype)) {
|
||
return FALSE;
|
||
... | ... | |
/* Some units can be built only in certain cities -- for instance,
|
||
ships may be built only in cities adjacent to ocean. */
|
||
if (!uclass_has_flag(utype_class(punittype), UCF_BUILD_ANYWHERE)
|
||
&& !is_native_near_tile(&(wld.map), utype_class(punittype),
|
||
&& !is_native_near_tile(nmap, utype_class(punittype),
|
||
pcity->tile)) {
|
||
return FALSE;
|
||
}
|
||
... | ... | |
TODO: use the cached values elsewhere in the code!
|
||
**************************************************************************/
|
||
static inline void city_tile_cache_update(struct city *pcity)
|
||
static inline void city_tile_cache_update(const struct civ_map *nmap,
|
||
struct city *pcity)
|
||
{
|
||
bool is_celebrating = base_city_celebrating(pcity);
|
||
int radius_sq = city_map_radius_sq_get(pcity);
|
||
const struct civ_map *nmap = &(wld.map);
|
||
/* Initialize tile_cache if needed */
|
||
if (pcity->tile_cache == NULL || pcity->tile_cache_radius_sq == -1
|
||
... | ... | |
**************************************************************************/
|
||
void city_refresh_from_main_map(struct city *pcity, bool *workers_map)
|
||
{
|
||
const struct civ_map *nmap = &(wld.map);
|
||
if (workers_map == NULL) {
|
||
/* do a full refresh */
|
||
/* Calculate the bonus[] array values. */
|
||
set_city_bonuses(pcity);
|
||
/* Calculate the tile_cache[] values. */
|
||
city_tile_cache_update(pcity);
|
||
city_tile_cache_update(nmap, pcity);
|
||
/* manage settlers, and units */
|
||
city_support(pcity);
|
||
}
|
- « Previous
- 1
- 2
- Next »