Feature #369 ยป 0039-Add-support-for-UnitFlag-requirements-on-Tile-Adjace.patch
| common/requirements.c | ||
|---|---|---|
|
&& req.range != REQ_RANGE_ALLIANCE
|
||
|
&& req.range != REQ_RANGE_WORLD);
|
||
|
break;
|
||
|
case VUT_UTFLAG:
|
||
|
case VUT_UCLASS:
|
||
|
case VUT_UCFLAG:
|
||
|
case VUT_MINVETERAN:
|
||
| ... | ... | |
|
invalid = (req.range != REQ_RANGE_LOCAL);
|
||
|
break;
|
||
|
case VUT_UTYPE:
|
||
|
case VUT_UTFLAG:
|
||
|
invalid = (req.range != REQ_RANGE_LOCAL
|
||
|
&& req.range != REQ_RANGE_TILE
|
||
|
&& req.range != REQ_RANGE_CADJACENT
|
||
| ... | ... | |
|
unitflag = req->source.value.unitflag;
|
||
|
if (req->range != REQ_RANGE_LOCAL) {
|
||
|
return TRI_NO;
|
||
|
}
|
||
|
if (!context->unittype) {
|
||
|
return TRI_MAYBE;
|
||
|
switch (req->range) {
|
||
|
case REQ_RANGE_LOCAL:
|
||
|
if (!context->unittype) {
|
||
|
return TRI_MAYBE;
|
||
|
}
|
||
|
return BOOL_TO_TRISTATE(utype_has_flag(context->unittype, unitflag));
|
||
|
case REQ_RANGE_TILE:
|
||
|
case REQ_RANGE_CADJACENT:
|
||
|
case REQ_RANGE_ADJACENT:
|
||
|
if (context->tile == nullptr) {
|
||
|
return TRI_MAYBE;
|
||
|
}
|
||
|
unit_list_iterate(context->tile->units, punit) {
|
||
|
if (unit_has_type_flag(punit, unitflag)) {
|
||
|
return TRI_YES;
|
||
|
}
|
||
|
} unit_list_iterate_end;
|
||
|
if (req->range == REQ_RANGE_TILE) {
|
||
|
return TRI_NO;
|
||
|
}
|
||
|
if (req->range == REQ_RANGE_CADJACENT) {
|
||
|
cardinal_adjc_iterate(nmap, context->tile, adjc_tile) {
|
||
|
unit_list_iterate(adjc_tile->units, punit) {
|
||
|
if (unit_has_type_flag(punit, unitflag)) {
|
||
|
return TRI_YES;
|
||
|
}
|
||
|
} unit_list_iterate_end;
|
||
|
} cardinal_adjc_iterate_end;
|
||
|
} else {
|
||
|
fc_assert(req->range == REQ_RANGE_ADJACENT);
|
||
|
adjc_iterate(nmap, context->tile, adjc_tile) {
|
||
|
unit_list_iterate(adjc_tile->units, punit) {
|
||
|
if (unit_has_type_flag(punit, unitflag)) {
|
||
|
return TRI_YES;
|
||
|
}
|
||
|
} unit_list_iterate_end;
|
||
|
} adjc_iterate_end;
|
||
|
}
|
||
|
return TRI_NO;
|
||
|
case REQ_RANGE_CITY:
|
||
|
case REQ_RANGE_TRADE_ROUTE:
|
||
|
case REQ_RANGE_CONTINENT:
|
||
|
case REQ_RANGE_PLAYER:
|
||
|
case REQ_RANGE_TEAM:
|
||
|
case REQ_RANGE_ALLIANCE:
|
||
|
case REQ_RANGE_WORLD:
|
||
|
case REQ_RANGE_COUNT:
|
||
|
fc_assert(FALSE);
|
||
|
break;
|
||
|
}
|
||
|
return BOOL_TO_TRISTATE(utype_has_flag(context->unittype, unitflag));
|
||
|
return TRI_NO;
|
||
|
}
|
||
|
/**********************************************************************//**
|
||
| doc/README.effects | ||
|---|---|---|
|
Terrain: Tile, Adjacent, CAdjacent, Traderoute, City
|
||
|
Good: City
|
||
|
UnitType: Local, Tile, CAdjacent, Adjacent
|
||
|
UnitFlag: Local
|
||
|
UnitFlag: Local, Tile, CAdjacent, Adjacent
|
||
|
UnitClass: Local
|
||
|
UnitClassFlag: Local
|
||
|
Nation: World, Alliance, Team, Player
|
||