Refactoring

This commit is contained in:
Ivan Anikin
2026-05-21 12:02:28 +07:00
parent 86baa476f4
commit 46cf6a4396
906 changed files with 2434 additions and 6456 deletions
@@ -8,7 +8,12 @@ class FUICommandList;
class AActor;
class IPersonaPreviewScene;
class IPersonaToolkit;
class UAnimationAsset;
class UAnimMontage;
class UAnimSequence;
class UDebugSkelMeshComponent;
class UMorphPresetRetargetPreviewAnimInstance;
class UIKRetargeter;
class ULipSyncComponent;
class ULipSyncMappingDataAsset;
class UMorphControllerComponent;
@@ -27,6 +32,11 @@ public:
UMorphPresetDataAsset* GetPreset() const;
USkeletalMesh* GetPreviewMesh() const;
bool SetPreviewMesh(USkeletalMesh* InPreviewMesh);
USkeletalMesh* GetAnimationPreviewMesh() const;
UAnimMontage* GetPreviewMontage() const;
bool SetPreviewMontage(UAnimMontage* InMontage);
UIKRetargeter* GetPreviewIKRetargeter() const;
bool SetPreviewIKRetargeter(UIKRetargeter* InRetargeter);
TSharedPtr<IPersonaToolkit> GetPersonaToolkit() const { return PersonaToolkit; }
TSharedPtr<IPersonaPreviewScene> GetPreviewScene() const;
@@ -65,8 +75,15 @@ public:
private:
void RebuildPreviewScene();
void RebuildPreviewAnimation();
void RebuildAnimationPreviewMesh();
void DestroyAnimationPreviewMesh();
void ApplyPresetToPreview();
void RefreshPreviewAnimationPose();
void RefreshAnimationPreviewPose();
void ConfigureRetargetPreview();
void ClearRetargetPreview(bool bRestorePreviewAnimation);
UAnimationAsset* ResolveMontagePreviewAnimation(float& OutAssetTime, float& OutAssetLength) const;
bool HasRetargetPreview() const;
void RebuildLipSyncPreviewComponents();
void DestroyLipSyncPreviewComponents();
void TickLipSyncPreviewComponents(float DeltaTime);
@@ -79,6 +96,10 @@ private:
TStrongObjectPtr<UAnimSequence> PreviewAnimation;
TStrongObjectPtr<ULipSyncMappingDataAsset> DefaultLipSyncPreviewMapping;
TWeakObjectPtr<USkeletalMesh> ActivePreviewMesh;
TWeakObjectPtr<USkeletalMesh> ActiveAnimationPreviewMesh;
TWeakObjectPtr<USkeletalMeshComponent> AnimationPreviewMeshComponent;
TWeakObjectPtr<UMorphPresetRetargetPreviewAnimInstance> RetargetPreviewInstance;
TWeakObjectPtr<UIKRetargeter> ActivePreviewIKRetargeter;
TWeakObjectPtr<ULipSyncMappingDataAsset> LipSyncPreviewMapping;
TWeakObjectPtr<USoundBase> LipSyncPreviewSound;
TWeakObjectPtr<AActor> LipSyncPreviewActor;
@@ -87,6 +108,7 @@ private:
bool bIsPlaying = false;
bool bLipSyncPreviewAudioActive = false;
float CurrentTime = 0.0f;
uint64 LastTickFrameNumber = MAX_uint64;
float LipSyncPreviewSmoothness = 0.55f;
FText LipSyncPreviewTranscript;
FText PreviewStatusText;
@@ -0,0 +1,48 @@
// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "Animation/AnimInstanceProxy.h"
#include "Animation/AnimInstance.h"
#include "AnimNodes/AnimNode_RetargetPoseFromMesh.h"
#include "MorphPresetRetargetPreviewAnimInstance.generated.h"
class UIKRetargeter;
class USkeletalMeshComponent;
USTRUCT()
struct FMorphPresetRetargetPreviewAnimInstanceProxy : public FAnimInstanceProxy
{
GENERATED_BODY()
FMorphPresetRetargetPreviewAnimInstanceProxy() = default;
FMorphPresetRetargetPreviewAnimInstanceProxy(UAnimInstance* InAnimInstance, FAnimNode_RetargetPoseFromMesh* InRetargetNode);
virtual void Initialize(UAnimInstance* InAnimInstance) override;
virtual void PreUpdate(UAnimInstance* InAnimInstance, float DeltaSeconds) override;
virtual void CacheBones() override;
virtual bool Evaluate(FPoseContext& Output) override;
virtual void UpdateAnimationNode(const FAnimationUpdateContext& InContext) override;
void Configure(UIKRetargeter* InRetargeter, TWeakObjectPtr<USkeletalMeshComponent> InSourceMeshComponent);
FAnimNode_RetargetPoseFromMesh* RetargetNode = nullptr;
};
UCLASS(Transient, NotBlueprintable)
class FUNNYGIRLEDITOR_API UMorphPresetRetargetPreviewAnimInstance : public UAnimInstance
{
GENERATED_BODY()
public:
UMorphPresetRetargetPreviewAnimInstance(const FObjectInitializer& ObjectInitializer);
void Configure(UIKRetargeter* InRetargeter, TWeakObjectPtr<USkeletalMeshComponent> InSourceMeshComponent);
protected:
virtual void NativeInitializeAnimation() override;
virtual FAnimInstanceProxy* CreateAnimInstanceProxy() override;
UPROPERTY(Transient)
FAnimNode_RetargetPoseFromMesh RetargetNode;
};
@@ -6,6 +6,8 @@
#include "Widgets/SCompoundWidget.h"
class FMorphPresetEditorController;
class UAnimMontage;
class UIKRetargeter;
class ULipSyncMappingDataAsset;
class USoundBase;
class USkeletalMesh;
@@ -24,9 +26,13 @@ public:
private:
void RebuildContent();
void OnPreviewMeshChanged(const struct FAssetData& AssetData);
void OnPreviewMontageChanged(const struct FAssetData& AssetData);
void OnPreviewIKRetargeterChanged(const struct FAssetData& AssetData);
void OnLipSyncSoundChanged(const struct FAssetData& AssetData);
void OnLipSyncMappingChanged(const struct FAssetData& AssetData);
FString GetSelectedPreviewMeshPath() const;
FString GetSelectedPreviewMontagePath() const;
FString GetSelectedPreviewIKRetargeterPath() const;
FString GetSelectedLipSyncSoundPath() const;
FString GetSelectedLipSyncMappingPath() const;
FReply OnPlayLipSyncClicked();