Project

General

Profile

Feature #1022 » 0018-Unhardcode-wld.map-from-can_city_build_later.patch

S3_1 - Marko Lindqvist, 10/26/2024 05:25 AM

View differences:

client/citydlg_common.c
static bool base_city_queue_insert(struct city *pcity, int position,
struct universal *item)
{
const struct civ_map *nmap = &(wld.map);
if (position == 0) {
struct universal old = pcity->production;
/* Insert as current production. */
if (!can_city_build_direct(&(wld.map), pcity, item)) {
if (!can_city_build_direct(nmap, pcity, item)) {
return FALSE;
}
......
} else if (position >= 1
&& position <= worklist_length(&pcity->worklist)) {
/* Insert into middle. */
if (!can_city_build_later(pcity, item)) {
if (!can_city_build_later(nmap, pcity, item)) {
return FALSE;
}
if (!worklist_insert(&pcity->worklist, item, position - 1)) {
......
}
} else {
/* Insert at end. */
if (!can_city_build_later(pcity, item)) {
if (!can_city_build_later(nmap, pcity, item)) {
return FALSE;
}
if (!worklist_append(&pcity->worklist, item)) {
client/gui-sdl2/wldlg.c
/* Global worklist can have targets unavilable in current state of game
then we must remove those targets from new city worklist */
if (!can_city_build_later(editor->pcity, &pworklist->entries[count])) {
if (!can_city_build_later(&(wld.map), editor->pcity, &pworklist->entries[count])) {
continue;
}
......
for (count = 0; count < worklist_length(pworklist); count++) {
/* global worklist can have targets unavilable in current state of game
then we must remove those targets from new city worklist */
if (!can_city_build_later(editor->pcity, &pworklist->entries[count])) {
if (!can_city_build_later(&(wld.map), editor->pcity, &pworklist->entries[count])) {
continue;
}
common/city.c
/**********************************************************************//**
Returns whether city can ever build given target, unit or improvement.
**************************************************************************/
bool can_city_build_later(const struct city *pcity,
bool can_city_build_later(const struct civ_map *nmap,
const struct city *pcity,
const struct universal *target)
{
const struct civ_map *nmap = &(wld.map);
switch (target->kind) {
case VUT_UTYPE:
return can_city_build_unit_later(nmap, pcity, target->value.utype);
common/city.h
bool can_city_build_direct(const struct civ_map *nmap,
const struct city *pcity,
const struct universal *target);
bool can_city_build_later(const struct city *pcity,
bool can_city_build_later(const struct civ_map *nmap,
const struct city *pcity,
const struct universal *target);
bool can_city_build_now(const struct civ_map *nmap,
const struct city *pcity,
(2-2/2)