Relevant code if anyone is interested. Compiles on 4.19.2 and seems to be working.
bool UYourFunctionLibrary::SetSightRange(AAIController* Controller, float NewSightRange)
{
if (Controller == nullptr)
{
UE_LOG(LogTemp, Error, TEXT("Controller == nullptr"));
return false;
}
FAISenseID Id = UAISense::GetSenseID(UAISense_Sight::StaticClass());
if (!Id.IsValid())
{
UE_LOG(LogTemp, Error, TEXT("Wrong Sense ID"));
return false;
}
auto Perception = Controller->GetAIPerceptionComponent();
if (Perception == nullptr)
{
UE_LOG(LogTemp, Error, TEXT("Perception == nullptr"));
return false;
}
auto Config = Perception->GetSenseConfig(Id);
if (Config == nullptr)
{
UE_LOG(LogTemp, Error, TEXT("Config == nullptr"));
return false;
}
auto ConfigSight = Cast<UAISenseConfig_Sight>(Config);
// Save original lose range
float LoseRange = ConfigSight->LoseSightRadius - ConfigSight->SightRadius;
ConfigSight->SightRadius = NewSightRange;
// Apply lose range to new radius of the sight
ConfigSight->LoseSightRadius = ConfigSight->SightRadius + LoseRange;
Perception->RequestStimuliListenerUpdate();
return true;
}