Project

General

Profile

Feature #273 ยป 0036-Unhardcode-wld.map-from-is_action_possible.patch

Marko Lindqvist, 02/24/2024 07:33 AM

View differences:

common/actions.c
context. This may or may not be legal depending on the action.
**************************************************************************/
static enum fc_tristate
is_action_possible(const action_id wanted_action,
is_action_possible(const struct civ_map *nmap,
const action_id wanted_action,
const struct req_context *actor,
const struct req_context *target,
const struct extra_type *target_extra,
......
enum fc_tristate out;
struct action *paction = action_by_number(wanted_action);
enum action_target_kind tkind = action_get_target_kind(paction);
struct civ_map *nmap = &(wld.map);
if (actor == NULL) {
actor = req_context_empty();
......
Passing NULL for actor or target is equivalent to passing an empty
context. This may or may not be legal depending on the action.
**************************************************************************/
static bool is_action_enabled(const action_id wanted_action,
static bool is_action_enabled(const struct civ_map *nmap,
const action_id wanted_action,
const struct req_context *actor,
const struct req_context *target,
const struct extra_type *target_extra,
......
{
enum fc_tristate possible;
possible = is_action_possible(wanted_action, actor, target, target_extra,
possible = is_action_possible(nmap, wanted_action, actor, target, target_extra,
TRUE, actor_home);
if (possible != TRI_YES) {
......
Returns TRUE if actor_unit can do wanted_action to target_city as far as
action enablers are concerned.
See note in is_action_enabled for why the action may still be disabled.
See note in is_action_enabled() for why the action may still be disabled.
**************************************************************************/
static bool
is_action_enabled_unit_on_city_full(const action_id wanted_action,
......
{
const struct impr_type *target_building;
const struct unit_type *target_utype;
const struct civ_map *nmap = &(wld.map);
if (actor_unit == NULL || target_city == NULL) {
/* Can't do an action when actor or target are missing. */
......
target_building = tgt_city_local_building(target_city);
target_utype = tgt_city_local_utype(target_city);
return is_action_enabled(wanted_action,
return is_action_enabled(nmap, wanted_action,
&(const struct req_context) {
.player = unit_owner(actor_unit),
.city = tile_city(actor_tile),
......
Returns TRUE if actor_unit can do wanted_action to target_city as far as
action enablers are concerned.
See note in is_action_enabled for why the action may still be disabled.
See note in is_action_enabled() for why the action may still be disabled.
**************************************************************************/
bool is_action_enabled_unit_on_city(const action_id wanted_action,
const struct unit *actor_unit,
......
Returns TRUE if actor_unit can do wanted_action to target_unit as far as
action enablers are concerned.
See note in is_action_enabled for why the action may still be disabled.
See note in is_action_enabled() for why the action may still be disabled.
**************************************************************************/
static bool
is_action_enabled_unit_on_unit_full(const action_id wanted_action,
......
const struct tile *actor_tile,
const struct unit *target_unit)
{
const struct civ_map *nmap = &(wld.map);
if (actor_unit == NULL || target_unit == NULL) {
/* Can't do an action when actor or target are missing. */
return FALSE;
......
return FALSE;
}
return is_action_enabled(wanted_action,
return is_action_enabled(nmap, wanted_action,
&(const struct req_context) {
.player = unit_owner(actor_unit),
.city = tile_city(actor_tile),
......
Returns TRUE if actor_unit can do wanted_action to target_unit as far as
action enablers are concerned.
See note in is_action_enabled for why the action may still be disabled.
See note in is_action_enabled() for why the action may still be disabled.
**************************************************************************/
bool is_action_enabled_unit_on_unit(const action_id wanted_action,
const struct unit *actor_unit,
......
Returns TRUE if actor_unit can do wanted_action to all units on the
target_tile as far as action enablers are concerned.
See note in is_action_enabled for why the action may still be disabled.
See note in is_action_enabled() for why the action may still be disabled.
**************************************************************************/
static bool
is_action_enabled_unit_on_units_full(const action_id wanted_action,
......
const struct tile *target_tile)
{
const struct req_context *actor_ctxt;
const struct civ_map *nmap = &(wld.map);
if (actor_unit == NULL || target_tile == NULL
|| unit_list_size(target_tile->units) == 0) {
......
};
unit_list_iterate(target_tile->units, target_unit) {
if (!is_action_enabled(wanted_action, actor_ctxt,
if (!is_action_enabled(nmap, wanted_action, actor_ctxt,
&(const struct req_context) {
.player = unit_owner(target_unit),
.city = tile_city(unit_tile(target_unit)),
......
Returns TRUE if actor_unit can do wanted_action to all units on the
target_tile as far as action enablers are concerned.
See note in is_action_enabled for why the action may still be disabled.
See note in is_action_enabled() for why the action may still be disabled.
**************************************************************************/
bool is_action_enabled_unit_on_units(const action_id wanted_action,
const struct unit *actor_unit,
......
Returns TRUE if actor_unit can do wanted_action to the target_tile as far
as action enablers are concerned.
See note in is_action_enabled for why the action may still be disabled.
See note in is_action_enabled() for why the action may still be disabled.
**************************************************************************/
static bool
is_action_enabled_unit_on_tile_full(const action_id wanted_action,
......
const struct tile *target_tile,
const struct extra_type *target_extra)
{
const struct civ_map *nmap = &(wld.map);
if (actor_unit == NULL || target_tile == NULL) {
/* Can't do an action when actor or target are missing. */
return FALSE;
......
return FALSE;
}
return is_action_enabled(wanted_action,
return is_action_enabled(nmap, wanted_action,
&(const struct req_context) {
.player = unit_owner(actor_unit),
.city = tile_city(actor_tile),
......
Returns TRUE if actor_unit can do wanted_action to the target_tile as far
as action enablers are concerned.
See note in is_action_enabled for why the action may still be disabled.
See note in is_action_enabled() for why the action may still be disabled.
**************************************************************************/
bool is_action_enabled_unit_on_tile(const action_id wanted_action,
const struct unit *actor_unit,
......
Returns TRUE if actor_unit can do wanted_action to the extras at
target_tile as far as action enablers are concerned.
See note in is_action_enabled for why the action may still be disabled.
See note in is_action_enabled() for why the action may still be disabled.
**************************************************************************/
static bool
is_action_enabled_unit_on_extras_full(const action_id wanted_action,
......
const struct tile *target_tile,
const struct extra_type *target_extra)
{
const struct civ_map *nmap = &(wld.map);
if (actor_unit == NULL || target_tile == NULL) {
/* Can't do an action when actor or target are missing. */
return FALSE;
......
return FALSE;
}
return is_action_enabled(wanted_action,
return is_action_enabled(nmap, wanted_action,
&(const struct req_context) {
.player = unit_owner(actor_unit),
.city = tile_city(actor_tile),
......
Returns TRUE if actor_unit can do wanted_action to the extras at
target_tile as far as action enablers are concerned.
See note in is_action_enabled for why the action may still be disabled.
See note in is_action_enabled() for why the action may still be disabled.
**************************************************************************/
bool is_action_enabled_unit_on_extras(const action_id wanted_action,
const struct unit *actor_unit,
......
const struct city *actor_home,
const struct tile *actor_tile)
{
const struct civ_map *nmap = &(wld.map);
if (actor_unit == NULL) {
/* Can't do an action when the actor is missing. */
return FALSE;
......
return FALSE;
}
return is_action_enabled(wanted_action,
return is_action_enabled(nmap, wanted_action,
&(const struct req_context) {
.player = unit_owner(actor_unit),
.city = tile_city(actor_tile),
......
target = req_context_empty();
}
known = is_action_possible(wanted_action, actor, target,
known = is_action_possible(nmap, wanted_action, actor, target,
target_extra,
FALSE, actor_home);
    (1-1/1)