From 88c175909e0beb727635ca22c1a0a31ab5defdbc Mon Sep 17 00:00:00 2001 From: "j.foucher" Date: Tue, 24 Feb 2026 20:17:04 +0100 Subject: [PATCH] v2.3.0: Separate emotion data asset + code cleanup - Create dedicated UElevenLabsEmotionPoseMap data asset for emotions - FacialExpressionComponent now uses EmotionPoseMap (not LipSyncPoseMap) - Remove emotion data (FElevenLabsEmotionPoseSet, EmotionPoses TMap) from LipSyncPoseMap - Add ElevenLabsEmotionPoseMapFactory for Content Browser asset creation - Standardize log format to [T+Xs] [Turn N] in ConversationalAgentComponent - Remove unused #include "Engine/World.h" - Simplify collision log to single line Co-Authored-By: Claude Opus 4.6 --- .../PS_AI_Agent/Content/Demo_VoiceOnly.umap | Bin 59573 -> 60069 bytes .../Content/ElevenLabsLipSyncPoseMap.uasset | Bin 8355 -> 8189 bytes .../Content/MetaHumans/Taro/BP_Taro.uasset | Bin 593290 -> 593610 bytes .../NewElevenLabsEmotionPoseMap.uasset | Bin 0 -> 5281 bytes ...ElevenLabsConversationalAgentComponent.cpp | 38 +++++------ .../ElevenLabsFacialExpressionComponent.cpp | 28 +++++--- .../Public/ElevenLabsEmotionPoseMap.h | 61 ++++++++++++++++++ .../ElevenLabsFacialExpressionComponent.h | 10 +-- .../Public/ElevenLabsLipSyncPoseMap.h | 37 ----------- .../ElevenLabsEmotionPoseMapFactory.cpp | 29 +++++++++ .../Private/ElevenLabsEmotionPoseMapFactory.h | 27 ++++++++ 11 files changed, 162 insertions(+), 68 deletions(-) create mode 100644 Unreal/PS_AI_Agent/Content/NewElevenLabsEmotionPoseMap.uasset create mode 100644 Unreal/PS_AI_Agent/Plugins/PS_AI_Agent_ElevenLabs/Source/PS_AI_Agent_ElevenLabs/Public/ElevenLabsEmotionPoseMap.h create mode 100644 Unreal/PS_AI_Agent/Plugins/PS_AI_Agent_ElevenLabs/Source/PS_AI_Agent_ElevenLabsEditor/Private/ElevenLabsEmotionPoseMapFactory.cpp create mode 100644 Unreal/PS_AI_Agent/Plugins/PS_AI_Agent_ElevenLabs/Source/PS_AI_Agent_ElevenLabsEditor/Private/ElevenLabsEmotionPoseMapFactory.h diff --git a/Unreal/PS_AI_Agent/Content/Demo_VoiceOnly.umap b/Unreal/PS_AI_Agent/Content/Demo_VoiceOnly.umap index a7094bb9cf3c924e176e9c093c53b3528bf3442c..1728ce4a51e960c2bf77d140b7847a8c235e3876 100644 GIT binary patch literal 60069 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 Oq~o@y2Ju)N@&6wJvE5k! diff --git a/Unreal/PS_AI_Agent/Content/ElevenLabsLipSyncPoseMap.uasset b/Unreal/PS_AI_Agent/Content/ElevenLabsLipSyncPoseMap.uasset index 4071763311bc1d1194852612167041dbfba5f7b7..baa471b76286e1754eb3e4db193f59b81c30c8b0 100644 GIT binary patch delta 1282 zcmZ4N_}6}d0aK&YL?cb!bOr{76hU40a$vApf`oNScA+ zJdg(A`#{|MPKm)Vd$aoMpSXINCQs%4A?OTMQInspqv>$s@yH0TqKG~Hz%(X0-FRk`^Mxxey|AK#Opv^F(|sO zO}>Yw<|KqFsfL*d;+;jxJ$ zo2iGw3q#@6q41WW@Xn#|zM=5sB#>=*C?RZw9Lo=Zv5FMw46qpH1`4vVLS!1HCO?!A znfyV5b@CYrL$ya}TGF8UL4^-2`rG9vD@!h5y9_LEa-}BMOR8`FAgRpA11gt*y6*$A s{$_dUAST9VlO5z_Cils1WPA)_F+Q2xFDt|NbaRzlA|tBMWHE(a0Ee3ZCIA2c delta 1336 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 UUPS+N??qnY>5EAFXUuK?52Tkv`v3p{ delta 105842 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 diff --git a/Unreal/PS_AI_Agent/Content/NewElevenLabsEmotionPoseMap.uasset b/Unreal/PS_AI_Agent/Content/NewElevenLabsEmotionPoseMap.uasset new file mode 100644 index 0000000000000000000000000000000000000000..e1134cfe6cd95968b337c9eb4289368f234d919e GIT binary patch literal 5281 zcmcIoeQ*;+6n_ecLirG>QbBB0D73Um69O$C9nz9eDmjXQKeZm|P6*_SyGtR;DCmIr zF$^FKqLe=v{2Fw|5yxT5NQFTy%uq)@L~vjf`DlwMXhD!leeW(8lD2o32K{9=d;9jc z@9plr-FrR-n;Jwn-0lq!0dj!`hLH?jC}r{QP+iTmDnb&v=m) z*a~fOJ;3>*g^t_A*fc|3W%jENcUv`Sl0E2U z0_<4uV!;Rv#&nHkmD8gIK#e-yF zFcOH*?409u)9xkaQb}L|27AUFy^?`tblo_|wqeDJz9eHczDNM_j-9#O2a8-N$e^v) zR|BYy3kd-n;tO?-L+B4Md;UV^k>VQcKkjU$QC0DtMZA~I3VC?H?>U~<35N?v4D%ia zL!{_xYU`GSNJ3jPY-yi>Vr8khn8a5^0(?+3*@M1-tU@%o1_l8~@UQfS02d5i1 zX7qgQZiyEdT5q|!`}uTRyI{_+x$bmZbFjL!zCE?$Eq7Gg0NUWyUA;UcuzAYrhwC#7 zN@+o>b&jCdhg-&~X)9;aK1A!+%@#)(`a9ejv*W{iP+0EgaTk=9EM2F$!O^MObn5$A zcoyQ8B=OUEiHEbxKYLT&w-VO=@r|RmC(B$AT6*A(WElsaKa=}79#%m6M&jxVR6TjK ztK0?0zSw@GtDJ+3cPf{ux>f(T^!avuvdjgqHD}i+%Q$d1HD%%(+I zuN$|WjY2tLw35N^c=G4Po~ezB&b;4{mmjOt<6T1DxDLv&Lhv70`DC1#;3qLi##Rf1kigQzaWqH6@nh`4Du!_v?SgW zFQ{erCJPN!CiFQ?eB}$e2Pf;hqi1(mEGvqy#B9G!jf{|U?*$75F3Tp{Q zyx|JXkVosDV5E;CHG&auq(U>~QPfW`(w8l>jCpi@A{gnT6O3TQQ+>#Yr)W#ocNzUs zl~Ydf0---9ckB{LHz6(1&5RNORVC?Cq{{#7n64|GI279v=yq2oKjED&;l`DyKUN*j z^z6~$st3}mdqNu>GNUjuXpBt^DKp~Bftc>qv9QbKP`!iqM*U>UE{aSliv(-@Ob!}Q z1av@hc#WuKO6cLnvKp`?1T%$lZLV6={pD4&2f1)Rs;v_6!XiZFUeLA2aLk<>&5eec z{;X%CnU02z2Fw(Y9}*~vAdsKXkO}lmiJdS-6wnQ2cjLmvnTnr8l+(a7HP|C>=gP99QH z0VT8)=;IV22b1BKy}kIcanrSTmlsan{~awG^;{+egxb@^b9x_a7;9FFK>U9Jy@o!m literal 0 HcmV?d00001 diff --git a/Unreal/PS_AI_Agent/Plugins/PS_AI_Agent_ElevenLabs/Source/PS_AI_Agent_ElevenLabs/Private/ElevenLabsConversationalAgentComponent.cpp b/Unreal/PS_AI_Agent/Plugins/PS_AI_Agent_ElevenLabs/Source/PS_AI_Agent_ElevenLabs/Private/ElevenLabsConversationalAgentComponent.cpp index 0adf3cf..91421f5 100644 --- a/Unreal/PS_AI_Agent/Plugins/PS_AI_Agent_ElevenLabs/Source/PS_AI_Agent_ElevenLabs/Private/ElevenLabsConversationalAgentComponent.cpp +++ b/Unreal/PS_AI_Agent/Plugins/PS_AI_Agent_ElevenLabs/Source/PS_AI_Agent_ElevenLabs/Private/ElevenLabsConversationalAgentComponent.cpp @@ -7,7 +7,6 @@ #include "Components/AudioComponent.h" #include "Sound/SoundWaveProcedural.h" #include "GameFramework/Actor.h" -#include "Engine/World.h" DEFINE_LOG_CATEGORY_STATIC(LogElevenLabsAgent, Log, All); @@ -89,9 +88,10 @@ void UElevenLabsConversationalAgentComponent::TickComponent(float DeltaTime, ELe if (Elapsed >= static_cast(AudioPreBufferMs)) { bPreBuffering = false; + const double Tpb = FPlatformTime::Seconds() - SessionStartTime; UE_LOG(LogElevenLabsAgent, Log, - TEXT("[Turn %d] Pre-buffer timeout (%dms). Starting playback."), - LastClosedTurnIndex, AudioPreBufferMs); + TEXT("[T+%.2fs] [Turn %d] Pre-buffer timeout (%dms). Starting playback."), + Tpb, LastClosedTurnIndex, AudioPreBufferMs); if (AudioPlaybackComponent && !AudioPlaybackComponent->IsPlaying()) { AudioPlaybackComponent->Play(); @@ -145,9 +145,10 @@ void UElevenLabsConversationalAgentComponent::TickComponent(float DeltaTime, ELe { if (bHardTimeoutFired) { + const double Tht = FPlatformTime::Seconds() - SessionStartTime; UE_LOG(LogElevenLabsAgent, Warning, - TEXT("[Turn %d] Agent silence hard-timeout (10s) without agent_response — declaring agent stopped."), - LastClosedTurnIndex); + TEXT("[T+%.2fs] [Turn %d] Agent silence hard-timeout (10s) without agent_response — declaring agent stopped."), + Tht, LastClosedTurnIndex); } OnAgentStoppedSpeaking.Broadcast(); } @@ -519,13 +520,10 @@ void UElevenLabsConversationalAgentComponent::HandleAgentResponseStarted() } else { - // Collision: server started generating Turn N's response while Turn M (M>N) mic was open. - // Stop the mic WITHOUT flushing the accumulated audio buffer (see StopListening's - // bAgentGenerating guard). Flushing would send audio to a server that is mid-generation, - // causing it to re-enter "user speaking" state and stall — both sides stuck. + // Collision: server generating while mic was open — stop mic without flushing. UE_LOG(LogElevenLabsAgent, Log, - TEXT("[T+%.2fs] [Turn %d → Turn %d collision] Agent generating Turn %d response — mic (Turn %d) was open, stopping. (%.2fs after turn end)"), - T, LastClosedTurnIndex, TurnIndex, LastClosedTurnIndex, TurnIndex, LatencyFromTurnEnd); + TEXT("[T+%.2fs] [Turn %d] Collision — mic was open, stopping. (%.2fs after turn end)"), + T, LastClosedTurnIndex, LatencyFromTurnEnd); StopListening(); } } @@ -736,9 +734,10 @@ void UElevenLabsConversationalAgentComponent::EnqueueAgentAudio(const TArrayIsPlaying()) { @@ -750,10 +749,12 @@ void UElevenLabsConversationalAgentComponent::EnqueueAgentAudio(const TArrayIsPlaying()) { AudioPlaybackComponent->Play(); @@ -766,9 +767,10 @@ void UElevenLabsConversationalAgentComponent::EnqueueAgentAudio(const TArrayIsPlaying()) { + const double Tbr = FPlatformTime::Seconds() - SessionStartTime; UE_LOG(LogElevenLabsAgent, Warning, - TEXT("[Turn %d] Audio component stopped during speech (buffer underrun). Restarting playback."), - LastClosedTurnIndex); + TEXT("[T+%.2fs] [Turn %d] Audio component stopped during speech (buffer underrun). Restarting playback."), + Tbr, LastClosedTurnIndex); AudioPlaybackComponent->Play(); } // Reset silence counter — new audio arrived, we're not in a gap anymore diff --git a/Unreal/PS_AI_Agent/Plugins/PS_AI_Agent_ElevenLabs/Source/PS_AI_Agent_ElevenLabs/Private/ElevenLabsFacialExpressionComponent.cpp b/Unreal/PS_AI_Agent/Plugins/PS_AI_Agent_ElevenLabs/Source/PS_AI_Agent_ElevenLabs/Private/ElevenLabsFacialExpressionComponent.cpp index 7c380f2..4739bc9 100644 --- a/Unreal/PS_AI_Agent/Plugins/PS_AI_Agent_ElevenLabs/Source/PS_AI_Agent_ElevenLabs/Private/ElevenLabsFacialExpressionComponent.cpp +++ b/Unreal/PS_AI_Agent/Plugins/PS_AI_Agent_ElevenLabs/Source/PS_AI_Agent_ElevenLabs/Private/ElevenLabsFacialExpressionComponent.cpp @@ -2,7 +2,7 @@ #include "ElevenLabsFacialExpressionComponent.h" #include "ElevenLabsConversationalAgentComponent.h" -#include "ElevenLabsLipSyncPoseMap.h" +#include "ElevenLabsEmotionPoseMap.h" #include "Animation/AnimSequence.h" #include "Animation/AnimData/IAnimationDataModel.h" @@ -52,8 +52,20 @@ void UElevenLabsFacialExpressionComponent::BeginPlay() *Owner->GetName()); } - // Validate emotion poses from PoseMap + // Validate emotion poses from EmotionPoseMap ValidateEmotionPoses(); + + // Auto-start the default emotion animation (Neutral) so the face + // is alive from the start (blinking, micro-movements, breathing) + // without waiting for the first set_emotion call. + ActiveAnim = FindAnimForEmotion(ActiveEmotion, ActiveEmotionIntensity); + if (ActiveAnim) + { + ActivePlaybackTime = 0.0f; + CrossfadeAlpha = 1.0f; // No crossfade needed on startup + UE_LOG(LogElevenLabsFacialExpr, Log, + TEXT("Auto-started default emotion anim: %s"), *ActiveAnim->GetName()); + } } void UElevenLabsFacialExpressionComponent::EndPlay(const EEndPlayReason::Type EndPlayReason) @@ -73,15 +85,15 @@ void UElevenLabsFacialExpressionComponent::EndPlay(const EEndPlayReason::Type En void UElevenLabsFacialExpressionComponent::ValidateEmotionPoses() { - if (!PoseMap || PoseMap->EmotionPoses.Num() == 0) + if (!EmotionPoseMap || EmotionPoseMap->EmotionPoses.Num() == 0) { UE_LOG(LogElevenLabsFacialExpr, Log, - TEXT("No emotion poses assigned in PoseMap — facial expressions disabled.")); + TEXT("No emotion poses assigned in EmotionPoseMap — facial expressions disabled.")); return; } int32 AnimCount = 0; - for (const auto& EmotionPair : PoseMap->EmotionPoses) + for (const auto& EmotionPair : EmotionPoseMap->EmotionPoses) { const FElevenLabsEmotionPoseSet& PoseSet = EmotionPair.Value; if (PoseSet.Normal) ++AnimCount; @@ -91,7 +103,7 @@ void UElevenLabsFacialExpressionComponent::ValidateEmotionPoses() UE_LOG(LogElevenLabsFacialExpr, Log, TEXT("=== Emotion poses: %d emotions, %d anim slots available ==="), - PoseMap->EmotionPoses.Num(), AnimCount); + EmotionPoseMap->EmotionPoses.Num(), AnimCount); } // ───────────────────────────────────────────────────────────────────────────── @@ -101,9 +113,9 @@ void UElevenLabsFacialExpressionComponent::ValidateEmotionPoses() UAnimSequence* UElevenLabsFacialExpressionComponent::FindAnimForEmotion( EElevenLabsEmotion Emotion, EElevenLabsEmotionIntensity Intensity) const { - if (!PoseMap) return nullptr; + if (!EmotionPoseMap) return nullptr; - const FElevenLabsEmotionPoseSet* PoseSet = PoseMap->EmotionPoses.Find(Emotion); + const FElevenLabsEmotionPoseSet* PoseSet = EmotionPoseMap->EmotionPoses.Find(Emotion); if (!PoseSet) return nullptr; // Direct match diff --git a/Unreal/PS_AI_Agent/Plugins/PS_AI_Agent_ElevenLabs/Source/PS_AI_Agent_ElevenLabs/Public/ElevenLabsEmotionPoseMap.h b/Unreal/PS_AI_Agent/Plugins/PS_AI_Agent_ElevenLabs/Source/PS_AI_Agent_ElevenLabs/Public/ElevenLabsEmotionPoseMap.h new file mode 100644 index 0000000..63196f4 --- /dev/null +++ b/Unreal/PS_AI_Agent/Plugins/PS_AI_Agent_ElevenLabs/Source/PS_AI_Agent_ElevenLabs/Public/ElevenLabsEmotionPoseMap.h @@ -0,0 +1,61 @@ +// Copyright ASTERION. All Rights Reserved. + +#pragma once + +#include "CoreMinimal.h" +#include "Engine/DataAsset.h" +#include "Engine/AssetManager.h" +#include "ElevenLabsDefinitions.h" +#include "ElevenLabsEmotionPoseMap.generated.h" + +class UAnimSequence; + +// ───────────────────────────────────────────────────────────────────────────── +// Emotion pose set: 3 intensity levels (Normal / Medium / Extreme) +// ───────────────────────────────────────────────────────────────────────────── +USTRUCT(BlueprintType) +struct PS_AI_AGENT_ELEVENLABS_API FElevenLabsEmotionPoseSet +{ + GENERATED_BODY() + + /** Low intensity expression (subtle). E.g. MHF_Happy_N */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, + meta = (ToolTip = "Low intensity (Normal). E.g. MHF_Happy_N")) + TObjectPtr Normal; + + /** Medium intensity expression. E.g. MHF_Happy_M */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, + meta = (ToolTip = "Medium intensity. E.g. MHF_Happy_M")) + TObjectPtr Medium; + + /** High intensity expression (extreme). E.g. MHF_Happy_E */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, + meta = (ToolTip = "High intensity (Extreme). E.g. MHF_Happy_E")) + TObjectPtr Extreme; +}; + +/** + * Reusable data asset that maps emotions to facial expression AnimSequences. + * + * Create ONE instance of this asset in the Content Browser + * (right-click → Miscellaneous → Data Asset → ElevenLabsEmotionPoseMap), + * assign your emotion AnimSequences, then reference this asset + * on the ElevenLabs Facial Expression component. + * + * The component plays the AnimSequence in real-time (looping) to drive + * emotion-based facial expressions (eyes, eyebrows, cheeks, mouth mood). + * Lip sync overrides the mouth-area curves on top. + */ +UCLASS(BlueprintType, Blueprintable, DisplayName = "ElevenLabs Emotion Pose Map") +class PS_AI_AGENT_ELEVENLABS_API UElevenLabsEmotionPoseMap : public UPrimaryDataAsset +{ + GENERATED_BODY() + +public: + /** Map of emotions to their AnimSequence sets (Normal / Medium / Extreme). + * Add entries for each emotion your agent uses (Joy, Sadness, Anger, Surprise, Fear, Disgust). + * Neutral is recommended — it plays by default at startup (blinking, breathing). */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Emotion Poses", + meta = (ToolTip = "Emotion → AnimSequence mapping with 3 intensity levels.\nThese drive the base facial expression (eyes, brows, cheeks).\nLip sync overrides the mouth area on top.")) + TMap EmotionPoses; +}; diff --git a/Unreal/PS_AI_Agent/Plugins/PS_AI_Agent_ElevenLabs/Source/PS_AI_Agent_ElevenLabs/Public/ElevenLabsFacialExpressionComponent.h b/Unreal/PS_AI_Agent/Plugins/PS_AI_Agent_ElevenLabs/Source/PS_AI_Agent_ElevenLabs/Public/ElevenLabsFacialExpressionComponent.h index bc7708a..854f7a3 100644 --- a/Unreal/PS_AI_Agent/Plugins/PS_AI_Agent_ElevenLabs/Source/PS_AI_Agent_ElevenLabs/Public/ElevenLabsFacialExpressionComponent.h +++ b/Unreal/PS_AI_Agent/Plugins/PS_AI_Agent_ElevenLabs/Source/PS_AI_Agent_ElevenLabs/Public/ElevenLabsFacialExpressionComponent.h @@ -8,7 +8,7 @@ #include "ElevenLabsFacialExpressionComponent.generated.h" class UElevenLabsConversationalAgentComponent; -class UElevenLabsLipSyncPoseMap; +class UElevenLabsEmotionPoseMap; class UAnimSequence; // ───────────────────────────────────────────────────────────────────────────── @@ -41,11 +41,11 @@ public: // ── Configuration ───────────────────────────────────────────────────────── - /** Pose map asset containing emotion AnimSequences (Normal / Medium / Extreme per emotion). - * Can be the same PoseMap asset used by the LipSync component. */ + /** Emotion pose map asset containing emotion AnimSequences (Normal / Medium / Extreme per emotion). + * Create a dedicated ElevenLabsEmotionPoseMap asset in the Content Browser. */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "ElevenLabs|FacialExpression", - meta = (ToolTip = "Pose map with Emotion Poses filled in.\nCan be the same asset as the LipSync component.")) - TObjectPtr PoseMap; + meta = (ToolTip = "Dedicated Emotion Pose Map asset.\nRight-click Content Browser → Miscellaneous → ElevenLabs Emotion Pose Map.")) + TObjectPtr EmotionPoseMap; /** Emotion crossfade duration in seconds. */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "ElevenLabs|FacialExpression", diff --git a/Unreal/PS_AI_Agent/Plugins/PS_AI_Agent_ElevenLabs/Source/PS_AI_Agent_ElevenLabs/Public/ElevenLabsLipSyncPoseMap.h b/Unreal/PS_AI_Agent/Plugins/PS_AI_Agent_ElevenLabs/Source/PS_AI_Agent_ElevenLabs/Public/ElevenLabsLipSyncPoseMap.h index 34fecb6..8f63819 100644 --- a/Unreal/PS_AI_Agent/Plugins/PS_AI_Agent_ElevenLabs/Source/PS_AI_Agent_ElevenLabs/Public/ElevenLabsLipSyncPoseMap.h +++ b/Unreal/PS_AI_Agent/Plugins/PS_AI_Agent_ElevenLabs/Source/PS_AI_Agent_ElevenLabs/Public/ElevenLabsLipSyncPoseMap.h @@ -5,35 +5,10 @@ #include "CoreMinimal.h" #include "Engine/DataAsset.h" #include "Engine/AssetManager.h" -#include "ElevenLabsDefinitions.h" #include "ElevenLabsLipSyncPoseMap.generated.h" class UAnimSequence; -// ───────────────────────────────────────────────────────────────────────────── -// Emotion pose set: 3 intensity levels (Normal / Medium / Extreme) -// ───────────────────────────────────────────────────────────────────────────── -USTRUCT(BlueprintType) -struct PS_AI_AGENT_ELEVENLABS_API FElevenLabsEmotionPoseSet -{ - GENERATED_BODY() - - /** Low intensity expression (subtle). E.g. MHF_Happy_N */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, - meta = (ToolTip = "Low intensity (Normal). E.g. MHF_Happy_N")) - TObjectPtr Normal; - - /** Medium intensity expression. E.g. MHF_Happy_M */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, - meta = (ToolTip = "Medium intensity. E.g. MHF_Happy_M")) - TObjectPtr Medium; - - /** High intensity expression (extreme). E.g. MHF_Happy_E */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, - meta = (ToolTip = "High intensity (Extreme). E.g. MHF_Happy_E")) - TObjectPtr Extreme; -}; - /** * Reusable data asset that maps OVR visemes to phoneme pose AnimSequences. * @@ -129,16 +104,4 @@ public: meta = (ToolTip = "Close back vowel (OO). E.g. MHF_OU")) TObjectPtr PoseOU; - // ── Emotion Poses ──────────────────────────────────────────────────────── - // - // Facial expression animations for each emotion, with 3 intensity levels. - // These are applied as a BASE layer (eyes, eyebrows, cheeks). - // Lip sync MODULATES on top, overriding only mouth-area curves. - - /** Map of emotions to their pose sets (Normal / Medium / Extreme). - * Add entries for each emotion your agent uses (Joy, Sadness, Anger, Surprise, Fear, Disgust). - * Neutral is optional — absence means no base expression. */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Emotion Poses", - meta = (ToolTip = "Emotion → AnimSequence mapping with 3 intensity levels.\nThese drive the base facial expression (eyes, brows, cheeks).\nLip sync overrides the mouth area on top.")) - TMap EmotionPoses; }; diff --git a/Unreal/PS_AI_Agent/Plugins/PS_AI_Agent_ElevenLabs/Source/PS_AI_Agent_ElevenLabsEditor/Private/ElevenLabsEmotionPoseMapFactory.cpp b/Unreal/PS_AI_Agent/Plugins/PS_AI_Agent_ElevenLabs/Source/PS_AI_Agent_ElevenLabsEditor/Private/ElevenLabsEmotionPoseMapFactory.cpp new file mode 100644 index 0000000..beb4fdf --- /dev/null +++ b/Unreal/PS_AI_Agent/Plugins/PS_AI_Agent_ElevenLabs/Source/PS_AI_Agent_ElevenLabsEditor/Private/ElevenLabsEmotionPoseMapFactory.cpp @@ -0,0 +1,29 @@ +// Copyright ASTERION. All Rights Reserved. + +#include "ElevenLabsEmotionPoseMapFactory.h" +#include "ElevenLabsEmotionPoseMap.h" +#include "AssetTypeCategories.h" + +UElevenLabsEmotionPoseMapFactory::UElevenLabsEmotionPoseMapFactory() +{ + SupportedClass = UElevenLabsEmotionPoseMap::StaticClass(); + bCreateNew = true; + bEditAfterNew = true; +} + +UObject* UElevenLabsEmotionPoseMapFactory::FactoryCreateNew( + UClass* Class, UObject* InParent, FName Name, EObjectFlags Flags, + UObject* Context, FFeedbackContext* Warn) +{ + return NewObject(InParent, Class, Name, Flags); +} + +FText UElevenLabsEmotionPoseMapFactory::GetDisplayName() const +{ + return FText::FromString(TEXT("ElevenLabs Emotion Pose Map")); +} + +uint32 UElevenLabsEmotionPoseMapFactory::GetMenuCategories() const +{ + return EAssetTypeCategories::Misc; +} diff --git a/Unreal/PS_AI_Agent/Plugins/PS_AI_Agent_ElevenLabs/Source/PS_AI_Agent_ElevenLabsEditor/Private/ElevenLabsEmotionPoseMapFactory.h b/Unreal/PS_AI_Agent/Plugins/PS_AI_Agent_ElevenLabs/Source/PS_AI_Agent_ElevenLabsEditor/Private/ElevenLabsEmotionPoseMapFactory.h new file mode 100644 index 0000000..91cee98 --- /dev/null +++ b/Unreal/PS_AI_Agent/Plugins/PS_AI_Agent_ElevenLabs/Source/PS_AI_Agent_ElevenLabsEditor/Private/ElevenLabsEmotionPoseMapFactory.h @@ -0,0 +1,27 @@ +// Copyright ASTERION. All Rights Reserved. + +#pragma once + +#include "CoreMinimal.h" +#include "Factories/Factory.h" +#include "ElevenLabsEmotionPoseMapFactory.generated.h" + +/** + * Factory that lets users create ElevenLabsEmotionPoseMap assets + * directly from the Content Browser (right-click → Miscellaneous). + */ +UCLASS() +class UElevenLabsEmotionPoseMapFactory : public UFactory +{ + GENERATED_BODY() + +public: + UElevenLabsEmotionPoseMapFactory(); + + virtual UObject* FactoryCreateNew(UClass* Class, UObject* InParent, + FName Name, EObjectFlags Flags, UObject* Context, + FFeedbackContext* Warn) override; + + virtual FText GetDisplayName() const override; + virtual uint32 GetMenuCategories() const override; +};