// see ModEnc: NavalTargeting

int TechnoClass::SelectNavalTargetingAgainstTarget(TechnoClass *target) {
  isUnderwater  = target->GetType()->Underwater;
  isOrganic     = target->GetType()->Organic;
  isUnnatural   = target->GetType()->Unnatural;
  isHover       = target->GetType()->SpeedType == HOVER;

  switch (target->GetType()->NavalTargeting) {
    case UNDERWATER_NEVER:
      if(isUnderwater || target->Cloaked)
        return USE_NOTHING;
      return USE_PRIMARY;

    case UNDERWATER_SECONDARY:
      if(isUnderwater)
        return USE_SECONDARY;
      return USE_PRIMARY;

    case UNDERWATER_ONLY:
      if(isUnderwater)
        return USE_PRIMARY;
      return USE_NOTHING;

    case ORGANIC_SECONDARY:
      if(isOrganic || isUnnatural)
        return USE_SECONDARY;
      return USE_PRIMARY;

    case SEAL_SPECIAL:
      if(isHover || isOrganic)
        return USE_PRIMARY;
      return USE_SECONDARY;

    case NAVAL_ALL:
      return USE_PRIMARY;

    case NAVAL_NONE:
      return USE_NOTHING;

    case NAVAL_PRIMARY:      
      return USE_PRIMARY;

    default:
      return USE_PRIMARY;
  }
}