void
CampaignPlanStrategic::ScoreNeeds(Combatant* c)
{
    ListIter<CombatZone> zone = campaign->GetZones();
    while (++zone) {
        ZoneForce* force = zone->FindForce(c->GetIFF());

        // clear needs:
        force->SetNeed(CombatGroup::CARRIER_GROUP,      0);
        force->SetNeed(CombatGroup::BATTLE_GROUP,       0);
        force->SetNeed(CombatGroup::DESTROYER_SQUADRON, 0);
        force->SetNeed(CombatGroup::ATTACK_SQUADRON,    0);
        force->SetNeed(CombatGroup::FIGHTER_SQUADRON,   0);
        force->SetNeed(CombatGroup::INTERCEPT_SQUADRON,   0);

        // what defensive assets are needed in this zone?
        ListIter<CombatGroup> def = force->GetDefendList();
        while (++def) {
            int defender_type = *CombatGroup::PreferredDefender(def->Type());
            force->AddNeed(defender_type, def->Value());
        }

        // what offensive assets are needed in this zone?
        ListIter<CombatGroup> tgt = force->GetTargetList();
        while (++tgt) {
            int attacker_type = *CombatGroup::PreferredAttacker(tgt->Type());
            force->AddNeed(attacker_type, tgt->Value());
        }
    }
}