// Copyright 1998-2014 Epic Games, Inc. All Rights Reserved. #include "BlueprintGraphPrivatePCH.h" #include "Engine/ComponentDelegateBinding.h" #define LOCTEXT_NAMESPACE "K2Node" UK2Node_ComponentBoundEvent::UK2Node_ComponentBoundEvent(const class FPostConstructInitializeProperties& PCIP) : Super(PCIP) { } FText UK2Node_ComponentBoundEvent::GetNodeTitle(ENodeTitleType::Type TitleType) const { if (CachedNodeTitle.IsOutOfDate()) { FFormatNamedArguments Args; Args.Add(TEXT("DelegatePropertyName"), FText::FromName(DelegatePropertyName)); Args.Add(TEXT("ComponentPropertyName"), FText::FromName(ComponentPropertyName)); // FText::Format() is slow, so we cache this to save on performance CachedNodeTitle = FText::Format(LOCTEXT("ComponentBoundEvent_Title", "{DelegatePropertyName} ({ComponentPropertyName})"), Args); } return CachedNodeTitle; } void UK2Node_ComponentBoundEvent::InitializeComponentBoundEventParams(UObjectProperty const* InComponentProperty, const UMulticastDelegateProperty* InDelegateProperty) { if( InComponentProperty && InDelegateProperty ) { ComponentPropertyName = InComponentProperty->GetFName(); DelegatePropertyName = InDelegateProperty->GetFName(); EventSignatureName = InDelegateProperty->SignatureFunction->GetFName(); EventSignatureClass = CastChecked(InDelegateProperty->SignatureFunction->GetOuter()); CustomFunctionName = FName( *FString::Printf(TEXT("BndEvt__%s_%s_%s"), *InComponentProperty->GetName(), *GetName(), *EventSignatureName.ToString()) ); bOverrideFunction = false; bInternalEvent = true; CachedNodeTitle.MarkDirty(); } } UClass* UK2Node_ComponentBoundEvent::GetDynamicBindingClass() const { return UComponentDelegateBinding::StaticClass(); } void UK2Node_ComponentBoundEvent::RegisterDynamicBinding(UDynamicBlueprintBinding* BindingObject) const { UComponentDelegateBinding* ComponentBindingObject = CastChecked(BindingObject); FBlueprintComponentDelegateBinding Binding; Binding.ComponentPropertyName = ComponentPropertyName; Binding.DelegatePropertyName = DelegatePropertyName; Binding.FunctionNameToBind = CustomFunctionName; CachedNodeTitle.MarkDirty(); ComponentBindingObject->ComponentDelegateBindings.Add(Binding); } bool UK2Node_ComponentBoundEvent::IsUsedByAuthorityOnlyDelegate() const { UMulticastDelegateProperty* TargetDelegateProp = GetTargetDelegateProperty(); return (TargetDelegateProp && TargetDelegateProp->HasAnyPropertyFlags(CPF_BlueprintAuthorityOnly)); } UMulticastDelegateProperty* UK2Node_ComponentBoundEvent::GetTargetDelegateProperty() const { return Cast(FindField(EventSignatureClass, DelegatePropertyName)); } FText UK2Node_ComponentBoundEvent::GetTooltipText() const { UMulticastDelegateProperty* TargetDelegateProp = GetTargetDelegateProperty(); if (TargetDelegateProp) { return TargetDelegateProp->GetToolTipText(); } else { return FText::FromName(DelegatePropertyName); } } FString UK2Node_ComponentBoundEvent::GetDocumentationLink() const { if (EventSignatureClass) { return FString::Printf(TEXT("Shared/GraphNodes/Blueprint/%s%s"), EventSignatureClass->GetPrefixCPP(), *EventSignatureClass->GetName()); } return FString(); } FString UK2Node_ComponentBoundEvent::GetDocumentationExcerptName() const { return DelegatePropertyName.ToString(); } #undef LOCTEXT_NAMESPACE