Example #1
0
FExecStatus FCameraCommandHandler::SetCameraHorizontalFieldOfView(const TArray<FString>& Args)
{
    if (Args.Num() == 2)
    {
        int32 CameraId = FCString::Atoi(*Args[0]); // TODO: Add support for multiple cameras
        if (CameraId != 0)
        {
        	return FExecStatus::Error("Setting field of view is only supported for camera 0");
        }

        float FieldOfView = FCString::Atof(*Args[1]);

        bool bIsMatinee = false;

        for (AActor* Actor : this->GetWorld()->GetCurrentLevel()->Actors)
        {
            // if (Actor && Actor->IsA(AMatineeActor::StaticClass())) // AMatineeActor is deprecated
            bool FoundCamera = false;
            if (Actor && Actor->IsA(ACameraActor::StaticClass()))
            {
                bIsMatinee = true;
                UCameraComponent* CameraComponent = Actor->FindComponentByClass<UCameraComponent>();
                if (CameraComponent != nullptr) {
                    UE_LOG(LogUnrealCV, Warning, TEXT("Setting field of view to: %f"), FieldOfView);
                    CameraComponent->SetFieldOfView(FieldOfView);
                    FoundCamera = true;
                    APlayerCameraManager* CameraManager = UGameplayStatics::GetPlayerCameraManager(GetWorld(), 0);
                    CameraManager->SetFOV(FieldOfView);
                    break;
                }
            }
        }

        UGTCaptureComponent* CaptureComponent = FCaptureManager::Get().GetCamera(CameraId);
        if (CaptureComponent == nullptr)
        {
          return FExecStatus::Error(FString::Printf(TEXT("Camera %d can not be found."), CameraId));
        }
            UGTCaptureComponent* GTCapturer = FCaptureManager::Get().GetCamera(CameraId);
            if (GTCapturer == nullptr)
            {
                return FExecStatus::Error(FString::Printf(TEXT("Invalid camera id %d"), CameraId));
            }
            GTCapturer->SetFOVAngle(FieldOfView);

        return FExecStatus::OK();
    }
    return FExecStatus::Error("Number of arguments incorrect");
}