// Determine if this objective can accept the passed orders int GroundTaskingManagerClass::IsValidObjective (int orders, Objective o) { if (!o) return 0; switch (orders) { case GORD_CAPTURE: if (o->IsSecondary() && o->IsNearfront() && GetRoE(owner,o->GetTeam(),ROE_GROUND_CAPTURE) == ROE_ALLOWED) return 1; break; case GORD_SECURE: if (o->IsSecondary() && owner == o->GetTeam() && (o->IsFrontline() || o->IsSecondline())) return 1; break; case GORD_ASSAULT: if (o->IsSecondary() && !o->IsNearfront() && o->IsBeach() && GetRoE(owner,o->GetTeam(),ROE_GROUND_CAPTURE) == ROE_ALLOWED) return 1; break; case GORD_AIRBORNE: if (o->IsSecondary() && !o->IsNearfront() && GetRoE(owner,o->GetTeam(),ROE_GROUND_CAPTURE) == ROE_ALLOWED) // && !defended) return 1; break; case GORD_COMMANDO: if (o->CommandoSite() && GetRoE(owner,o->GetTeam(),ROE_GROUND_CAPTURE) == ROE_ALLOWED) return 1; break; case GORD_DEFEND: if (o->IsSecondary() && o->IsNearfront() && owner == o->GetTeam() && !o->Abandoned()) return 1; break; case GORD_SUPPORT: if (owner == o->GetTeam() && o->ArtillerySite()) return 1; break; case GORD_REPAIR: if (owner == o->GetTeam() && o->NeedRepair() && o->GetObjectiveStatus() < 51) return 1; break; case GORD_AIRDEFENSE: if (owner == o->GetTeam() && o->SamSite()) return 1; break; case GORD_RECON: return 0; break; case GORD_RADAR: if (owner == o->GetTeam() && o->RadarSite()) return 1; break; case GORD_RESERVE: default: if (o->IsSecondary() && owner == o->GetTeam() && !o->IsNearfront()) return 1; break; } return 0; }
// KCK: This is an admittidly hackish way of determining which lists to add the objective to, // but it's either this or call IsValidObjective() for each order type which would require many // more checks.. HOWEVER, we need to keep this and IsValidObjective() in sync (they must agree) int GroundTaskingManagerClass::GetAddBits (Objective o, int to_collect) { int add_now = to_collect; if (!o) return 0; if (!o->IsSecondary()) add_now &= ~(COLLECT_RESERVE | COLLECT_CAPTURE | COLLECT_SECURE | COLLECT_ASSAULT | COLLECT_AIRBORNE | COLLECT_DEFEND); if (o->IsNearfront()) add_now &= ~(COLLECT_RESERVE | COLLECT_ASSAULT | COLLECT_AIRBORNE); else add_now &= ~(COLLECT_CAPTURE | COLLECT_DEFEND); if (owner != o->GetTeam()) add_now &= ~(COLLECT_RESERVE | COLLECT_SECURE | COLLECT_DEFEND | COLLECT_SUPPORT | COLLECT_REPAIR | COLLECT_AIRDEFENSE | COLLECT_RADAR); if (GetRoE(owner,o->GetTeam(),ROE_GROUND_CAPTURE) != ROE_ALLOWED) add_now &= ~(COLLECT_CAPTURE | COLLECT_ASSAULT | COLLECT_AIRBORNE | COLLECT_COMMANDO); if (o->Abandoned()) add_now &= ~COLLECT_DEFEND; if (!o->IsFrontline() && !o->IsSecondline()) add_now &= ~(COLLECT_SECURE); if (!o->IsBeach()) add_now &= ~(COLLECT_ASSAULT); if (1) // defended add_now &= ~(COLLECT_AIRBORNE); if (!o->CommandoSite()) add_now &= ~(COLLECT_COMMANDO); if (!o->ArtillerySite()) add_now &= ~(COLLECT_SUPPORT); if (!o->NeedRepair() || o->GetObjectiveStatus() > 50) add_now &= ~(COLLECT_REPAIR); if (!o->SamSite()) add_now &= ~(COLLECT_AIRDEFENSE); if (!o->RadarSite()) add_now &= ~(COLLECT_RADAR); return add_now; }