Skip to content
Snippets Groups Projects
Commit fe8be6af authored by Patrick Nossol's avatar Patrick Nossol
Browse files

changes for 5.1 animation and input

parent 4f3ed27a
Branches
Tags 0.0.0
No related merge requests found
File added
File added
File added
File added
File added
File added
No preview for this file type
...@@ -27,7 +27,8 @@ public class MoCapPlugin : ModuleRules ...@@ -27,7 +27,8 @@ public class MoCapPlugin : ModuleRules
"AnimGraphRuntime", "AnimGraphRuntime",
"CharacterPlugin", "CharacterPlugin",
"ControlRig", "ControlRig",
"RigVM" "RigVM",
"EnhancedInput"
} }
); );
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include "Kismet/GameplayStatics.h" #include "Kismet/GameplayStatics.h"
#include "AssetRegistryModule.h" #include "AssetRegistryModule.h"
#include "SteamVRInputDeviceFunctionLibrary.h" #include "SteamVRInputDeviceFunctionLibrary.h"
#include "Animation/AnimData/IAnimationDataController.h"
AMCController::AMCController() { AMCController::AMCController() {
...@@ -38,12 +39,18 @@ void AMCController::BeginPlay() { ...@@ -38,12 +39,18 @@ void AMCController::BeginPlay() {
APlayerController* Controller = UGameplayStatics::GetPlayerController(GetWorld(), 0); APlayerController* Controller = UGameplayStatics::GetPlayerController(GetWorld(), 0);
EnableInput(Controller); EnableInput(Controller);
if (SetControls && InputComponent != nullptr) { UEnhancedInputLocalPlayerSubsystem* Subsystem = ULocalPlayer::GetSubsystem<UEnhancedInputLocalPlayerSubsystem>(Controller->GetLocalPlayer());
InputComponent->BindAction("ToggleRecording", EInputEvent::IE_Pressed, this, &AMCController::ToggleRecording); Subsystem->ClearAllMappings();
InputComponent->BindAction("SetMarker", EInputEvent::IE_Pressed, this, &AMCController::SetMarker); Subsystem->AddMappingContext(InputMapping, 0);
InputComponent->BindAction("StartRecording", EInputEvent::IE_Pressed, this, &AMCController::ToggleRecording);
InputComponent->BindAction("NextSentence", EInputEvent::IE_Pressed, this, &AMCController::SetMarker); UEnhancedInputComponent* Input = Cast<UEnhancedInputComponent>(InputComponent);
InputComponent->BindAction("SaveAnimation", EInputEvent::IE_Pressed, this, &AMCController::SaveAnimationEditor);
if (SetControls && Input != nullptr) {
Input->BindAction(InputToggleRecording, ETriggerEvent::Triggered, this, &AMCController::ToggleRecording);
Input->BindAction(InputSetMarker, ETriggerEvent::Triggered, this, &AMCController::SetMarker);
Input->BindAction(InputStartRecording, ETriggerEvent::Triggered, this, &AMCController::ToggleRecording);
Input->BindAction(InputNextSentence, ETriggerEvent::Triggered, this, &AMCController::SetMarker);
Input->BindAction(InputSaveAnimation, ETriggerEvent::Triggered, this, &AMCController::SaveAnimationEditor);
} }
if (!Pawn || !Pawn->GetActorLocation().Equals(FVector(0, 0, 0)) || !Pawn->GetActorRotation().Equals(FRotator(0, 0, 0))) { if (!Pawn || !Pawn->GetActorLocation().Equals(FVector(0, 0, 0)) || !Pawn->GetActorRotation().Equals(FRotator(0, 0, 0))) {
...@@ -659,16 +666,16 @@ bool AMCController::PreprocessRecording(float StartHaltingPoint, float EndHaltin ...@@ -659,16 +666,16 @@ bool AMCController::PreprocessRecording(float StartHaltingPoint, float EndHaltin
SaveContent += FString::SanitizeFloat(Entry->Pos.X) + "," + FString::SanitizeFloat(Entry->Pos.Y) + "," + FString::SanitizeFloat(Entry->Pos.Z) + "," + SaveContent += FString::SanitizeFloat(Entry->Pos.X) + "," + FString::SanitizeFloat(Entry->Pos.Y) + "," + FString::SanitizeFloat(Entry->Pos.Z) + "," +
FString::SanitizeFloat(Entry->Rot.X) + "," + FString::SanitizeFloat(Entry->Rot.Y) + "," + FString::SanitizeFloat(Entry->Rot.Z) + "," + FString::SanitizeFloat(Entry->Rot.W) + "\n"; FString::SanitizeFloat(Entry->Rot.X) + "," + FString::SanitizeFloat(Entry->Rot.Y) + "," + FString::SanitizeFloat(Entry->Rot.Z) + "," + FString::SanitizeFloat(Entry->Rot.W) + "\n";
} }
FString SavePath = FPaths::ProjectContentDir() + "/LastDefaultPose.txt"; FString SavePath = FPaths::ProjectContentDir() + "LastDefaultPose.txt";
FFileHelper::SaveStringToFile(SaveContent, *SavePath); FFileHelper::SaveStringToFile(SaveContent, *SavePath);
break; break;
} }
} }
} }
} }
else if(FPaths::FileExists(FPaths::ProjectContentDir() + "/" + TakeDefaultPoseFromFile)) { else if(FPaths::FileExists(FPaths::ProjectContentDir() + TakeDefaultPoseFromFile)) {
TArray<FString> SaveContent; TArray<FString> SaveContent;
FString SavePath = FPaths::ProjectContentDir() + "/" + TakeDefaultPoseFromFile; FString SavePath = FPaths::ProjectContentDir() + TakeDefaultPoseFromFile;
FFileHelper::LoadFileToStringArray(SaveContent, *SavePath); FFileHelper::LoadFileToStringArray(SaveContent, *SavePath);
for (int i = 0; i < SaveContent.Num(); i++) { for (int i = 0; i < SaveContent.Num(); i++) {
EBodyPart Type = EBodyPart(i); EBodyPart Type = EBodyPart(i);
...@@ -1067,10 +1074,10 @@ void AMCController::SaveAnimSnapshots() { ...@@ -1067,10 +1074,10 @@ void AMCController::SaveAnimSnapshots() {
FolderName = Dest + "_" + FString::FromInt(j); FolderName = Dest + "_" + FString::FromInt(j);
} }
j++; j++;
} while (FPaths::DirectoryExists(FPaths::ProjectContentDir() + "/" + FolderName)); } while (FPaths::DirectoryExists(FPaths::ProjectContentDir() + FolderName));
IPlatformFile& PlatformFile = FPlatformFileManager::Get().GetPlatformFile(); IPlatformFile& PlatformFile = FPlatformFileManager::Get().GetPlatformFile();
PlatformFile.CreateDirectory(*(FPaths::ProjectContentDir() + "/" + FolderName)); PlatformFile.CreateDirectory(*(FPaths::ProjectContentDir() + FolderName));
for (int i = 0; i < Anims.Num(); i++) { for (int i = 0; i < Anims.Num(); i++) {
FString AnimName; FString AnimName;
...@@ -1121,7 +1128,7 @@ UAnimSequence* AMCController::SaveAsAnimSequence(const FSnapshotAnimations& Reco ...@@ -1121,7 +1128,7 @@ UAnimSequence* AMCController::SaveAsAnimSequence(const FSnapshotAnimations& Reco
int32 PelvisIndex = AnimationSequence->GetSkeleton()->GetSkeletonBoneIndexFromMeshBoneIndex(AnimSaveState.Pawn->SkeletalMesh->SkeletalMesh, RefPelvisIndex); int32 PelvisIndex = AnimationSequence->GetSkeleton()->GetSkeletonBoneIndexFromMeshBoneIndex(AnimSaveState.Pawn->SkeletalMesh->SkeletalMesh, RefPelvisIndex);
AnimationSequence->GetSkeleton()->SetBoneTranslationRetargetingMode(PelvisIndex, EBoneTranslationRetargetingMode::Animation, false); AnimationSequence->GetSkeleton()->SetBoneTranslationRetargetingMode(PelvisIndex, EBoneTranslationRetargetingMode::Animation, false);
AnimationSequence->SetSequenceLength((Recording.EndTime - Recording.StartTime).GetTotalSeconds()); //AnimationSequence->SetSequenceLength((Recording.EndTime - Recording.StartTime).GetTotalSeconds());
Controller.SetPlayLength((Recording.EndTime - Recording.StartTime).GetTotalSeconds()); Controller.SetPlayLength((Recording.EndTime - Recording.StartTime).GetTotalSeconds());
Controller.SetFrameRate(FFrameRate((Recording.EndTime - Recording.StartTime).GetTotalSeconds(), Recording.Snapshots.Num())); Controller.SetFrameRate(FFrameRate((Recording.EndTime - Recording.StartTime).GetTotalSeconds(), Recording.Snapshots.Num()));
...@@ -1155,32 +1162,43 @@ void AMCController::SetBonesAnimationInAnimSeq(const FSnapshotAnimations& Record ...@@ -1155,32 +1162,43 @@ void AMCController::SetBonesAnimationInAnimSeq(const FSnapshotAnimations& Record
IAnimationDataController& Controller = AnimSequence->GetController(); IAnimationDataController& Controller = AnimSequence->GetController();
for (const FName& BoneName : BoneNames) { for (int i = 0; i < BoneNames.Num(); i++) {
int32 in = AnimSequence->GetController().AddBoneTrack(BoneNames[i]);
}
FRawAnimSequenceTrack Track; for (int i = 0; i < BoneNames.Num(); i++) {
TArray<FQuat4f> RotKeys;
TArray<FVector3f> PosKeys;
TArray<FVector3f> ScaleKeys;
for (int Frame = 0; Frame < Recording.Snapshots.Num(); Frame++) { for (int Frame = 0; Frame < Recording.Snapshots.Num(); Frame++) {
const FPoseSnapshot& Snapshot = Recording.Snapshots[Frame]; const FPoseSnapshot& Snapshot = Recording.Snapshots[Frame];
int32 Index = Snapshot.BoneNames.IndexOfByKey(BoneName); int32 Index = Snapshot.BoneNames.IndexOfByKey(BoneNames[i]);
if (Index != INDEX_NONE) { if (Index != INDEX_NONE) {
Track.RotKeys.Add(FQuat4f(Snapshot.LocalTransforms[Index].GetRotation())); RotKeys.Add(FQuat4f(Snapshot.LocalTransforms[Index].GetRotation()));
Track.PosKeys.Add(FVector3f(Snapshot.LocalTransforms[Index].GetLocation())); PosKeys.Add(FVector3f(Snapshot.LocalTransforms[Index].GetLocation()));
ScaleKeys.Add(FVector3f::OneVector);
} }
else if (Frame == 0) { else if (Frame == 0) {
Track.RotKeys.Add(FQuat4f(FRotator::ZeroRotator.Quaternion())); RotKeys.Add(FQuat4f(FRotator::ZeroRotator.Quaternion()));
Track.PosKeys.Add(FVector3f(FVector::ZeroVector)); PosKeys.Add(FVector3f(FVector::ZeroVector));
ScaleKeys.Add(FVector3f::OneVector);
} }
else { else {
Track.RotKeys.Add(Track.RotKeys[Frame - 1]); RotKeys.Add(RotKeys[Frame - 1]);
Track.PosKeys.Add(Track.PosKeys[Frame - 1]); PosKeys.Add(PosKeys[Frame - 1]);
ScaleKeys.Add(FVector3f::OneVector);
} }
} }
Controller.AddBoneTrack(BoneName); bool juh = AnimSequence->GetController().SetBoneTrackKeys(BoneNames[i], PosKeys, RotKeys, ScaleKeys);
Controller.SetBoneTrackKeys(BoneName, Track.PosKeys, Track.RotKeys, {}); if (juh) {
RotKeys.Add(FQuat4f::Identity);
}
} }
#endif #endif
......
...@@ -47,9 +47,9 @@ struct DirectoryVisitor : public IPlatformFile::FDirectoryVisitor { ...@@ -47,9 +47,9 @@ struct DirectoryVisitor : public IPlatformFile::FDirectoryVisitor {
void UMCLogHandler::CopyLogToRecordings(FString& Name) { void UMCLogHandler::CopyLogToRecordings(FString& Name) {
if (!FPaths::DirectoryExists(FPaths::ProjectSavedDir() + "/Recordings")) { if (!FPaths::DirectoryExists(FPaths::ProjectSavedDir() + "Recordings")) {
IPlatformFile& PlatformFile = FPlatformFileManager::Get().GetPlatformFile(); IPlatformFile& PlatformFile = FPlatformFileManager::Get().GetPlatformFile();
PlatformFile.CreateDirectory(*(FPaths::ProjectSavedDir() + "/Recordings")); PlatformFile.CreateDirectory(*(FPaths::ProjectSavedDir() + "Recordings"));
} }
int LastSubIndex = Name.Find("_", ESearchCase::CaseSensitive, ESearchDir::FromEnd); int LastSubIndex = Name.Find("_", ESearchCase::CaseSensitive, ESearchDir::FromEnd);
...@@ -70,7 +70,7 @@ void UMCLogHandler::CopyLogToRecordings(FString& Name) { ...@@ -70,7 +70,7 @@ void UMCLogHandler::CopyLogToRecordings(FString& Name) {
FolderName = Name + "_" + FString::FromInt(j + 1); FolderName = Name + "_" + FString::FromInt(j + 1);
} }
j++; j++;
} while (FPaths::DirectoryExists(FPaths::ProjectSavedDir() + "/Recordings/" + FolderName)); } while (FPaths::DirectoryExists(FPaths::ProjectSavedDir() + "Recordings/" + FolderName));
Name = FolderName; Name = FolderName;
......
...@@ -13,6 +13,9 @@ ...@@ -13,6 +13,9 @@
#include "MCFeedbackWidget.h" #include "MCFeedbackWidget.h"
#include "Components/WidgetComponent.h" #include "Components/WidgetComponent.h"
#include "Engine/SceneCapture2D.h" #include "Engine/SceneCapture2D.h"
#include "EnhancedInput/Public/EnhancedInputComponent.h"
#include "EnhancedInput/Public/InputMappingContext.h"
#include "EnhancedInput/Public/EnhancedInputSubsystems.h"
#include "MCController.generated.h" #include "MCController.generated.h"
...@@ -168,6 +171,24 @@ public: ...@@ -168,6 +171,24 @@ public:
UPROPERTY(EditAnywhere, meta = (DisplayName = "Right Foot Plane", Category = "MotionCapture Map")) UPROPERTY(EditAnywhere, meta = (DisplayName = "Right Foot Plane", Category = "MotionCapture Map"))
AActor* RightFootPlane; AActor* RightFootPlane;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "MotionCapture Map")
UInputMappingContext* InputMapping;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "MotionCapture Map")
UInputAction* InputToggleRecording;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "MotionCapture Map")
UInputAction* InputSetMarker;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "MotionCapture Map")
UInputAction* InputStartRecording;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "MotionCapture Map")
UInputAction* InputNextSentence;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "MotionCapture Map")
UInputAction* InputSaveAnimation;
/*------------ANIM PROPERTIES-------------*/ /*------------ANIM PROPERTIES-------------*/
UPROPERTY(EditAnywhere, meta = (DisplayName = "Frames per Second", Category = "MotionCapture Anim")) UPROPERTY(EditAnywhere, meta = (DisplayName = "Frames per Second", Category = "MotionCapture Anim"))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment