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; }
bool UAvoidanceManager::RegisterMovementComponent(UCharacterMovementComponent* MovementComp, float AvoidanceWeight) { if (MovementComp && MovementComp->GetCharacterOwner()) { if (UCapsuleComponent *OurCapsule = MovementComp->GetCharacterOwner()->CapsuleComponent.Get()) { const int32 NewAvoidanceUID = GetNewAvoidanceUID(); MovementComp->AvoidanceUID = NewAvoidanceUID; MovementComp->AvoidanceWeight = AvoidanceWeight; RequestUpdateTimer(); UpdateRVO(NewAvoidanceUID, MovementComp->GetActorFeetLocation(), OurCapsule->GetScaledCapsuleRadius(), OurCapsule->GetScaledCapsuleHalfHeight(), MovementComp->Velocity, AvoidanceWeight, MovementComp->AvoidanceGroup.Packed, MovementComp->GroupsToAvoid.Packed, MovementComp->GroupsToIgnore.Packed); return true; } } return false; }