Are you fine with using C++?
If so, make a static function in the Perk class that takes a TSubclassOf<UPerk>
, as well as a target object (AActor*)
Then in the function, you get the DefaultObject of the Perk class, and you run the IsUsable function on it, pass the target actor as well, do the relevant calculations and return appropriately
This is how GAS checks for if abilities can activate