Project

General

Profile

Bug #209 » 0029-Unhardcode-wld.map-from-can_unit_-paradrop-teleport.patch

main - Marko Lindqvist, 01/30/2024 08:23 PM

View differences:

ai/default/aiparatrooper.c
{
struct city *pcity = tile_city(unit_tile(punit));
struct tile *ptile_dest = NULL;
const struct civ_map *nmap = &(wld.map);
int sanity = punit->id;
/* defend attacking (and be opportunistic too) */
/* Defend attacking (and be opportunistic too) */
if (!dai_military_rampage(punit, RAMPAGE_ANYTHING,
RAMPAGE_FREE_CITY_OR_BETTER)) {
/* dead */
/* Dead */
return;
}
/* check to recover hit points */
/* Check to recover hit points */
if ((punit->hp < unit_type_get(punit)->hp / 2) && pcity) {
UNIT_LOG(LOGLEVEL_PARATROOPER, punit, "Recovering hit points.");
return;
}
/* nothing to do! */
/* Nothing to do! */
if (punit->moves_left == 0) {
return;
}
......
return;
}
if (can_unit_paradrop(punit)) {
if (can_unit_paradrop(nmap, punit)) {
ptile_dest = find_best_tile_to_paradrop_to(ait, punit);
if (ptile_dest) {
......
}
}
} else {
/* we can't paradrop :-( */
/* We can't paradrop :-( */
struct city *acity = NULL;
/* we are in a city, so don't try to find another */
/* We are in a city, so don't try to find another */
if (pcity) {
UNIT_LOG(LOGLEVEL_PARATROOPER, punit,
"waiting in a city for next turn.");
return;
}
/* find a city to go to recover and paradrop from */
/* Find a city to go to recover and paradrop from */
acity = find_nearest_safe_city(punit);
if (acity) {
client/control.c
return;
}
unit_list_iterate(punits, punit) {
if (can_unit_paradrop(punit)) {
if (can_unit_paradrop(&(wld.map), punit)) {
can = TRUE;
break;
}
......
}
unit_list_iterate(punits, punit) {
if (can_unit_teleport(punit)) {
if (can_unit_teleport(&(wld.map), punit)) {
can = TRUE;
break;
}
client/gui-gtk-3.22/menu.c
menu_entry_set_sensitive("UNIT_SENTRY",
can_units_do_activity_client(punits, ACTIVITY_SENTRY));
menu_entry_set_sensitive("DO_PARADROP",
can_units_do(punits, can_unit_paradrop));
can_units_do_on_map(&(wld.map), punits, can_unit_paradrop));
/* FIXME: should conditionally rename "Pillage" to "Pillage..." in cases
* where selecting the command results in a dialog box listing options of
* what to pillage */
client/gui-gtk-4.0/menu.c
units_can_do_action(punits, ACTION_ANY, TRUE));
menu_entry_set_sensitive(map, "UNIT_TELEPORT",
can_units_do(punits, can_unit_teleport));
can_units_do_on_map(&(wld.map), punits, can_unit_teleport));
menu_entry_set_sensitive(map, "BUILD_ROAD",
(can_units_do_any_road(&(wld.map), punits)
......
can_units_do_activity_client(punits,
ACTIVITY_FORTIFYING));
menu_entry_set_sensitive(map, "PARADROP",
can_units_do(punits, can_unit_paradrop));
can_units_do_on_map(&(wld.map), punits, can_unit_paradrop));
menu_entry_set_sensitive(map, "PILLAGE",
can_units_do_activity_client(punits, ACTIVITY_PILLAGE));
menu_entry_set_sensitive(map, "CLEAN",
client/gui-gtk-5.0/menu.c
units_can_do_action(punits, ACTION_ANY, TRUE));
menu_entry_set_sensitive(map, "UNIT_TELEPORT",
can_units_do(punits, can_unit_teleport));
can_units_do_on_map(&(wld.map), punits, can_unit_teleport));
menu_entry_set_sensitive(map, "BUILD_ROAD",
(can_units_do_any_road(&(wld.map), punits)
......
can_units_do_activity_client(punits,
ACTIVITY_FORTIFYING));
menu_entry_set_sensitive(map, "PARADROP",
can_units_do(punits, can_unit_paradrop));
can_units_do_on_map(&(wld.map), punits, can_unit_paradrop));
menu_entry_set_sensitive(map, "PILLAGE",
can_units_do_activity_client(punits, ACTIVITY_PILLAGE));
menu_entry_set_sensitive(map, "CLEAN",
client/gui-qt/hudwidget.cpp
}
// Paradrop
if (can_unit_paradrop(current_unit)) {
if (can_unit_paradrop(&(wld.map), current_unit)) {
a = new hud_action(this);
a->action_shortcut = SC_PARADROP;
a->set_pixmap(fc_icons::instance()->get_pixmap("paradrop"));
client/gui-qt/menu.cpp
break;
case PARADROP:
if (can_units_do(punits, can_unit_paradrop)) {
if (can_units_do_on_map(&(wld.map), punits, can_unit_paradrop)) {
i.value()->setEnabled(true);
i.value()->setText(QString(action_id_name_translation(ACTION_PARADROP))
.replace("&", "&&"));
......
void mr_menu::slot_paradrop()
{
unit_list_iterate(get_units_in_focus(), punit) {
if (can_unit_paradrop(punit)) {
if (can_unit_paradrop(&(wld.map), punit)) {
key_unit_paradrop();
}
} unit_list_iterate_end;
client/gui-sdl2/dialogs.c
#endif /* 0 */
/* FIXME: This logic seems to try to mirror do_paradrop() why? */
if (can_unit_paradrop(focus_unit) && client_tile_get_known(ptile)
if (can_unit_paradrop(&(wld.map), focus_unit) && client_tile_get_known(ptile)
&& !(((pcity && pplayers_non_attack(client.conn.playing, city_owner(pcity)))
|| is_non_attack_unit_tile(ptile, client.conn.playing)))
&& (unit_type_get(focus_unit)->paratroopers_range >=
client/gui-sdl2/menu.c
set_wflag(order_airbase_button, WF_HIDDEN);
}
if (can_unit_paradrop(punit)) {
if (can_unit_paradrop(&(wld.map), punit)) {
local_show(ID_UNIT_ORDER_PARADROP);
} else {
local_hide(ID_UNIT_ORDER_PARADROP);
client/gui-sdl3/dialogs.c
#endif /* 0 */
/* FIXME: This logic seems to try to mirror do_paradrop() why? */
if (can_unit_paradrop(focus_unit) && client_tile_get_known(ptile)
if (can_unit_paradrop(&(wld.map), focus_unit) && client_tile_get_known(ptile)
&& !(((pcity && pplayers_non_attack(client.conn.playing, city_owner(pcity)))
|| is_non_attack_unit_tile(ptile, client.conn.playing)))
&& (unit_type_get(focus_unit)->paratroopers_range >=
client/gui-sdl3/menu.c
set_wflag(order_airbase_button, WF_HIDDEN);
}
if (can_unit_paradrop(punit)) {
if (can_unit_paradrop(&(wld.map), punit)) {
local_show(ID_UNIT_ORDER_PARADROP);
} else {
local_hide(ID_UNIT_ORDER_PARADROP);
common/unit.c
a friendly city or on an airbase special, has enough movepoints left, and
has not paradropped yet this turn.
**************************************************************************/
bool can_unit_teleport(const struct unit *punit)
bool can_unit_teleport(const struct civ_map *nmap, const struct unit *punit)
{
const struct civ_map *nmap = &(wld.map);
action_by_result_iterate(paction, ACTRES_TELEPORT) {
if (action_maybe_possible_actor_unit(nmap, action_id(paction), punit)) {
return TRUE;
......
a friendly city or on an airbase special, has enough movepoints left, and
has not paradropped yet this turn.
**************************************************************************/
bool can_unit_paradrop(const struct unit *punit)
bool can_unit_paradrop(const struct civ_map *nmap, const struct unit *punit)
{
const struct civ_map *nmap = &(wld.map);
action_by_result_iterate(paction, ACTRES_PARADROP) {
if (action_maybe_possible_actor_unit(nmap, action_id(paction), punit)) {
return TRUE;
common/unit.h
bool can_unit_unload(const struct unit *punit, const struct unit *ptrans);
bool can_unit_deboard_or_be_unloaded(const struct unit *pcargo,
const struct unit *ptrans);
bool can_unit_teleport(const struct unit *punit);
bool can_unit_paradrop(const struct unit *punit);
bool can_unit_teleport(const struct civ_map *nmap, const struct unit *punit);
bool can_unit_paradrop(const struct civ_map *nmap, const struct unit *punit);
bool can_unit_change_homecity_to(const struct unit *punit,
const struct city *pcity);
bool can_unit_change_homecity(const struct unit *punit);
common/unitlist.c
return FALSE;
}
/************************************************************************//**
Return TRUE if the function returns true for any of the units,
on specific map.
****************************************************************************/
bool can_units_do_on_map(const struct civ_map *nmap,
const struct unit_list *punits,
bool (can_fn)(const struct civ_map *nmap,
const struct unit *punit))
{
unit_list_iterate(punits, punit) {
if (can_fn(nmap, punit)) {
return TRUE;
}
} unit_list_iterate_end;
return FALSE;
}
/************************************************************************//**
Returns TRUE if any of the units can do the activity.
****************************************************************************/
common/unitlist.h
bool can_units_do(const struct unit_list *punits,
bool (can_fn)(const struct unit *punit));
bool can_units_do_on_map(const struct civ_map *nmap,
const struct unit_list *punits,
bool (can_fn)(const struct civ_map *nmap,
const struct unit *punit));
bool can_units_do_activity(const struct civ_map *nmap,
const struct unit_list *punits,
enum unit_activity activity);
(1-1/3)