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 "BlueprintGraphPrivatePCH.h"
2014-05-29 16:42:22 -04:00
# include "K2Node_GetInputAxisValue.h"
2014-03-14 14:13:41 -04:00
# include "CompilerResultsLog.h"
2014-07-14 13:19:37 -04:00
# include "BlueprintNodeSpawner.h"
# include "EditorCategoryUtils.h"
2014-08-11 03:23:38 -04:00
# include "Engine/InputAxisDelegateBinding.h"
2014-08-21 18:50:33 -04:00
# include "BlueprintEditorUtils.h"
# include "EdGraphSchema_K2.h"
2014-08-23 20:16:29 -04:00
# include "BlueprintActionDatabaseRegistrar.h"
2014-07-14 13:19:37 -04:00
# define LOCTEXT_NAMESPACE "K2Node_GetInputAxisValue"
2014-03-14 14:13:41 -04:00
2014-10-14 10:29:11 -04:00
UK2Node_GetInputAxisValue : : UK2Node_GetInputAxisValue ( const FObjectInitializer & ObjectInitializer )
: Super ( ObjectInitializer )
2014-03-14 14:13:41 -04:00
{
bConsumeInput = true ;
}
void UK2Node_GetInputAxisValue : : AllocateDefaultPins ( )
{
Super : : AllocateDefaultPins ( ) ;
UEdGraphPin * InputAxisNamePin = FindPinChecked ( TEXT ( " InputAxisName " ) ) ;
InputAxisNamePin - > DefaultValue = InputAxisName . ToString ( ) ;
}
void UK2Node_GetInputAxisValue : : Initialize ( const FName AxisName )
{
InputAxisName = AxisName ;
SetFromFunction ( AActor : : StaticClass ( ) - > FindFunctionByName ( TEXT ( " GetInputAxisValue " ) ) ) ;
}
2014-04-23 18:30:37 -04:00
FText UK2Node_GetInputAxisValue : : GetNodeTitle ( ENodeTitleType : : Type TitleType ) const
2014-03-14 14:13:41 -04:00
{
2014-09-16 15:01:38 -04:00
if ( TitleType = = ENodeTitleType : : MenuTitle )
2014-07-14 13:19:37 -04:00
{
2014-09-02 19:08:09 -04:00
return FText : : FromName ( InputAxisName ) ;
}
2015-04-02 11:16:23 -04:00
else if ( CachedNodeTitle . IsOutOfDate ( this ) )
2014-09-02 19:08:09 -04:00
{
FFormatNamedArguments Args ;
Args . Add ( TEXT ( " InputAxisName " ) , FText : : FromName ( InputAxisName ) ) ;
FText LocFormat = NSLOCTEXT ( " K2Node " , " GetInputAxis_Name " , " Get {InputAxisName} " ) ;
// FText::Format() is slow, so we cache this to save on performance
2015-04-02 11:16:23 -04:00
CachedNodeTitle . SetCachedText ( FText : : Format ( LocFormat , Args ) , this ) ;
2014-07-14 13:19:37 -04:00
}
2014-09-02 19:08:09 -04:00
return CachedNodeTitle ;
2014-04-23 18:30:37 -04:00
}
2014-09-03 18:14:09 -04:00
FText UK2Node_GetInputAxisValue : : GetTooltipText ( ) const
2014-03-14 14:13:41 -04:00
{
2015-04-02 11:16:23 -04:00
if ( CachedTooltip . IsOutOfDate ( this ) )
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
CachedTooltip . SetCachedText ( FText : : Format ( NSLOCTEXT ( " K2Node " , " GetInputAxis_Tooltip " , " Returns the current value of input axis {0}. If input is disabled for the actor the value will be 0. " ) , FText : : FromName ( InputAxisName ) ) , this ) ;
2014-09-03 18:17:44 -04:00
}
return CachedTooltip ;
2014-03-14 14:13:41 -04:00
}
2014-08-21 18:50:33 -04:00
bool UK2Node_GetInputAxisValue : : IsCompatibleWithGraph ( UEdGraph const * Graph ) const
{
UBlueprint * Blueprint = FBlueprintEditorUtils : : FindBlueprintForGraph ( Graph ) ;
UEdGraphSchema_K2 const * K2Schema = Cast < UEdGraphSchema_K2 > ( Graph - > GetSchema ( ) ) ;
bool const bIsConstructionScript = ( K2Schema ! = nullptr ) ? K2Schema - > IsConstructionScript ( Graph ) : false ;
return ( Blueprint ! = nullptr ) & & Blueprint - > SupportsInputEvents ( ) & & ! bIsConstructionScript & & Super : : IsCompatibleWithGraph ( Graph ) ;
}
2014-03-14 14:13:41 -04:00
void UK2Node_GetInputAxisValue : : ValidateNodeDuringCompilation ( class FCompilerResultsLog & MessageLog ) const
{
Super : : ValidateNodeDuringCompilation ( MessageLog ) ;
TArray < FName > AxisNames ;
GetDefault < UInputSettings > ( ) - > GetAxisNames ( AxisNames ) ;
if ( ! AxisNames . Contains ( InputAxisName ) )
{
MessageLog . Warning ( * FString : : Printf ( * NSLOCTEXT ( " KismetCompiler " , " MissingInputAxis_Warning " , " Get Input Axis references unknown Axis '%s' for @@ " ) . ToString ( ) , * InputAxisName . ToString ( ) ) , this ) ;
}
}
UClass * UK2Node_GetInputAxisValue : : GetDynamicBindingClass ( ) const
{
return UInputAxisDelegateBinding : : StaticClass ( ) ;
}
void UK2Node_GetInputAxisValue : : RegisterDynamicBinding ( UDynamicBlueprintBinding * BindingObject ) const
{
UInputAxisDelegateBinding * InputAxisBindingObject = CastChecked < UInputAxisDelegateBinding > ( BindingObject ) ;
FBlueprintInputAxisDelegateBinding Binding ;
Binding . InputAxisName = InputAxisName ;
Binding . bConsumeInput = bConsumeInput ;
Binding . bExecuteWhenPaused = bExecuteWhenPaused ;
InputAxisBindingObject - > InputAxisDelegateBindings . Add ( Binding ) ;
}
2014-07-14 13:19:37 -04:00
2014-08-23 20:16:29 -04:00
void UK2Node_GetInputAxisValue : : GetMenuActions ( FBlueprintActionDatabaseRegistrar & ActionRegistrar ) const
2014-07-14 13:19:37 -04:00
{
TArray < FName > AxisNames ;
GetDefault < UInputSettings > ( ) - > GetAxisNames ( AxisNames ) ;
2014-09-10 17:09:26 -04:00
auto CustomizeInputNodeLambda = [ ] ( UEdGraphNode * NewNode , bool bIsTemplateNode , FName AxisName )
{
UK2Node_GetInputAxisValue * InputNode = CastChecked < UK2Node_GetInputAxisValue > ( NewNode ) ;
InputNode - > Initialize ( AxisName ) ;
} ;
2014-09-17 17:07:37 -04:00
// actions get registered under specific object-keys; the idea is that
// actions might have to be updated (or deleted) if their object-key is
// mutated (or removed)... here we use the node's class (so if the node
// type disappears, then the action should go with it)
UClass * ActionKey = GetClass ( ) ;
2014-10-28 10:27:21 -04:00
// to keep from needlessly instantiating a UBlueprintNodeSpawner, first
// check to make sure that the registrar is looking for actions of this type
// (could be regenerating actions for a specific asset, and therefore the
// registrar would only accept actions corresponding to that asset)
if ( ActionRegistrar . IsOpenForRegistration ( ActionKey ) )
2014-07-14 13:19:37 -04:00
{
2014-10-28 10:27:21 -04:00
auto RefreshClassActions = [ ] ( )
2014-09-10 17:09:26 -04:00
{
2014-10-28 10:27:21 -04:00
FBlueprintActionDatabase : : Get ( ) . RefreshClassActions ( StaticClass ( ) ) ;
} ;
static bool bRegisterOnce = true ;
if ( bRegisterOnce )
{
bRegisterOnce = false ;
FEditorDelegates : : OnActionAxisMappingsChanged . AddStatic ( RefreshClassActions ) ;
2014-09-10 17:09:26 -04:00
}
2015-03-03 17:20:43 -05:00
for ( FName const AxisName : AxisNames )
2014-10-28 10:27:21 -04:00
{
UBlueprintNodeSpawner * NodeSpawner = UBlueprintNodeSpawner : : Create ( GetClass ( ) ) ;
check ( NodeSpawner ! = nullptr ) ;
2014-07-14 13:19:37 -04:00
2015-03-03 17:20:43 -05:00
NodeSpawner - > CustomizeNodeDelegate = UBlueprintNodeSpawner : : FCustomizeNodeDelegate : : CreateStatic ( CustomizeInputNodeLambda , AxisName ) ;
2014-10-28 10:27:21 -04:00
ActionRegistrar . AddBlueprintAction ( ActionKey , NodeSpawner ) ;
}
2014-07-14 13:19:37 -04:00
}
}
FText UK2Node_GetInputAxisValue : : GetMenuCategory ( ) const
{
2014-09-04 13:00:27 -04:00
static FNodeTextCache CachedCategory ;
2015-04-02 11:16:23 -04:00
if ( CachedCategory . IsOutOfDate ( this ) )
2014-09-04 13:00:27 -04:00
{
// FText::Format() is slow, so we cache this to save on performance
2015-04-02 11:16:23 -04:00
CachedCategory . SetCachedText ( FEditorCategoryUtils : : BuildCategoryString ( FCommonEditorCategory : : Input , LOCTEXT ( " ActionMenuCategory " , " Axis Values " ) ) , this ) ;
2014-09-04 13:00:27 -04:00
}
return CachedCategory ;
2014-07-14 13:19:37 -04:00
}
2014-09-17 17:07:37 -04:00
FBlueprintNodeSignature UK2Node_GetInputAxisValue : : GetSignature ( ) const
{
FBlueprintNodeSignature NodeSignature = Super : : GetSignature ( ) ;
NodeSignature . AddKeyValue ( InputAxisName . ToString ( ) ) ;
return NodeSignature ;
}
2014-07-14 13:19:37 -04:00
# undef LOCTEXT_NAMESPACE