Iterator Scope (NPC Cover System)

I would like to implement a cover system for NPCs.

I imagine it best to create a subclass of actor to represent the cover area, I’m unsure why I can’t derive from TargetPoint, it appears to be a pure blueprint thing, so say it’s derived from actor.

I would then need a behavior tree task I guess to set most suitable cover position and allow conditions to break cover. Maybe the breaking of cover would operate as a service?
The challenging part would be using an efficient mechanism to determine the most appropriate cover position.

I have seen that you can iterate over all actors in the world, but this would seem inefficient with many cover actors. I would want to declare some kind of local radius scope.

Another alternative would seem to be tracing for actors of my cover class, but I would rather avoid having to constantly tick a search.

Yet another alternative could be to have the cover actors add themselves to an array based on a large collision component which the NPC could check against based on position.

Can anyone more experienced provide any advice on how best to approach the problem?

I’m struggling with the problem conceptually which is not aided by having to think in terms of c++ functionality tied to task blueprints, along with behavior trees.

I think any support in developing a behavior like this would help me a lot in understanding the system better as a whole.