void UWorldComposition::EvaluateWorldOriginLocation(const FVector& ViewLocation) { UWorld* OwningWorld = GetWorld(); FVector Location = ViewLocation; if (!bRebaseOriginIn3DSpace) { // Consider only XY plane Location.Z = 0.f; } // Request to shift world in case current view is quite far from current origin if (Location.SizeSquared() > FMath::Square(RebaseOriginDistance)) { OwningWorld->RequestNewWorldOrigin(FIntVector(Location.X, Location.Y, Location.Z) + OwningWorld->OriginLocation); } }
void UCheatManager::SetWorldOrigin() { UWorld* World = GetWorld(); check(World); APlayerController* const MyPlayerController = GetOuterAPlayerController(); FVector ViewLocation; FRotator ViewRotation; MyPlayerController->GetPlayerViewPoint( ViewLocation, ViewRotation ); if( MyPlayerController->GetPawn() != NULL ) { ViewLocation = MyPlayerController->GetPawn()->GetActorLocation(); } // Consider only XY plane ViewLocation.Z = 0; FIntVector NewOrigin = FIntVector(ViewLocation.X, ViewLocation.Y, ViewLocation.Z) + World->OriginLocation; World->RequestNewWorldOrigin(NewOrigin); }