Space Plunder
Loading...
Searching...
No Matches
UAIBPLib Class Reference

#include <AIBPLib.h>

Inheritance diagram for UAIBPLib:

Static Public Member Functions

static EAISense GetSenseFromStimulus (const FAIStimulus &Stimulus)
 
static FString FactionToString (const EFactionType Faction)
 
static uint8 GetTeamIDFromFaction (const EFactionType Faction)
 
static EFactionType GetFactionFromTeamID (const uint8 TeamID)
 
static EAIActionType GetActionTypeFromTag (const FName &Tag)
 
static FName GetActionTagFromType (const EAIActionType ActionType)
 
static ERelationshipStatus GetRelationshipStatus (const float TrustLevel, const float HostilityLevel)
 
static UDataTable * LoadFactionDataTableFromGameState (const UObject *WorldContextObject)
 
static FFactionRelationshipTotal GetFactionRelationshipTotal (const UObject *WorldContextObject, const EFactionType Faction, bool &bSuccess, UDataTable *DataTable=nullptr)
 
static FFactionRelationship GetFactionRelationship (const UObject *WorldContextObject, const EFactionType Faction, const EFactionType TargetFaction, bool &bSuccess, UDataTable *DataTable=nullptr)
 
static bool GetIsFactionHostile (const UObject *WorldContextObject, const EFactionType Faction, const EFactionType TargetFaction, bool &bSuccess, UDataTable *DataTable=nullptr)
 
static ETeamAttitude::Type GetAttitudeToActor (const FGenericTeamId &OwnerID, const AActor *TargetActor, bool &bSuccess)
 
static ETeamAttitude::Type GetAttitudeToActor (const FGenericTeamId &OwnerID, const AActor *TargetActor)
 
static ETeamAttitude::Type GetAttitudeActorToActor (const AActor *OwnerActor, const AActor *TargetActor, bool &bSuccess)
 
static void ReportTouchEvent (AActor *InTouchReceiver, AActor *InOtherActor, const FVector &EventLocation)
 
static void ReportTeamEvent (AActor *InBroadcaster, AActor *InEnemy, const FVector &InLastKnowLocation, const float EventRange, const float PassedInfoAge, const float InStrength)
 

Member Function Documentation

◆ FactionToString()

FString UAIBPLib::FactionToString ( const EFactionType Faction)
static
62{
63 SCOPE_CYCLE_COUNTER(STATGROUP_AIToolKit_BPLib);
64 TRACE_CPUPROFILER_EVENT_SCOPE(UAIBPLib::FactionToString);
65 switch (Faction)
66 {
68 return FString("Default");
70 return FString("Alliance");
72 return FString("Militia");
74 return FString("Vipers");
76 return FString("Jackals");
78 return FString("TheBrotherhood");
80 return FString("Robots");
82 return FString("ChurchOfTheMachine");
84 return FString("Zombies");
85 default:
86 return FString("Default");
87 }
88}
static FString FactionToString(const EFactionType Faction)
Definition AIBPLib.cpp:61

◆ GetActionTagFromType()

FName UAIBPLib::GetActionTagFromType ( const EAIActionType ActionType)
static
217{
218 SCOPE_CYCLE_COUNTER(STATGROUP_AIToolKit_BPLib);
219 TRACE_CPUPROFILER_EVENT_SCOPE(UAIBPLib::GetActionTagFromType);
220 switch (ActionType)
221 {
223 return FName("Default");
225 return FName("Patrol");
227 return FName("PatrolTaken");
229 return FName("JoinGroup");
231 return FName("Attack");
233 return FName("Help");
235 return FName("Retreat");
237 return FName("Flank");
239 return FName("Search");
241 return FName("Investigate");
243 return FName("Alert");
245 return FName("Protect");
247 return FName("TargetLost");
249 return FName("TargetDown");
251 return FName("TargetFound");
252 break;
253 }
254 return FName("Default");
255}
static FName GetActionTagFromType(const EAIActionType ActionType)
Definition AIBPLib.cpp:216

◆ GetActionTypeFromTag()

EAIActionType UAIBPLib::GetActionTypeFromTag ( const FName & Tag)
static
150{
151 SCOPE_CYCLE_COUNTER(STATGROUP_AIToolKit_BPLib);
152 TRACE_CPUPROFILER_EVENT_SCOPE(UAIBPLib::GetActionTypeFromTag);
153 if(Tag == FName("Default"))
154 {
156 }
157 if(Tag == FName("Patrol"))
158 {
160 }
161 if(Tag == FName("PatrolTaken"))
162 {
164 }
165 if(Tag == FName("JoinGroup"))
166 {
168 }
169 if(Tag == FName("Attack"))
170 {
172 }
173 if(Tag == FName("Help"))
174 {
175 return EAIActionType::Help;
176 }
177 if(Tag == FName("Retreat"))
178 {
180 }
181 if(Tag == FName("Flank"))
182 {
184 }
185 if(Tag == FName("Search"))
186 {
188 }
189 if(Tag == FName("Investigate"))
190 {
192 }
193 if(Tag == FName("Alert"))
194 {
196 }
197 if(Tag == FName("Protect"))
198 {
200 }
201 if(Tag == FName("TargetLost"))
202 {
204 }
205 if(Tag == FName("TargetFound"))
206 {
208 }
209 if(Tag == FName("TargetDown"))
210 {
212 }
214}
static EAIActionType GetActionTypeFromTag(const FName &Tag)
Definition AIBPLib.cpp:149

◆ GetAttitudeActorToActor()

ETeamAttitude::Type UAIBPLib::GetAttitudeActorToActor ( const AActor * OwnerActor,
const AActor * TargetActor,
bool & bSuccess )
static

Get the Attitude of one actor to another, for Pawns with Controllers only

394{
395 SCOPE_CYCLE_COUNTER(STATGROUP_AIToolKit_BPLib);
396 TRACE_CPUPROFILER_EVENT_SCOPE(UAIBPLib::GetAttitudeActorToActor);
397 if(OwnerActor == nullptr){bSuccess = false; return ETeamAttitude::Neutral;}
398 const APawn* OwnerPawn = Cast<APawn>(OwnerActor);
399 if(OwnerPawn == nullptr || OwnerPawn->GetController() == nullptr){bSuccess = false; return ETeamAttitude::Neutral;}
400 const IGenericTeamAgentInterface* TeamAgentInterface = Cast<IGenericTeamAgentInterface>(OwnerPawn->GetController());
401 if(TeamAgentInterface == nullptr){bSuccess = false; return ETeamAttitude::Neutral;}
402 return GetAttitudeToActor(TeamAgentInterface->GetGenericTeamId(), TargetActor, bSuccess);
403}
static ETeamAttitude::Type GetAttitudeToActor(const FGenericTeamId &OwnerID, const AActor *TargetActor, bool &bSuccess)
Definition AIBPLib.cpp:369
static ETeamAttitude::Type GetAttitudeActorToActor(const AActor *OwnerActor, const AActor *TargetActor, bool &bSuccess)
Definition AIBPLib.cpp:393

◆ GetAttitudeToActor() [1/2]

ETeamAttitude::Type UAIBPLib::GetAttitudeToActor ( const FGenericTeamId & OwnerID,
const AActor * TargetActor )
static
382{
383 SCOPE_CYCLE_COUNTER(STATGROUP_AIToolKit_BPLib);
384 TRACE_CPUPROFILER_EVENT_SCOPE(UAIBPLib::GetAttitudeToActor);
385 if(TargetActor == nullptr){return ETeamAttitude::Neutral;}
386 const APawn* TargetPawn = Cast<APawn>(TargetActor);
387 if(TargetPawn == nullptr || TargetPawn->GetController() == nullptr){return ETeamAttitude::Neutral;}
388 const IGenericTeamAgentInterface* TeamAgentInterface = Cast<IGenericTeamAgentInterface>(TargetPawn->GetController());
389 if(TeamAgentInterface == nullptr){return ETeamAttitude::Neutral;}
390 return FGenericTeamId::GetAttitude(OwnerID, TeamAgentInterface->GetGenericTeamId());
391}

◆ GetAttitudeToActor() [2/2]

ETeamAttitude::Type UAIBPLib::GetAttitudeToActor ( const FGenericTeamId & OwnerID,
const AActor * TargetActor,
bool & bSuccess )
static

Get the Attitude of one actor to another, for Pawns with Controllers only

370{
371 SCOPE_CYCLE_COUNTER(STATGROUP_AIToolKit_BPLib);
372 TRACE_CPUPROFILER_EVENT_SCOPE(UAIBPLib::GetAttitudeToActor);
373 if(TargetActor == nullptr){bSuccess = false; return ETeamAttitude::Neutral;}
374 const APawn* TargetPawn = Cast<APawn>(TargetActor);
375 if(TargetPawn == nullptr || TargetPawn->GetController() == nullptr){bSuccess = false; return ETeamAttitude::Neutral;}
376 const IGenericTeamAgentInterface* TeamAgentInterface = Cast<IGenericTeamAgentInterface>(TargetPawn->GetController());
377 if(TeamAgentInterface == nullptr){bSuccess = false; return ETeamAttitude::Neutral;}
378 return FGenericTeamId::GetAttitude(OwnerID, TeamAgentInterface->GetGenericTeamId());
379}

◆ GetFactionFromTeamID()

EFactionType UAIBPLib::GetFactionFromTeamID ( const uint8 TeamID)
static
121{
122 SCOPE_CYCLE_COUNTER(STATGROUP_AIToolKit_BPLib);
123 TRACE_CPUPROFILER_EVENT_SCOPE(UAIBPLib::GetFactionFromTeamID);
124 switch (TeamID)
125 {
126 case 0:
128 case 200:
130 case 201:
132 case 202:
134 case 203:
136 case 204:
138 case 205:
140 case 206:
142 case 207:
144 default:
146 }
147}
static EFactionType GetFactionFromTeamID(const uint8 TeamID)
Definition AIBPLib.cpp:120

◆ GetFactionRelationship()

FFactionRelationship UAIBPLib::GetFactionRelationship ( const UObject * WorldContextObject,
const EFactionType Faction,
const EFactionType TargetFaction,
bool & bSuccess,
UDataTable * DataTable = nullptr )
static
341{
342 SCOPE_CYCLE_COUNTER(STATGROUP_AIToolKit_BPLib);
343 TRACE_CPUPROFILER_EVENT_SCOPE(UAIBPLib::GetFactionRelationship);
344 bSuccess = false;
345 const FFactionRelationshipTotal FactionRelationshipTotal = GetFactionRelationshipTotal(WorldContextObject, Faction, bSuccess, DataTable);
346 if(!bSuccess){UE_LOG(LogAIToolKit, Warning, TEXT("GetFactionRelationshipTotal in GetFactionRelationship"));return FFactionRelationship::Empty();}
347 for(const auto RelationShip : FactionRelationshipTotal.Relationships)
348 {
349 if(RelationShip.OtherFaction == TargetFaction)
350 {
351 return RelationShip;
352 }
353 }
354 UE_LOG(LogAIToolKit, Warning, TEXT("GetFactionRelationshipTotal in GetFactionRelationship"));
356}
static FFactionRelationshipTotal GetFactionRelationshipTotal(const UObject *WorldContextObject, const EFactionType Faction, bool &bSuccess, UDataTable *DataTable=nullptr)
Definition AIBPLib.cpp:317
static FFactionRelationship GetFactionRelationship(const UObject *WorldContextObject, const EFactionType Faction, const EFactionType TargetFaction, bool &bSuccess, UDataTable *DataTable=nullptr)
Definition AIBPLib.cpp:339
static FFactionRelationship Empty()
Definition AIDataTypes.h:350
Definition AIDataTypes.h:604

◆ GetFactionRelationshipTotal()

FFactionRelationshipTotal UAIBPLib::GetFactionRelationshipTotal ( const UObject * WorldContextObject,
const EFactionType Faction,
bool & bSuccess,
UDataTable * DataTable = nullptr )
static
319{
320 SCOPE_CYCLE_COUNTER(STATGROUP_AIToolKit_BPLib);
321 TRACE_CPUPROFILER_EVENT_SCOPE(UAIBPLib::GetFactionRelationshipTotal);
322 bSuccess = false;
323 if(!IsValid(DataTable))
324 {
325 UE_LOG(LogAIToolKit, Log, TEXT("Loading GameState Faction DataTable"));
326 DataTable = LoadFactionDataTableFromGameState(WorldContextObject);
327 if(!IsValid(DataTable))
328 {
330 }
331 }
332 const FString FactionName = FactionToString(Faction);
333 FFactionRelationshipTotal* FactionRelationshipTotalPtr = DataTable->FindRow<FFactionRelationshipTotal>(FName(FactionName), "");
334 if(FactionRelationshipTotalPtr == nullptr){UE_LOG(LogAIToolKit,Warning,TEXT("FactionRelationshipTotalPtr pointer null -GetFactionRelationshipTotal")); return FFactionRelationshipTotal::Empty();}
335 bSuccess = true;
336 return *FactionRelationshipTotalPtr;
337}
static UDataTable * LoadFactionDataTableFromGameState(const UObject *WorldContextObject)
Definition AIBPLib.cpp:308
static FFactionRelationshipTotal Empty()
Definition AIDataTypes.h:612

◆ GetIsFactionHostile()

bool UAIBPLib::GetIsFactionHostile ( const UObject * WorldContextObject,
const EFactionType Faction,
const EFactionType TargetFaction,
bool & bSuccess,
UDataTable * DataTable = nullptr )
static
360{
361 SCOPE_CYCLE_COUNTER(STATGROUP_AIToolKit_BPLib);
362 TRACE_CPUPROFILER_EVENT_SCOPE(UAIBPLib::GetIsFactionHostile);
363 bSuccess = false;
364 const FFactionRelationship FactionRelationship = GetFactionRelationship(WorldContextObject, Faction, TargetFaction, bSuccess, DataTable);
365 if(!bSuccess){UE_LOG(LogAIToolKit, Warning, TEXT("GetFactionRelationship in GetIsFactionHostile"));return false;}
366 return FactionRelationship.IsHostile();
367}
static bool GetIsFactionHostile(const UObject *WorldContextObject, const EFactionType Faction, const EFactionType TargetFaction, bool &bSuccess, UDataTable *DataTable=nullptr)
Definition AIBPLib.cpp:358
Definition AIDataTypes.h:279
bool IsHostile() const
Definition AIDataTypes.h:341

◆ GetRelationshipStatus()

ERelationshipStatus UAIBPLib::GetRelationshipStatus ( const float TrustLevel,
const float HostilityLevel )
static
258{
259 SCOPE_CYCLE_COUNTER(STATGROUP_AIToolKit_BPLib);
260 TRACE_CPUPROFILER_EVENT_SCOPE(UAIBPLib::GetRelationshipStatus);
261 return GetRelationship(TrustLevel, HostilityLevel);
262 // //- Hostility is higher or equal than 200.0f OR if Trust is below or equal -100.f //
263 // if(HostilityLevel >= AIRelationShipVars::HostilityLevelEnemy || TrustLevel <= AIRelationShipVars::TrustLevelEnemy)
264 // {
265 // return ERelationshipStatus::Enemy;
266 // }
267 // //- Hostility is higher or equal than 100.0f OR if Trust is below or equal -40.f //
268 // if(HostilityLevel >= AIRelationShipVars::HostilityLevelHostile || TrustLevel <= AIRelationShipVars::TrustLevelHostile)
269 // {
270 // return ERelationshipStatus::Hostile;
271 // }
272 //
273 // //- If they have MAX Trust, & No Hostility //
274 // if(TrustLevel >= AIRelationShipVars::TrustLevelFriendly && HostilityLevel == AIRelationShipVars::HostilityLevelFriendly)
275 // {
276 // return ERelationshipStatus::Friendly;
277 // }
278 // //- If above 40 Trust, & No Hostility //
279 // if(TrustLevel >= AIRelationShipVars::TrustLevelAllied && HostilityLevel == AIRelationShipVars::HostilityLevelAllied)
280 // {
281 // return ERelationshipStatus::Allied;
282 // }
283 // //- If Trust is above or equal 0 & Hostility is Lower or equal than 20 //
284 // if(TrustLevel >= AIRelationShipVars::TrustLevelNeutral && HostilityLevel <= AIRelationShipVars::HostilityLevelNeutral)
285 // {
286 // return ERelationshipStatus::Neutral;
287 // }
288 // //- Should cover everything else? //
289 // //- If Trust is above Hostile (-40.f) & Hostility is Lower than Hostile (100.0f) //
290 // if(TrustLevel >= AIRelationShipVars::TrustLevelHostile && HostilityLevel <= AIRelationShipVars::HostilityLevelHostile)
291 // {
292 // return ERelationshipStatus::UnFriendly;
293 // }
294 // return ERelationshipStatus::Default;
295 // // //- if Trust is above -40 & Hostility is higher than 100.0f //
296 // // if(TrustLevel >= AIRelationShipVars::TrustLevelHostile && HostilityLevel >= AIRelationShipVars::HostilityLevelHostile)
297 // // {
298 // // return ERelationshipStatus::Hostile;
299 // // }
300 // // //- if Trust is above -100.0f & Hostility is Higher than 200.0f //
301 // // if(TrustLevel >= AIRelationShipVars::TrustLevelEnemy && HostilityLevel >= AIRelationShipVars::HostilityLevelEnemy)
302 // // {
303 // // return ERelationshipStatus::Enemy;
304 // // }
305 // // Handle any other case, possibly setting to Default or another status
306}
static ERelationshipStatus GetRelationship(const float TrustLevel, const float HostilityLevel)
Definition AIDataTypes.h:169
static ERelationshipStatus GetRelationshipStatus(const float TrustLevel, const float HostilityLevel)
Definition AIBPLib.cpp:257

◆ GetSenseFromStimulus()

EAISense UAIBPLib::GetSenseFromStimulus ( const FAIStimulus & Stimulus)
static
22{
23 SCOPE_CYCLE_COUNTER(STATGROUP_AIToolKit_BPLib);
24 TRACE_CPUPROFILER_EVENT_SCOPE(UAIBPLib::GetSenseFromStimulus);
25
26 if(Stimulus.Type.Name == FName("Default__AISense_Sight"))
27 {
28 return EAISense::Sight;
29 }
30 if(Stimulus.Type.Name == FName("Default__AISense_Hearing"))
31 {
32 return EAISense::Hearing;
33 }
34 if(Stimulus.Type.Name == FName("Default__AISense_Damage"))
35 {
36 return EAISense::Damage;
37 }
38 if(Stimulus.Type.Name == FName("Default__AISense_Team"))
39 {
40 return EAISense::Team;
41 }
42 if(Stimulus.Type.Name == FName("Default__AISense_Prediction"))
43 {
45 }
46 if(Stimulus.Type.Name == FName("Default__AISense_Touch"))
47 {
48 return EAISense::Touch;
49 }
50 if(Stimulus.Type.Name == FName("Default__AISense_Actions"))
51 {
52 return EAISense::Action;
53 }
54 if(Stimulus.Type.Name == FName("Default__AISense_Custom"))
55 {
56 return EAISense::Custom;
57 }
58 return EAISense::Sight;
59}
static EAISense GetSenseFromStimulus(const FAIStimulus &Stimulus)
Definition AIBPLib.cpp:21

◆ GetTeamIDFromFaction()

uint8 UAIBPLib::GetTeamIDFromFaction ( const EFactionType Faction)
static
92{
93 SCOPE_CYCLE_COUNTER(STATGROUP_AIToolKit_BPLib);
94 TRACE_CPUPROFILER_EVENT_SCOPE(UAIBPLib::GetTeamIDFromFaction);
95 switch (Faction)
96 {
98 return 0;
100 return 200;
102 return 201;
104 return 202;
106 return 203;
108 return 204;
110 return 205;
112 return 206;
114 return 207;
115 default:
116 return 0;
117 }
118}
static uint8 GetTeamIDFromFaction(const EFactionType Faction)
Definition AIBPLib.cpp:91

◆ LoadFactionDataTableFromGameState()

UDataTable * UAIBPLib::LoadFactionDataTableFromGameState ( const UObject * WorldContextObject)
static
309{
310 SCOPE_CYCLE_COUNTER(STATGROUP_AIToolKit_BPLib);
311 TRACE_CPUPROFILER_EVENT_SCOPE(UAIBPLib::LoadFactionDataTableFromGameState);
312 IAIData* AIGameState = Cast<IAIData>(UGameplayStatics::GetGameState(WorldContextObject));
313 if(AIGameState == nullptr){UE_LOG(LogAIToolKit, Warning, TEXT("AI Faction DataTable Failed in - LoadFromGameState UAIBPLib"));return nullptr;}
314 return AIGameState->GetFactionRelationshipDataTable();
315}
Definition AIData.h:21
virtual UDataTable * GetFactionRelationshipDataTable()=0

◆ ReportTeamEvent()

void UAIBPLib::ReportTeamEvent ( AActor * InBroadcaster,
AActor * InEnemy,
const FVector & InLastKnowLocation,
const float EventRange,
const float PassedInfoAge,
const float InStrength )
static
422{
423 SCOPE_CYCLE_COUNTER(STATGROUP_AIToolKit_BPLib);
424 TRACE_CPUPROFILER_EVENT_SCOPE(UAIBPLib::ReportTeamEvent);
425 if (InBroadcaster)
426 {
427 UAIPerceptionSystem* PerceptionSystem = UAIPerceptionSystem::GetCurrent(InBroadcaster);
428 if (PerceptionSystem)
429 {
430 const FAITeamStimulusEvent Event = FAITeamStimulusEvent(InBroadcaster, InEnemy, InLastKnowLocation, EventRange, PassedInfoAge, InStrength);
431 PerceptionSystem->OnEvent(Event);
432 }
433 }
434}
static void ReportTeamEvent(AActor *InBroadcaster, AActor *InEnemy, const FVector &InLastKnowLocation, const float EventRange, const float PassedInfoAge, const float InStrength)
Definition AIBPLib.cpp:420

◆ ReportTouchEvent()

void UAIBPLib::ReportTouchEvent ( AActor * InTouchReceiver,
AActor * InOtherActor,
const FVector & EventLocation )
static
407{
408 SCOPE_CYCLE_COUNTER(STATGROUP_AIToolKit_BPLib);
409 TRACE_CPUPROFILER_EVENT_SCOPE(UAIBPLib::ReportTouchEvent);
410 if(InTouchReceiver == nullptr || InOtherActor == nullptr){return;}
411
412 UAIPerceptionSystem* PerceptionSystem = UAIPerceptionSystem::GetCurrent(InTouchReceiver);
413 if (PerceptionSystem)
414 {
415 const FAITouchEvent Event = FAITouchEvent(InTouchReceiver, InOtherActor, EventLocation);
416 PerceptionSystem->OnEvent(Event);
417 }
418}
static void ReportTouchEvent(AActor *InTouchReceiver, AActor *InOtherActor, const FVector &EventLocation)
Definition AIBPLib.cpp:406

The documentation for this class was generated from the following files: