2014-03-14 14:13:41 -04:00
// Copyright 1998-2014 Epic Games, Inc. All Rights Reserved.
# include "AnimGraphPrivatePCH.h"
# include "CompilerResultsLog.h"
# include "GraphEditorActions.h"
2014-04-24 08:49:31 -04:00
# include "AnimGraphNode_SequenceEvaluator.h"
2014-03-14 14:13:41 -04:00
/////////////////////////////////////////////////////
// UAnimGraphNode_SequenceEvaluator
2014-04-23 18:30:37 -04:00
# define LOCTEXT_NAMESPACE "A3Nodes"
2014-03-14 14:13:41 -04:00
UAnimGraphNode_SequenceEvaluator : : UAnimGraphNode_SequenceEvaluator ( const FPostConstructInitializeProperties & PCIP )
: Super ( PCIP )
{
}
void UAnimGraphNode_SequenceEvaluator : : PreloadRequiredAssets ( )
{
PreloadObject ( Node . Sequence ) ;
Super : : PreloadRequiredAssets ( ) ;
}
void UAnimGraphNode_SequenceEvaluator : : GetAllAnimationSequencesReferred ( TArray < UAnimationAsset * > & ComplexAnims , TArray < UAnimSequence * > & AnimationSequences ) const
{
if ( Node . Sequence )
{
HandleAnimReferenceCollection ( Node . Sequence , ComplexAnims , AnimationSequences ) ;
}
}
void UAnimGraphNode_SequenceEvaluator : : ReplaceReferredAnimations ( const TMap < UAnimationAsset * , UAnimationAsset * > & ComplexAnimsMap , const TMap < UAnimSequence * , UAnimSequence * > & AnimSequenceMap )
{
HandleAnimReferenceReplacement ( Node . Sequence , ComplexAnimsMap , AnimSequenceMap ) ;
}
2014-09-03 18:14:09 -04:00
FText UAnimGraphNode_SequenceEvaluator : : GetTooltipText ( ) const
2014-03-14 14:13:41 -04:00
{
2014-09-03 18:17:44 -04:00
// FText::Format() is slow, so we utilize the cached list title
return GetNodeTitle ( ENodeTitleType : : ListView ) ;
2014-03-14 14:13:41 -04:00
}
2014-04-23 18:30:37 -04:00
FText UAnimGraphNode_SequenceEvaluator : : GetNodeTitle ( ENodeTitleType : : Type TitleType ) const
2014-03-14 14:13:41 -04:00
{
2014-09-03 18:17:44 -04:00
if ( Node . Sequence = = nullptr )
2014-04-23 18:30:37 -04:00
{
2014-09-03 18:17:44 -04:00
return LOCTEXT ( " EvaluateSequence_TitleNONE " , " Evaluate (None) " ) ;
2014-04-23 18:30:37 -04:00
}
2014-09-24 14:15:13 -04:00
// @TODO: don't know enough about this node type to comfortably assert that
// the CacheName won't change after the node has spawned... until
// then, we'll leave this optimization off
else //if (CachedNodeTitle.IsOutOfDate())
2014-04-23 18:30:37 -04:00
{
2014-09-03 18:17:44 -04:00
const FText SequenceName = FText : : FromString ( Node . Sequence - > GetName ( ) ) ;
FFormatNamedArguments Args ;
Args . Add ( TEXT ( " SequenceName " ) , SequenceName ) ;
// FText::Format() is slow, so we cache this to save on performance
if ( Node . Sequence - > IsValidAdditive ( ) )
{
CachedNodeTitle = FText : : Format ( LOCTEXT ( " EvaluateSequence_Additive " , " Evaluate {SequenceName} (additive) " ) , Args ) ;
}
else
{
CachedNodeTitle = FText : : Format ( LOCTEXT ( " EvaluateSequence " , " Evaluate {SequenceName} " ) , Args ) ;
}
2014-04-23 18:30:37 -04:00
}
2014-09-03 18:17:44 -04:00
return CachedNodeTitle ;
2014-04-23 18:30:37 -04:00
}
2014-03-14 14:13:41 -04:00
void UAnimGraphNode_SequenceEvaluator : : GetMenuEntries ( FGraphContextMenuBuilder & ContextMenuBuilder ) const
{
// Intentionally empty; you can drop down a regular sequence player and convert into a sequence evaluator in the right-click menu.
}
2014-08-23 20:16:29 -04:00
void UAnimGraphNode_SequenceEvaluator : : GetMenuActions ( FBlueprintActionDatabaseRegistrar & ActionRegistrar ) const
2014-08-21 18:50:33 -04:00
{
// Intentionally empty; you can drop down a regular sequence player and convert into a sequence evaluator in the right-click menu.
}
2014-03-14 14:13:41 -04:00
void UAnimGraphNode_SequenceEvaluator : : ValidateAnimNodeDuringCompilation ( class USkeleton * ForSkeleton , class FCompilerResultsLog & MessageLog )
{
if ( Node . Sequence = = NULL )
{
MessageLog . Error ( TEXT ( " @@ references an unknown sequence " ) , this ) ;
}
else
{
2014-10-01 14:45:23 -04:00
USkeleton * SeqSkeleton = Node . Sequence - > GetSkeleton ( ) ;
2014-03-14 14:13:41 -04:00
if ( SeqSkeleton & & // if anim sequence doesn't have skeleton, it might be due to anim sequence not loaded yet, @todo: wait with anim blueprint compilation until all assets are loaded?
! SeqSkeleton - > IsCompatible ( ForSkeleton ) )
{
MessageLog . Error ( TEXT ( " @@ references sequence that uses different skeleton @@ " ) , this , SeqSkeleton ) ;
}
}
}
void UAnimGraphNode_SequenceEvaluator : : GetContextMenuActions ( const FGraphNodeContextMenuBuilder & Context ) const
{
if ( ! Context . bIsDebugging )
{
// add an option to convert to a regular sequence player
Context . MenuBuilder - > BeginSection ( " AnimGraphNodeSequenceEvaluator " , NSLOCTEXT ( " A3Nodes " , " SequenceEvaluatorHeading " , " Sequence Evaluator " ) ) ;
{
Context . MenuBuilder - > AddMenuEntry ( FGraphEditorCommands : : Get ( ) . OpenRelatedAsset ) ;
Context . MenuBuilder - > AddMenuEntry ( FGraphEditorCommands : : Get ( ) . ConvertToSeqPlayer ) ;
}
Context . MenuBuilder - > EndSection ( ) ;
}
}
bool UAnimGraphNode_SequenceEvaluator : : DoesSupportTimeForTransitionGetter ( ) const
{
return true ;
}
UAnimationAsset * UAnimGraphNode_SequenceEvaluator : : GetAnimationAsset ( ) const
{
return Node . Sequence ;
}
const TCHAR * UAnimGraphNode_SequenceEvaluator : : GetTimePropertyName ( ) const
{
return TEXT ( " ExplicitTime " ) ;
}
UScriptStruct * UAnimGraphNode_SequenceEvaluator : : GetTimePropertyStruct ( ) const
{
return FAnimNode_SequenceEvaluator : : StaticStruct ( ) ;
2014-04-23 18:30:37 -04:00
}
# undef LOCTEXT_NAMESPACE