コード例 #1
0
ファイル: AIGraphTypes.cpp プロジェクト: Codermay/Unreal4
void FGraphNodeClassHelper::GatherClasses(const UClass* BaseClass, TArray<FGraphNodeClassData>& AvailableClasses)
{
	const FString BaseClassName = BaseClass->GetName();
	if (!RootNode.IsValid())
	{
		BuildClassGraph();
	}

	TSharedPtr<FGraphNodeClassNode> BaseNode = FindBaseClassNode(RootNode, BaseClassName);
	FindAllSubClasses(BaseNode, AvailableClasses);
}
コード例 #2
0
void FClassBrowseHelper::OnAssetRemoved(const class FAssetData& AssetData)
{
	const FString* GeneratedClassname = AssetData.TagsAndValues.Find("GeneratedClass");
	if (GeneratedClassname)
	{
		FString AssetClassName = *GeneratedClassname;
		UObject* Outer1(NULL);
		ResolveName(Outer1, AssetClassName, false, false);
		
		TSharedPtr<FClassDataNode> Node = FindBaseClassNode(RootNode, AssetClassName);
		if (Node.IsValid() && Node->ParentNode.IsValid())
		{
			Node->ParentNode->SubNodes.RemoveSingleSwap(Node);
		}
	}
}
コード例 #3
0
void FClassBrowseHelper::OnAssetAdded(const class FAssetData& AssetData)
{
	TSharedPtr<FClassDataNode> Node = CreateClassDataNode(AssetData);
	
	TSharedPtr<FClassDataNode> ParentNode;
	if (Node.IsValid())
	{
		ParentNode = FindBaseClassNode(RootNode, Node->ParentClassName);
	}

	if (ParentNode.IsValid())
	{
		ParentNode->SubNodes.Add(Node);
		Node->ParentNode = ParentNode;
	}
}
コード例 #4
0
TSharedPtr<FClassDataNode> FClassBrowseHelper::FindBaseClassNode(TSharedPtr<FClassDataNode> Node, const FString& ClassName)
{
	TSharedPtr<FClassDataNode> RetNode;
	if (Node.IsValid())
	{
		if (Node->Data.GetClassName() == ClassName)
		{
			return Node;
		}

		for (int32 i = 0; i < Node->SubNodes.Num(); i++)
		{
			RetNode = FindBaseClassNode(Node->SubNodes[i], ClassName);
			if (RetNode.IsValid())
			{
				break;
			}
		}
	}

	return RetNode;
}
コード例 #5
0
ファイル: AIGraphTypes.cpp プロジェクト: Codermay/Unreal4
void FGraphNodeClassHelper::OnAssetRemoved(const class FAssetData& AssetData)
{
	const FString* GeneratedClassname = AssetData.TagsAndValues.Find("GeneratedClass");
	if (GeneratedClassname)
	{
		FString AssetClassName = *GeneratedClassname;
		UObject* Outer1(NULL);
		ResolveName(Outer1, AssetClassName, false, false);

		TSharedPtr<FGraphNodeClassNode> Node = FindBaseClassNode(RootNode, AssetClassName);
		if (Node.IsValid() && Node->ParentNode.IsValid())
		{
			Node->ParentNode->SubNodes.RemoveSingleSwap(Node);
		}
	}

	FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked<FAssetRegistryModule>(TEXT("AssetRegistry"));
	if (!AssetRegistryModule.Get().IsLoadingAssets())
	{
		UpdateAvailableBlueprintClasses();
	}
}
コード例 #6
0
ファイル: AIGraphTypes.cpp プロジェクト: Codermay/Unreal4
void FGraphNodeClassHelper::OnAssetAdded(const class FAssetData& AssetData)
{
	TSharedPtr<FGraphNodeClassNode> Node = CreateClassDataNode(AssetData);

	TSharedPtr<FGraphNodeClassNode> ParentNode;
	if (Node.IsValid())
	{
		ParentNode = FindBaseClassNode(RootNode, Node->ParentClassName);

		if (!IsPackageSaved(AssetData.PackageName))
		{
			UnknownPackages.AddUnique(AssetData.PackageName);
		}
		else
		{
			const int32 PrevListCount = UnknownPackages.Num();
			UnknownPackages.RemoveSingleSwap(AssetData.PackageName);

			if (UnknownPackages.Num() != PrevListCount)
			{
				OnPackageListUpdated.Broadcast();
			}
		}
	}

	if (ParentNode.IsValid())
	{
		ParentNode->AddUniqueSubNode(Node);
		Node->ParentNode = ParentNode;
	}

	FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked<FAssetRegistryModule>(TEXT("AssetRegistry"));
	if (!AssetRegistryModule.Get().IsLoadingAssets())
	{
		UpdateAvailableBlueprintClasses();
	}
}