2014-03-14 14:13:41 -04:00
// Copyright 1998-2014 Epic Games, Inc. All Rights Reserved.
# include "AnimGraphPrivatePCH.h"
# include "GraphEditorActions.h"
# include "CompilerResultsLog.h"
2014-04-24 14:34:01 -04:00
# include "AnimGraphNode_BlendSpacePlayer.h"
2014-03-14 14:13:41 -04:00
/////////////////////////////////////////////////////
// UAnimGraphNode_BlendSpacePlayer
2014-04-23 18:30:37 -04:00
# define LOCTEXT_NAMESPACE "A3Nodes"
2014-03-14 14:13:41 -04:00
UAnimGraphNode_BlendSpacePlayer : : UAnimGraphNode_BlendSpacePlayer ( const FPostConstructInitializeProperties & PCIP )
: Super ( PCIP )
{
}
FString UAnimGraphNode_BlendSpacePlayer : : GetTooltip ( ) const
{
return FString : : Printf ( TEXT ( " Blendspace Player '%s' " ) , ( Node . BlendSpace ! = NULL ) ? * ( Node . BlendSpace - > GetPathName ( ) ) : TEXT ( " (None) " ) ) ;
}
2014-04-23 18:30:37 -04:00
FText UAnimGraphNode_BlendSpacePlayer : : GetNodeTitle ( ENodeTitleType : : Type TitleType ) const
2014-03-14 14:13:41 -04:00
{
2014-04-23 18:30:37 -04:00
const FText BlendSpaceName ( ( Node . BlendSpace ! = NULL ) ? FText : : FromString ( Node . BlendSpace - > GetName ( ) ) : LOCTEXT ( " None " , " (None) " ) ) ;
2014-03-14 14:13:41 -04:00
2014-04-23 18:30:37 -04:00
if ( TitleType = = ENodeTitleType : : ListView )
{
FFormatNamedArguments Args ;
Args . Add ( TEXT ( " BlendSpaceName " ) , BlendSpaceName ) ;
return FText : : Format ( LOCTEXT ( " BlendspacePlayer " , " Blendspace Player'{BlendSpaceName}' " ) , Args ) ;
}
else
{
FFormatNamedArguments TitleArgs ;
TitleArgs . Add ( TEXT ( " BlendSpaceName " ) , BlendSpaceName ) ;
FText Title = FText : : Format ( LOCTEXT ( " BlendSpacePlayerFullTitle " , " {BlendSpaceName} \n Blendspace Player " ) , TitleArgs ) ;
if ( ( TitleType = = ENodeTitleType : : FullTitle ) & & ( SyncGroup . GroupName ! = NAME_None ) )
{
FFormatNamedArguments Args ;
Args . Add ( TEXT ( " Title " ) , Title ) ;
Args . Add ( TEXT ( " SyncGroupName " ) , FText : : FromName ( SyncGroup . GroupName ) ) ;
Title = FText : : Format ( LOCTEXT ( " BlendSpaceNodeGroupSubtitle " , " {Title} \n Sync group {SyncGroupName} " ) , Args ) ;
}
return Title ;
}
}
FString UAnimGraphNode_BlendSpacePlayer : : GetNodeNativeTitle ( ENodeTitleType : : Type TitleType ) const
{
// Do not setup this function for localization, intentionally left unlocalized!
const FString BlendSpaceName ( ( Node . BlendSpace ! = NULL ) ? * ( Node . BlendSpace - > GetName ( ) ) : TEXT ( " (None) " ) ) ;
2014-03-14 14:13:41 -04:00
if ( TitleType = = ENodeTitleType : : ListView )
{
return FString : : Printf ( TEXT ( " Blendspace Player'%s' " ) , * BlendSpaceName ) ;
}
else
{
FString Title = FString : : Printf ( TEXT ( " %s \n Blendspace Player " ) , * BlendSpaceName ) ;
if ( ( TitleType = = ENodeTitleType : : FullTitle ) & & ( SyncGroup . GroupName ! = NAME_None ) )
{
Title + = TEXT ( " \n " ) ;
2014-04-23 18:30:37 -04:00
Title + = FString : : Printf ( TEXT ( " Sync group %s " ) , * SyncGroup . GroupName . ToString ( ) ) ;
2014-03-14 14:13:41 -04:00
}
return Title ;
}
}
void UAnimGraphNode_BlendSpacePlayer : : GetMenuEntries ( FGraphContextMenuBuilder & ContextMenuBuilder ) const
{
const bool bWantAimOffsets = false ;
GetBlendSpaceEntries ( bWantAimOffsets , ContextMenuBuilder ) ;
}
void UAnimGraphNode_BlendSpacePlayer : : ValidateAnimNodeDuringCompilation ( class USkeleton * ForSkeleton , class FCompilerResultsLog & MessageLog )
{
if ( Node . BlendSpace = = NULL )
{
MessageLog . Error ( TEXT ( " @@ references an unknown blend space " ) , this ) ;
}
else
{
USkeleton * BlendSpaceSkeleton = Node . BlendSpace - > GetSkeleton ( ) ;
if ( BlendSpaceSkeleton & & // if blend space doesn't have skeleton, it might be due to blend space not loaded yet, @todo: wait with anim blueprint compilation until all assets are loaded?
! BlendSpaceSkeleton - > IsCompatible ( ForSkeleton ) )
{
MessageLog . Error ( TEXT ( " @@ references blendspace that uses different skeleton @@ " ) , this , BlendSpaceSkeleton ) ;
}
}
}
void UAnimGraphNode_BlendSpacePlayer : : BakeDataDuringCompilation ( class FCompilerResultsLog & MessageLog )
{
UAnimBlueprint * AnimBlueprint = GetAnimBlueprint ( ) ;
Node . GroupIndex = AnimBlueprint - > FindOrAddGroup ( SyncGroup . GroupName ) ;
Node . GroupRole = SyncGroup . GroupRole ;
}
void UAnimGraphNode_BlendSpacePlayer : : GetContextMenuActions ( const FGraphNodeContextMenuBuilder & Context ) const
{
if ( ! Context . bIsDebugging )
{
// add an option to convert to single frame
Context . MenuBuilder - > BeginSection ( " AnimGraphNodeBlendSpaceEvaluator " , NSLOCTEXT ( " A3Nodes " , " BlendSpaceHeading " , " Blend Space " ) ) ;
{
Context . MenuBuilder - > AddMenuEntry ( FGraphEditorCommands : : Get ( ) . OpenRelatedAsset ) ;
Context . MenuBuilder - > AddMenuEntry ( FGraphEditorCommands : : Get ( ) . ConvertToBSEvaluator ) ;
}
Context . MenuBuilder - > EndSection ( ) ;
}
}
void UAnimGraphNode_BlendSpacePlayer : : GetAllAnimationSequencesReferred ( TArray < UAnimationAsset * > & ComplexAnims , TArray < UAnimSequence * > & AnimationSequences ) const
{
if ( Node . BlendSpace )
{
HandleAnimReferenceCollection ( Node . BlendSpace , ComplexAnims , AnimationSequences ) ;
}
}
void UAnimGraphNode_BlendSpacePlayer : : ReplaceReferredAnimations ( const TMap < UAnimationAsset * , UAnimationAsset * > & ComplexAnimsMap , const TMap < UAnimSequence * , UAnimSequence * > & AnimSequenceMap )
{
HandleAnimReferenceReplacement ( Node . BlendSpace , ComplexAnimsMap , AnimSequenceMap ) ;
}
bool UAnimGraphNode_BlendSpacePlayer : : DoesSupportTimeForTransitionGetter ( ) const
{
return true ;
}
UAnimationAsset * UAnimGraphNode_BlendSpacePlayer : : GetAnimationAsset ( ) const
{
return Node . BlendSpace ;
}
const TCHAR * UAnimGraphNode_BlendSpacePlayer : : GetTimePropertyName ( ) const
{
return TEXT ( " InternalTimeAccumulator " ) ;
}
UScriptStruct * UAnimGraphNode_BlendSpacePlayer : : GetTimePropertyStruct ( ) const
{
return FAnimNode_BlendSpacePlayer : : StaticStruct ( ) ;
}
2014-04-23 18:30:37 -04:00
# undef LOCTEXT_NAMESPACE