void UAvoidanceManager::UpdateRVO(int32 inAvoidanceUID, FVector inCenter, float inRadius, float inHeight, FVector inVelocity, float inWeight, int32 GroupMask, int32 AvoidMask, int32 IgnoreMask)
{
	FNavAvoidanceData NewAvoidanceData;
	NewAvoidanceData.Init(this, inCenter, inRadius, inHeight, inVelocity, inWeight, GroupMask, AvoidMask, IgnoreMask);

	UpdateRVO_Internal(inAvoidanceUID, NewAvoidanceData);
}
void UAvoidanceManager::UpdateRVO(UMovementComponent* MovementComp)
{
	if (IRVOAvoidanceInterface* AvoidingComp = Cast<IRVOAvoidanceInterface>(MovementComp))
	{
		FNavAvoidanceData NewAvoidanceData(this, AvoidingComp);
		UpdateRVO_Internal(AvoidingComp->GetRVOAvoidanceUID(), NewAvoidanceData);
	}
}
bool UAvoidanceManager::RegisterMovementComponent(UMovementComponent* MovementComp, float AvoidanceWeight)
{
	if (IRVOAvoidanceInterface* AvoidingComp = Cast<IRVOAvoidanceInterface>(MovementComp))
	{
		const int32 NewAvoidanceUID = GetNewAvoidanceUID();
		AvoidingComp->SetRVOAvoidanceUID(NewAvoidanceUID);
		AvoidingComp->SetRVOAvoidanceWeight(AvoidanceWeight);

		RequestUpdateTimer();

		FNavAvoidanceData AvoidanceData(this, AvoidingComp);
		UpdateRVO_Internal(AvoidingComp->GetRVOAvoidanceUID(), AvoidanceData);

		return true;
	}

	return false;
}