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 ) ;
}
FString UAnimGraphNode_SequenceEvaluator : : GetTooltip ( ) const
{
if ( ( Node . Sequence ! = NULL ) & & Node . Sequence - > IsValidAdditive ( ) )
{
return FString : : Printf ( TEXT ( " Evaluate %s (additive) " ) , * ( Node . Sequence - > GetPathName ( ) ) ) ;
}
else
{
return FString : : Printf ( TEXT ( " Evaluate %s " ) , * ( Node . Sequence - > GetPathName ( ) ) ) ;
}
}
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-04-23 18:30:37 -04:00
const FText SequenceName ( ( Node . Sequence ! = NULL ) ? FText : : FromString ( Node . Sequence - > GetName ( ) ) : LOCTEXT ( " None " , " (None) " ) ) ;
FFormatNamedArguments Args ;
Args . Add ( TEXT ( " SequenceName " ) , SequenceName ) ;
if ( Node . Sequence & & Node . Sequence - > IsValidAdditive ( ) )
{
return FText : : Format ( LOCTEXT ( " EvaluateSequence_Additive " , " Evaluate {SequenceName} (additive) " ) , Args ) ;
}
else
{
return FText : : Format ( LOCTEXT ( " EvaluateSequence " , " Evaluate {SequenceName} " ) , Args ) ;
}
}
FString UAnimGraphNode_SequenceEvaluator : : GetNodeNativeTitle ( ENodeTitleType : : Type TitleType ) const
{
// Do not setup this function for localization, intentionally left unlocalized!
2014-03-14 14:13:41 -04:00
if ( Node . Sequence & & Node . Sequence - > IsValidAdditive ( ) )
{
return FString : : Printf ( TEXT ( " Evaluate %s (additive) " ) , ( Node . Sequence ! = NULL ) ? * ( Node . Sequence - > GetName ( ) ) : TEXT ( " (None) " ) ) ;
}
else
{
return FString : : Printf ( TEXT ( " Evaluate %s " ) , ( Node . Sequence ! = NULL ) ? * ( Node . Sequence - > GetName ( ) ) : TEXT ( " (None) " ) ) ;
}
}
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.
}
void UAnimGraphNode_SequenceEvaluator : : ValidateAnimNodeDuringCompilation ( class USkeleton * ForSkeleton , class FCompilerResultsLog & MessageLog )
{
if ( Node . Sequence = = NULL )
{
MessageLog . Error ( TEXT ( " @@ references an unknown sequence " ) , this ) ;
}
else
{
USkeleton * SeqSkeleton = Node . Sequence - > GetSkeleton ( ) ;
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