Example #1
0
// 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;
}
int BrigadeClass::ChooseTactic (void)
	{
	int			priority=0,tid;

	haveWeaps = -1;
	tid = GTACTIC_BRIG_SECURE;
	while (tid < FirstGroundTactic + GroundTactics && !priority)
		{
		priority = CheckTactic(tid);
		if (!priority)
			tid++;
		}

	// Make Adjustments due to tactic
	if (tid == GTACTIC_BRIG_WITHDRAW)
		{
		Objective	o;
		o = GetUnitObjective();
		if (!o || !o->IsSecondary())
			{
			// Find a retreat path
			o = FindRetreatPath(this,3,FIND_SECONDARYONLY);
			if (o)
				SetUnitOrders(GORD_RESERVE,o->Id());
			// KCK: This will cause the whole brigade to surrender if the first element get's 
			// cutoff and we're withdrawing. So I'm axing it. Instead, we'll just wait until
			// the element surrenders.
//			else
//				CheckForSurrender();
			SetOrdered(1);
			}
		}
	if (GetUnitTactic() != tid)
		SetOrdered(1);
	SetUnitTactic(tid);
#ifdef ROBIN_GDEBUG
	if (TrackingOn[GetCampID()])
		MonoPrint("Brigade %d (%s) chose tactic %s.\n",GetCampID(),OrderStr[GetUnitOrders()],TacticsTable[tid].name);
#endif
	return tid;
	}
// This only needs to be called at the start of the campaign (after objs loaded)
// or if any new objectives have been added
int RebuildObjectiveLists(void){
	Objective		o;
	
	POList->Purge();
	SOList->Purge();

	{
		// destroy iterator here
		VuListIterator	myit(AllObjList);
		o = GetFirstObjective(&myit);
		while (o != NULL){
			if (o->IsPrimary())
				POList->ForcedInsert(o);
			if (o->IsSecondary())
				SOList->ForcedInsert(o);
			o = GetNextObjective(&myit);
		}
	}
	CleanupObjList();
	return 1;
}
Example #4
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;
}