Feature #401 ยป 0053-Add-support-for-UnitClassFlag-requirements-on-Tile-A.patch
common/requirements.c | ||
---|---|---|
if (invalid) {
|
||
error = "bad type or name";
|
||
} else {
|
||
/* Scan the range string to find the range. If no range is given a
|
||
/* Scan the range string to find the range. If no range is given a
|
||
* default fallback is used rather than giving an error. */
|
||
if (range != NULL) {
|
||
req.range = req_range_by_name(range, fc_strcasecmp);
|
||
... | ... | |
&& req.range != REQ_RANGE_ALLIANCE
|
||
&& req.range != REQ_RANGE_WORLD);
|
||
break;
|
||
case VUT_UCFLAG:
|
||
case VUT_MINVETERAN:
|
||
case VUT_UNITSTATE:
|
||
case VUT_ACTIVITY:
|
||
... | ... | |
case VUT_UTYPE:
|
||
case VUT_UTFLAG:
|
||
case VUT_UCLASS:
|
||
case VUT_UCFLAG:
|
||
invalid = (req.range != REQ_RANGE_LOCAL
|
||
&& req.range != REQ_RANGE_TILE
|
||
&& req.range != REQ_RANGE_CADJACENT
|
||
... | ... | |
ucflag = req->source.value.unitclassflag;
|
||
if (req->range != REQ_RANGE_LOCAL) {
|
||
switch (req->range) {
|
||
case REQ_RANGE_LOCAL:
|
||
if (!context->unittype) {
|
||
return TRI_MAYBE;
|
||
}
|
||
return BOOL_TO_TRISTATE(uclass_has_flag(utype_class(context->unittype), ucflag));
|
||
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_class_flag(punit, ucflag)) {
|
||
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_class_flag(punit, ucflag)) {
|
||
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_class_flag(punit, ucflag)) {
|
||
return TRI_YES;
|
||
}
|
||
} unit_list_iterate_end;
|
||
} adjc_iterate_end;
|
||
}
|
||
return TRI_NO;
|
||
}
|
||
if (!context->unittype) {
|
||
return TRI_MAYBE;
|
||
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(uclass_has_flag(utype_class(context->unittype), ucflag));
|
||
return TRI_NO;
|
||
}
|
||
/**********************************************************************//**
|
doc/README.effects | ||
---|---|---|
UnitType: Local, Tile, CAdjacent, Adjacent
|
||
UnitFlag: Local, Tile, CAdjacent, Adjacent
|
||
UnitClass: Local, Tile, CAdjacent, Adjacent
|
||
UnitClassFlag: Local
|
||
UnitClassFlag: Local, Tile, CAdjacent, Adjacent
|
||
Nation: World, Alliance, Team, Player
|
||
NationGroup: World, Alliance, Team, Player
|
||
Nationality: Traderoute, City
|