diff --git a/Source/MoCapPlugin/Private/MCController.cpp b/Source/MoCapPlugin/Private/MCController.cpp index ce9652f59ffc14050452c20e17586e577c14ee4d..140e32289f9f21d101b28e883a3999400279e544 100644 --- a/Source/MoCapPlugin/Private/MCController.cpp +++ b/Source/MoCapPlugin/Private/MCController.cpp @@ -55,7 +55,7 @@ void AMCController::BeginPlay() { USteamVRInputDeviceFunctionLibrary::SetCurlsAndSplaysState(true, true); } - if (!UHeadMountedDisplayFunctionLibrary::IsHeadMountedDisplayEnabled()) { + if (SpectatorCam && !UHeadMountedDisplayFunctionLibrary::IsHeadMountedDisplayEnabled()) { Pawn->VRCamera->SetWorldLocation(SpectatorCam->GetActorLocation()); Pawn->VRCamera->SetWorldRotation(SpectatorCam->GetActorRotation()); } @@ -153,8 +153,10 @@ void AMCController::SaveToAnimMode() { //AnimSaveState.Pawn->Destroy(); AnimSaveState = FAnimSaveState(); - InstructionWidget->FeedbackText->SetText(FText::FromString("Saved!")); - InstructionWidget->WidgetSwitcher->SetActiveWidgetIndex(InstructionWidget->StartIndex); + if (InstructionWidget) { + InstructionWidget->FeedbackText->SetText(FText::FromString("Saved!")); + InstructionWidget->WidgetSwitcher->SetActiveWidgetIndex(InstructionWidget->StartIndex); + } if (GEngine) { GEngine->AddOnScreenDebugMessage(-1, 15.0f, FColor::Green, FString::Printf(TEXT("Animation Saved!"))); } @@ -626,7 +628,7 @@ bool AMCController::PreprocessRecording() { int amount = 0; int start = 0; - for (int i = 0; i < AnimSaveState.AnimData.Num() && LockFeet; i++) { + for (int i = 0; i < AnimSaveState.AnimData.Num() && LockFeet && LeftFootPlane && RightFootPlane; i++) { FProcessedAnimData& AnimData = AnimSaveState.AnimData[i]; @@ -720,7 +722,9 @@ void AMCController::InputNextFrame() { AI->SnapshotAnimations.Last().StartTime = Entry.Timestamp; AnimSaveState.CurrentMarker++; - FeedbackWidget->RecordingStateText->SetText(FText::FromString("Converting Anim " + FString::FromInt(AnimSaveState.CurrentMarker) + "...")); + if (FeedbackWidget) { + FeedbackWidget->RecordingStateText->SetText(FText::FromString("Converting Anim " + FString::FromInt(AnimSaveState.CurrentMarker) + "...")); + } } else { // if (Type == "End") AnimSaveState.CurrentEntryIndex++; @@ -744,8 +748,9 @@ void AMCController::InputNextFrame() { AnimSaveState.WaitForAnimInstance = true; } - FeedbackWidget->ProgBar->SetPercent((float)AnimSaveState.CurrentEntryIndex / (float)AnimSaveState.AnimData.Num()); - + if (FeedbackWidget) { + FeedbackWidget->ProgBar->SetPercent((float)AnimSaveState.CurrentEntryIndex / (float)AnimSaveState.AnimData.Num()); + } } @@ -756,8 +761,9 @@ void AMCController::InputNextFrame() { void AMCController::SaveAnimSnapshots() { - FeedbackWidget->RecordingStateText->SetText(FText::FromString("Saving anim data to asset files...")); - + if (FeedbackWidget) { + FeedbackWidget->RecordingStateText->SetText(FText::FromString("Saving anim data to asset files...")); + } const TArray<FSnapshotAnimations>& Anims = AnimSaveState.Pawn->GetAnimInstance()->SnapshotAnimations; FString FolderName; @@ -792,8 +798,10 @@ void AMCController::SaveAnimSnapshots() { AnimSaveState.AnimSequences.Add(AnimSequence); } - FeedbackWidget->RecordingStateText->SetText(FText::FromString("Done!")); - FeedbackWidget->ProgBar->SetPercent(1); + if (FeedbackWidget) { + FeedbackWidget->RecordingStateText->SetText(FText::FromString("Done!")); + FeedbackWidget->ProgBar->SetPercent(1); + } } @@ -1087,7 +1095,7 @@ void AMCController::ToggleRecording() { LogHandler.NewLog("DataLog" + FString::FromInt(CurRecordingInSession)); LogHandler.StartRecording(); Pawn->CalcSensorOffsets(LogHandler, UseLastOffsets, DebugMode); - if (DebugMode) { + if (DebugMode || KeepPawnVisible) { Pawn->SetMeshVisibility(true); } else { @@ -1096,12 +1104,16 @@ void AMCController::ToggleRecording() { AnimSaveState.CurrentMarker = 0; - InstructionWidget->WidgetSwitcher->SetActiveWidgetIndex(InstructionWidget->RecordIndex); - FeedbackWidget->RecordingStateText->SetText(FText::FromString("Press 'SetMarker' to begin!")); - FeedbackWidget->RecordingStateText->SetColorAndOpacity(FSlateColor(FLinearColor::White)); - FeedbackWidget->SensorBox->SetVisibility(ESlateVisibility::Visible); - FeedbackWidget->AnimNameText->SetText(FText::FromString(NameOfRecording)); - FeedbackWidget->ProgBar->SetVisibility(ESlateVisibility::Hidden); + if (InstructionWidget) { + InstructionWidget->WidgetSwitcher->SetActiveWidgetIndex(InstructionWidget->RecordIndex); + } + if (FeedbackWidget) { + FeedbackWidget->RecordingStateText->SetText(FText::FromString("Press 'SetMarker' to begin!")); + FeedbackWidget->RecordingStateText->SetColorAndOpacity(FSlateColor(FLinearColor::White)); + FeedbackWidget->SensorBox->SetVisibility(ESlateVisibility::Visible); + FeedbackWidget->AnimNameText->SetText(FText::FromString(NameOfRecording)); + FeedbackWidget->ProgBar->SetVisibility(ESlateVisibility::Hidden); + } } else { if (!KeepPawnInvisible) { @@ -1113,19 +1125,25 @@ void AMCController::ToggleRecording() { LogHandler.CopyLogToRecordings(NameOfRecording); if (OldName != NameOfRecording) { - InstructionWidget->FeedbackText->SetText(FText::FromString("Recording Done!\nNameOfRecording changed to " + NameOfRecording)); + if (InstructionWidget) { + InstructionWidget->FeedbackText->SetText(FText::FromString("Recording Done!\nNameOfRecording changed to " + NameOfRecording)); + } if (OutputMsgOnScreen) { GEngine->AddOnScreenDebugMessage(-1, 30.0f, FColor::Yellow, FString::Printf(TEXT("NameOfRecording changed to %s. If you want to use this recording in future play sessions, please update the property on MCController."), *NameOfRecording)); } } - InstructionWidget->FeedbackText->SetText(FText::FromString("Recording Done!")); - InstructionWidget->WidgetSwitcher->SetActiveWidgetIndex(InstructionWidget->StartIndex); - FeedbackWidget->RecordingStateText->SetText(FText::FromString("")); - FeedbackWidget->SensorBox->SetVisibility(ESlateVisibility::Hidden); - FeedbackWidget->LeftFingerText->SetText(FText::FromString("")); - FeedbackWidget->RightFingerText->SetText(FText::FromString("")); - FeedbackWidget->AnimNameText->SetText(FText::FromString("")); + if (InstructionWidget) { + InstructionWidget->FeedbackText->SetText(FText::FromString("Recording Done!")); + InstructionWidget->WidgetSwitcher->SetActiveWidgetIndex(InstructionWidget->StartIndex); + } + if (FeedbackWidget) { + FeedbackWidget->RecordingStateText->SetText(FText::FromString("")); + FeedbackWidget->SensorBox->SetVisibility(ESlateVisibility::Hidden); + FeedbackWidget->LeftFingerText->SetText(FText::FromString("")); + FeedbackWidget->RightFingerText->SetText(FText::FromString("")); + FeedbackWidget->AnimNameText->SetText(FText::FromString("")); + } CurRecordingInSession++; } @@ -1144,8 +1162,10 @@ void AMCController::SetMarker() { if (IsRecording) { AnimSaveState.CurrentMarker++; LogHandler.SetMarker(); - FeedbackWidget->RecordingStateText->SetText(FText::FromString("Recording Anim " + FString::FromInt(AnimSaveState.CurrentMarker))); - FeedbackWidget->RecordingStateText->SetColorAndOpacity(FSlateColor(FLinearColor::Yellow)); + if (FeedbackWidget) { + FeedbackWidget->RecordingStateText->SetText(FText::FromString("Recording Anim " + FString::FromInt(AnimSaveState.CurrentMarker))); + FeedbackWidget->RecordingStateText->SetColorAndOpacity(FSlateColor(FLinearColor::Yellow)); + } } } @@ -1191,14 +1211,18 @@ void AMCController::SaveAnimation() { PathSaved = PathSaved + "/DataLog.log"; } - InstructionWidget->WidgetSwitcher->SetActiveWidgetIndex(InstructionWidget->SavingIndex); + if (InstructionWidget) { + InstructionWidget->WidgetSwitcher->SetActiveWidgetIndex(InstructionWidget->SavingIndex); + } if (GEngine) { GEngine->AddOnScreenDebugMessage(-1, 15.0f, FColor::Green, FString::Printf(TEXT("Saving Animation..."))); } - FeedbackWidget->ProgBar->SetVisibility(ESlateVisibility::Visible); - FeedbackWidget->ProgBar->SetPercent(0); - FeedbackWidget->AnimNameText->SetText(FText::FromString(NameOfRecording)); + if (FeedbackWidget) { + FeedbackWidget->ProgBar->SetVisibility(ESlateVisibility::Visible); + FeedbackWidget->ProgBar->SetPercent(0); + FeedbackWidget->AnimNameText->SetText(FText::FromString(NameOfRecording)); + } FFileHelper::LoadFileToStringArray(AnimSaveState.StringData, *PathSaved); diff --git a/Source/MoCapPlugin/Public/MCController.h b/Source/MoCapPlugin/Public/MCController.h index a7510f8b4e8c34619252f3575606dca1f096417a..64098b335aeead1ff9e20844e0e871634b51a776 100644 --- a/Source/MoCapPlugin/Public/MCController.h +++ b/Source/MoCapPlugin/Public/MCController.h @@ -52,15 +52,14 @@ class MOCAPPLUGIN_API AMCController : public AActor { GENERATED_BODY() -protected: +public: bool DebugMode = false; bool UseLastOffsets = false; bool SetControls = true; bool KeepPawnInvisible = false; + bool KeepPawnVisible = false; bool OutputMsgOnScreen = true; - -public: AMCController(); virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override; @@ -73,9 +72,6 @@ public: virtual void Tick(float DeltaTime) override; - -protected: - UFUNCTION(BlueprintCallable) void ToggleRecording(); @@ -94,6 +90,8 @@ protected: UFUNCTION(BlueprintCallable) void FinishEditAnim(); +protected: + void RecordMode(); void SaveToAnimMode();