While this framework doesn’t necessarily mandate a certain implementation pattern, it’s still written with a strong preconceived philosophy of how things (pure virtual functions) should be dealt with internally. That’s separately included inside a section labeled 'Recommended'.
From a high-level perspective,
IGenericAgentActivityWorker is a native-only interface embodying simple logic execution, termination, and result handling of individual agents in a world.
IGenericAgentActivityWorker can begin/end an
FAgentActivity, which represent a performable task only agents can perform.
The logic it executes compliments its relative responsibility down the world-crowd-agent chain by solely being focused on how each activity is actually performed, without being aware of any motive behind it.
IGenericCrowdActivityWorker listens to the result of each AgentActivity (and its new desired AgentActivityPriority), and uses that as guidance when deciding what AgentActivity an agent should perform next.
IGenericCrowdActivityWorker only receives a thin encapsulated summary of how an AgentActivity went, and never dwells in any agent activity implementation whatsoever.
IGenericAgentActivityWorker has its own Scoped/Persistent AgentActivityCognition tags, which are just GameplayTags mapped to the "AgentActivityCognition" base category.
ubyte.dev endorses creating GameplayConcepts extending AgentActivityCognition that:
Blueprints should never be able to add/remove unencapsulated Cognition tags. It's only permitted through blueprint-exposed concepts that extend Cognition (e.g. Strategy).