Add target acquisition in the sample

This commit is contained in:
Arnaud Jamin
2023-10-06 02:27:00 -04:00
parent 25f2e06400
commit 92396410d4
36 changed files with 1657 additions and 97 deletions
@@ -0,0 +1,70 @@
#include "CogSampleFunctionLibrary_Team.h"
#include "CogSampleTeamInterface.h"
//--------------------------------------------------------------------------------------------------------------------------
ECogSampleAllegiance UCogSampleFunctionLibrary_Team::GetTeamsAllegiance(int32 Team1, int32 Team2)
{
if (Team1 == 0 || Team2 == 0)
{
return ECogSampleAllegiance::Neutral;
}
if (Team1 == Team2)
{
return ECogSampleAllegiance::Friendly;
}
return ECogSampleAllegiance::Enemy;
}
//--------------------------------------------------------------------------------------------------------------------------
ECogSampleAllegiance UCogSampleFunctionLibrary_Team::GetActorsAllegiance(const AActor* Actor1, const AActor* Actor2)
{
const ICogSampleTeamInterface* TeamActor1 = Cast<ICogSampleTeamInterface>(Actor1);
const ICogSampleTeamInterface* TeamActor2 = Cast<ICogSampleTeamInterface>(Actor2);
if (TeamActor1 == nullptr || TeamActor2 == nullptr)
{
return ECogSampleAllegiance::Neutral;
}
const int32 Team1 = TeamActor1->GetTeam();
const int32 Team2 = TeamActor2->GetTeam();
const ECogSampleAllegiance Allegiance = GetTeamsAllegiance(Team1, Team2);
return Allegiance;
}
//--------------------------------------------------------------------------------------------------------------------------
bool UCogSampleFunctionLibrary_Team::MatchAllegiance(const AActor* Actor1, const AActor* Actor2, int32 AllegianceFilter)
{
const ECogSampleAllegiance Allegiance = GetActorsAllegiance(Actor1, Actor2);
const bool Result = MatchAllegianceFilter(Allegiance, AllegianceFilter);
return Result;
}
//--------------------------------------------------------------------------------------------------------------------------
bool UCogSampleFunctionLibrary_Team::MatchAllegianceFilter(ECogSampleAllegiance Allegiance, int32 AllegianceFilter)
{
const bool HasFriendly = (AllegianceFilter & (int)ECogSampleAllegianceFilter::Friendly) != 0;
const bool HasNeutral = (AllegianceFilter & (int)ECogSampleAllegianceFilter::Neutral) != 0;
const bool HasEnemy = (AllegianceFilter & (int)ECogSampleAllegianceFilter::Enemy) != 0;
if (Allegiance == ECogSampleAllegiance::Friendly && HasFriendly)
{
return true;
}
if (Allegiance == ECogSampleAllegiance::Neutral && HasNeutral)
{
return true;
}
if (Allegiance == ECogSampleAllegiance::Enemy && HasEnemy)
{
return true;
}
return false;
}