2014-12-07 19:09:38 -05:00
// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.
2014-03-14 14:13:41 -04:00
# include "AnimGraphPrivatePCH.h"
# include "GraphEditorActions.h"
# include "CompilerResultsLog.h"
# include "AnimGraphNode_BlendSpaceEvaluator.h"
/////////////////////////////////////////////////////
// UAnimGraphNode_BlendSpaceEvaluator
2014-04-23 18:30:37 -04:00
# define LOCTEXT_NAMESPACE "A3Nodes"
2014-10-14 10:29:11 -04:00
UAnimGraphNode_BlendSpaceEvaluator : : UAnimGraphNode_BlendSpaceEvaluator ( const FObjectInitializer & ObjectInitializer )
: Super ( ObjectInitializer )
2014-03-14 14:13:41 -04:00
{
}
2014-09-03 18:14:09 -04:00
FText UAnimGraphNode_BlendSpaceEvaluator : : 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_BlendSpaceEvaluator : : GetNodeTitle ( ENodeTitleType : : Type TitleType ) const
2014-03-14 14:13:41 -04:00
{
2014-09-03 18:17:44 -04:00
if ( Node . BlendSpace = = nullptr )
2014-04-23 18:30:37 -04:00
{
2014-09-16 15:01:38 -04:00
if ( TitleType = = ENodeTitleType : : ListView | | TitleType = = ENodeTitleType : : MenuTitle )
2014-09-03 18:17:44 -04:00
{
return LOCTEXT ( " BlendSpaceEvaluator_NONE_ListTitle " , " Blendspace Evaluator '(None) ' " ) ;
}
else
{
return LOCTEXT ( " BlendSpaceEvaluator_NONE_Title " , " (None) \ nBlendspace Evaluator " ) ;
}
2014-04-23 18:30:37 -04:00
}
2014-09-24 14:15:13 -04:00
// @TODO: the bone can be altered in the property editor, so we have to
// choose to mark this dirty when that happens for this to properly work
2015-04-02 11:16:23 -04:00
else //if (!CachedNodeTitles.IsTitleCached(TitleType, this))
2014-04-23 18:30:37 -04:00
{
2014-09-03 18:17:44 -04:00
const FText BlendSpaceName = FText : : FromString ( Node . BlendSpace - > GetName ( ) ) ;
2014-04-23 18:30:37 -04:00
2014-09-16 15:01:38 -04:00
if ( TitleType = = ENodeTitleType : : ListView | | TitleType = = ENodeTitleType : : MenuTitle )
2014-04-23 18:30:37 -04:00
{
FFormatNamedArguments Args ;
2014-09-03 18:17:44 -04:00
Args . Add ( TEXT ( " BlendSpaceName " ) , BlendSpaceName ) ;
2014-04-23 18:30:37 -04:00
2014-09-03 18:17:44 -04:00
// FText::Format() is slow, so we cache this to save on performance
2015-04-02 11:16:23 -04:00
CachedNodeTitles . SetCachedTitle ( TitleType , FText : : Format ( LOCTEXT ( " BlendSpaceEvaluatorListTitle " , " Blendspace Evaluator '{BlendSpaceName}' " ) , Args ) , this ) ;
2014-09-03 18:17:44 -04:00
}
else
{
FFormatNamedArguments TitleArgs ;
TitleArgs . Add ( TEXT ( " BlendSpaceName " ) , BlendSpaceName ) ;
FText Title = FText : : Format ( LOCTEXT ( " BlendSpaceEvaluatorFullTitle " , " {BlendSpaceName} \n Blendspace Evaluator " ) , 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 ) ;
}
// FText::Format() is slow, so we cache this to save on performance
2015-04-02 11:16:23 -04:00
CachedNodeTitles . SetCachedTitle ( TitleType , Title , this ) ;
2014-09-03 18:17:44 -04:00
}
2014-04-23 18:30:37 -04:00
}
2014-09-03 18:17:44 -04:00
return CachedNodeTitles [ TitleType ] ;
2014-04-23 18:30:37 -04:00
}
2014-08-23 20:16:29 -04:00
void UAnimGraphNode_BlendSpaceEvaluator : : GetMenuActions ( FBlueprintActionDatabaseRegistrar & ActionRegistrar ) const
2014-08-21 18:50:33 -04:00
{
// Intentionally empty so that we don't get duplicate blend space entries.
// You can convert a regular blend space player to an evaluator via the right click context menu
2014-03-14 14:13:41 -04:00
}
void UAnimGraphNode_BlendSpaceEvaluator : : ValidateAnimNodeDuringCompilation ( class USkeleton * ForSkeleton , class FCompilerResultsLog & MessageLog )
{
if ( Node . BlendSpace = = NULL )
{
MessageLog . Error ( TEXT ( " @@ references an unknown blend space " ) , this ) ;
}
else
{
2014-10-01 14:45:23 -04:00
USkeleton * BlendSpaceSkeleton = Node . BlendSpace - > GetSkeleton ( ) ;
2014-03-14 14:13:41 -04:00
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_BlendSpaceEvaluator : : BakeDataDuringCompilation ( class FCompilerResultsLog & MessageLog )
{
UAnimBlueprint * AnimBlueprint = GetAnimBlueprint ( ) ;
Node . GroupIndex = AnimBlueprint - > FindOrAddGroup ( SyncGroup . GroupName ) ;
Node . GroupRole = SyncGroup . GroupRole ;
}
void UAnimGraphNode_BlendSpaceEvaluator : : GetContextMenuActions ( const FGraphNodeContextMenuBuilder & Context ) const
{
if ( ! Context . bIsDebugging )
{
// add an option to convert to single frame
Context . MenuBuilder - > BeginSection ( " AnimGraphNodeBlendSpacePlayer " , NSLOCTEXT ( " A3Nodes " , " BlendSpaceHeading " , " Blend Space " ) ) ;
{
Context . MenuBuilder - > AddMenuEntry ( FGraphEditorCommands : : Get ( ) . OpenRelatedAsset ) ;
Context . MenuBuilder - > AddMenuEntry ( FGraphEditorCommands : : Get ( ) . ConvertToBSPlayer ) ;
}
Context . MenuBuilder - > EndSection ( ) ;
}
}
bool UAnimGraphNode_BlendSpaceEvaluator : : DoesSupportTimeForTransitionGetter ( ) const
{
return true ;
}
UAnimationAsset * UAnimGraphNode_BlendSpaceEvaluator : : GetAnimationAsset ( ) const
{
return Node . BlendSpace ;
}
const TCHAR * UAnimGraphNode_BlendSpaceEvaluator : : GetTimePropertyName ( ) const
{
return TEXT ( " InternalTimeAccumulator " ) ;
}
UScriptStruct * UAnimGraphNode_BlendSpaceEvaluator : : GetTimePropertyStruct ( ) const
{
return FAnimNode_BlendSpaceEvaluator : : StaticStruct ( ) ;
2014-04-23 18:30:37 -04:00
}
# undef LOCTEXT_NAMESPACE