You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
Merged manually: //UE4/Dev-Framework/Engine/Source/Editor/BlueprintGraph/Classes/K2Node_GetClassDefaults.h //UE4/Dev-Framework/Engine/Source/Editor/BlueprintGraph/Private/K2Node_GetClassDefaults.cpp //UE4/Dev-Framework/Engine/Source/Programs/NotForLicensees/Solaris/uLangServer/uLangServer.Target.cs //UE4/Dev-Framework/Engine/Source/Runtime/Analytics/QoSReporter/Private/NotForLicensees/QoSReporterConfiguration.cpp //UE4/Dev-Framework/Engine/Source/Runtime/Analytics/QoSReporter/Private/QoSReporter.cpp //UE4/Dev-Framework/Engine/Source/Runtime/Analytics/QoSReporter/Private/QoSReporterModule.cpp //UE4/Dev-Framework/Engine/Source/Runtime/Analytics/QoSReporter/Private/QoSReporterPrivate.h //UE4/Dev-Framework/Engine/Source/Runtime/Analytics/QoSReporter/Public/QoSReporter.h //UE4/Dev-Framework/Engine/Source/Runtime/Analytics/QoSReporter/QoSReporter.Build.cs Merged manually accepted source: //UE4/Dev-Framework/FortniteGame/Content/Animation/Marketing/Poses/Pose_Library/HolidayPJ/HolidayPJB_Female_H.uasset //UE4/Dev-Framework/FortniteGame/Content/Athena/Apollo/Maps/Buildings/5x5/HLOD/Apollo_5x5_LogPyramid_0_HLOD.uasset //UE4/Dev-Framework/FortniteGame/Content/Athena/Apollo/Maps/Streaming/HLOD/Apollo_Terrain_Sub_A6_0_HLOD.uasset //UE4/Dev-Framework/FortniteGame/Content/Athena/Apollo/Maps/Streaming/HLOD/Apollo_Terrain_Sub_B1_0_HLOD.uasset //UE4/Dev-Framework/FortniteGame/Content/Athena/Apollo/Maps/Streaming/HLOD/Apollo_Terrain_Sub_E1_0_HLOD.uasset //UE4/Dev-Framework/FortniteGame/Content/Athena/Apollo/Maps/Streaming/HLOD/Apollo_Terrain_Sub_F8_0_HLOD.uasset //UE4/Dev-Framework/FortniteGame/Content/Athena/Apollo/Maps/Streaming/HLOD/Apollo_Terrain_Sub_G1_0_HLOD.uasset //UE4/Dev-Framework/FortniteGame/Content/Athena/Apollo/Maps/Streaming/HLOD/Apollo_Terrain_Sub_G7_0_HLOD.uasset //UE4/Dev-Framework/FortniteGame/Content/Athena/Apollo/Maps/Streaming/HLOD/Apollo_Terrain_Sub_G8_0_HLOD.uasset //UE4/Dev-Framework/FortniteGame/Content/Athena/Apollo/Maps/Streaming/HLOD/Apollo_Terrain_Sub_H4_0_HLOD.uasset //UE4/Dev-Framework/FortniteGame/Content/Athena/Apollo/Maps/Streaming/HLOD/Apollo_Terrain_Sub_H5_0_HLOD.uasset //UE4/Dev-Framework/FortniteGame/Content/Athena/Apollo/Maps/Streaming/HLOD/Apollo_Terrain_Sub_H6_0_HLOD.uasset //UE4/Dev-Framework/FortniteGame/Content/Athena/Apollo/Maps/Streaming/HLOD/Apollo_Terrain_Sub_H8_0_HLOD.uasset //UE4/Dev-Framework/FortniteGame/Content/Athena/Items/EnvironmentalItems/PinkOatmeal/PinkOatmeal_Sepia.uasset //UE4/Dev-Framework/FortniteGame/Content/Athena/Items/Weapons/WID_Harvest_Pickaxe_GalileoFerry1H.uasset //UE4/Dev-Framework/FortniteGame/Content/Athena/Playlists/ContextTutorial/Mutator/ContextualTutorial_NearChestMobile.uasset //UE4/Dev-Framework/FortniteGame/Content/Athena/Sounds/Weapons/PickAxes/PickAxe_Anchor_Ready_Athena_Cue.uasset //UE4/Dev-Framework/FortniteGame/Content/Athena/Sounds/Weapons/PickAxes/PickAxe_Heart_Ready_Athena_Cue.uasset //UE4/Dev-Framework/FortniteGame/Content/Athena/Sounds/Weapons/PickAxes/PickAxe_Jaws_Ready_Athena_Cue.uasset //UE4/Dev-Framework/FortniteGame/Content/Athena/Sounds/Weapons/PickAxes/PickAxe_Keg_Ready_Athena_Cue.uasset //UE4/Dev-Framework/FortniteGame/Content/Athena/Sounds/Weapons/PickAxes/PickAxe_Megalodon_Ready_Athena_Cue.uasset //UE4/Dev-Framework/FortniteGame/Content/Athena/Sounds/Weapons/PickAxes/PickAxe_Pizza_Ready_Athena_Cue.uasset //UE4/Dev-Framework/FortniteGame/Content/Athena/Sounds/Weapons/PickAxes/PickAxe_SkiBoot_Ready_Athena_Cue.uasset //UE4/Dev-Framework/FortniteGame/Content/Athena/Sounds/Weapons/PickAxes/SharpDresser/PA_SharpDresser_Ready_Cue.uasset //UE4/Dev-Framework/FortniteGame/Content/Characters/Player/Male/Medium/Bodies/M_MED_GuanYuDragon/Meshes/M_MED_Guan_Yu_Dragon_AnimBP.uasset //UE4/Dev-Framework/FortniteGame/Content/Characters/Player/Male/Medium/Bodies/M_MED_Ornament_Soldier/Textures/T_M_MED_Ornament_Soldier_Body_N.uasset //UE4/Dev-Framework/FortniteGame/Content/Creative/Materials/M_Creative_4Layers_Inst.uasset //UE4/Dev-Framework/FortniteGame/Content/Heroes/Commando/CosmeticCharacterItemDefinitions/CID_Commando_034_ToyTInkerer.uasset //UE4/Dev-Framework/FortniteGame/Content/UI/Login/SubGameSelect/SubgameSelectScreen.uasset //UE4/Dev-Framework/FortniteGame/Documents/VO_Script/Hero VO Master.xlsx //UE4/Dev-Framework/FortniteGame/Documents/VO_Script/STW Questline VO - MASTER SCRIPT.xlsx //UE4/Dev-Framework/FortniteGame/Test/Screenshots/CosmeticTests/AthenaBackpack_bid_059_wwiipilot_epic/Windows/D3D11_SM5/dc0f63bd65ec455ecd43795cf3f3059a.json //UE4/Dev-Framework/FortniteGame/Test/Screenshots/CosmeticTests/AthenaBackpack_bid_059_wwiipilot_epic/Windows/D3D11_SM5/dc0f63bd65ec455ecd43795cf3f3059a.png //UE4/Dev-Framework/FortniteGame/Test/Screenshots/CosmeticTests/AthenaBackpack_bid_081_scubamale_epic/Windows/D3D11_SM5/dc0f63bd65ec455ecd43795cf3f3059a.json //UE4/Dev-Framework/FortniteGame/Test/Screenshots/CosmeticTests/AthenaBackpack_bid_081_scubamale_epic/Windows/D3D11_SM5/dc0f63bd65ec455ecd43795cf3f3059a.png //UE4/Dev-Framework/FortniteGame/Test/Screenshots/CosmeticTests/AthenaBackpack_bid_223_orangecamo_epic/Windows/D3D11_SM5/dc0f63bd65ec455ecd43795cf3f3059a.json //UE4/Dev-Framework/FortniteGame/Test/Screenshots/CosmeticTests/AthenaBackpack_bid_223_orangecamo_epic/Windows/D3D11_SM5/dc0f63bd65ec455ecd43795cf3f3059a.png //UE4/Dev-Framework/FortniteGame/Test/Screenshots/CosmeticTests/AthenaBackpack_bid_330_astronautevilupgrade_epic/Windows/D3D11_SM5/dc0f63bd65ec455ecd43795cf3f3059a.json //UE4/Dev-Framework/FortniteGame/Test/Screenshots/CosmeticTests/AthenaBackpack_bid_330_astronautevilupgrade_epic/Windows/D3D11_SM5/dc0f63bd65ec455ecd43795cf3f3059a.png //UE4/Dev-Framework/Samples/Showcases/ArchVisRT/Content/Materials/TileMirrorAxis.uasset //UE4/Dev-Framework/Samples/Showcases/ArchVisRT/Content/Materials/UVEdit.uasset //UE4/Dev-Framework/Samples/Showcases/ArchVisRT/Content/Materials/wall3.uasset //UE4/Dev-Framework/Samples/Showcases/ArchVisRT/Content/textures/carpet_ao_rough_metal.uasset //UE4/Dev-Framework/Samples/Showcases/ArchVisRT/Content/textures/carpetdiff.uasset //UE4/Dev-Framework/Samples/Showcases/ArchVisRT/Content/textures/carpetnorm.uasset Merged automatically: //UE4/Dev-Framework/Engine/Plugins/NotForLicensees/CommonUI/Source/CommonUI/Public/CommonNumericTextBlock.h //UE4/Dev-Framework/Engine/Plugins/Runtime/GameplayAbilities/Source/GameplayAbilities/Private/AbilitySystemComponent.cpp //UE4/Dev-Framework/Engine/Plugins/Runtime/GameplayAbilities/Source/GameplayAbilities/Private/AbilitySystemComponent_Abilities.cpp //UE4/Dev-Framework/Engine/Plugins/Runtime/GameplayAbilities/Source/GameplayAbilities/Private/GameplayEffectTypes.cpp //UE4/Dev-Framework/Engine/Plugins/Runtime/GameplayAbilities/Source/GameplayAbilities/Public/AbilitySystemComponent.h //UE4/Dev-Framework/Engine/Plugins/Runtime/GameplayAbilities/Source/GameplayAbilities/Public/GameplayAbilitySpec.h //UE4/Dev-Framework/Engine/Plugins/Runtime/GameplayAbilities/Source/GameplayAbilities/Public/GameplayEffectTypes.h //UE4/Dev-Framework/Engine/Source/Developer/BlueprintNativeCodeGen/Private/NativeCodeGenerationTool.cpp //UE4/Dev-Framework/Engine/Source/Editor/Kismet/Private/BlueprintEditor.cpp //UE4/Dev-Framework/Engine/Source/Editor/Kismet/Private/WorkflowOrientedApp/WorkflowTabManager.cpp //UE4/Dev-Framework/Engine/Source/Editor/Kismet/Public/WorkflowOrientedApp/WorkflowTabManager.h //UE4/Dev-Framework/Engine/Source/Editor/UnrealEd/Private/PlayLevel.cpp //UE4/Dev-Framework/Engine/Source/Runtime/AIModule/Classes/BehaviorTree/Decorators/BTDecorator_BlueprintBase.h //UE4/Dev-Framework/Engine/Source/Runtime/AIModule/Classes/BehaviorTree/Services/BTService_BlueprintBase.h //UE4/Dev-Framework/Engine/Source/Runtime/AIModule/Classes/BehaviorTree/Tasks/BTTask_BlueprintBase.h //UE4/Dev-Framework/Engine/Source/Runtime/AIModule/Classes/Blueprint/AIBlueprintHelperLibrary.h //UE4/Dev-Framework/Engine/Source/Runtime/AIModule/Classes/EnvironmentQuery/EnvQueryInstanceBlueprintWrapper.h //UE4/Dev-Framework/Engine/Source/Runtime/AIModule/Private/BehaviorTree/Decorators/BTDecorator_BlueprintBase.cpp //UE4/Dev-Framework/Engine/Source/Runtime/AIModule/Private/BehaviorTree/Services/BTService_BlueprintBase.cpp //UE4/Dev-Framework/Engine/Source/Runtime/AIModule/Private/BehaviorTree/Tasks/BTTask_BlueprintBase.cpp //UE4/Dev-Framework/Engine/Source/Runtime/AIModule/Private/Blueprint/AIBlueprintHelperLibrary.cpp //UE4/Dev-Framework/Engine/Source/Runtime/AIModule/Private/Navigation/PathFollowingComponent.cpp //UE4/Dev-Framework/Engine/Source/Runtime/CoreUObject/Public/UObject/ObjectMacros.h //UE4/Dev-Framework/Engine/Source/Runtime/Engine/Private/AI/Navigation/NavigationTypes.cpp //UE4/Dev-Framework/Engine/Source/Runtime/Engine/Private/KismetSystemLibrary.cpp //UE4/Dev-Framework/Engine/Source/Runtime/NavigationSystem/Private/NavFilters/NavigationQueryFilter.cpp //UE4/Dev-Framework/Engine/Source/Runtime/NavigationSystem/Private/NavMesh/NavMeshRenderingComponent.cpp //UE4/Dev-Framework/Engine/Source/Runtime/NavigationSystem/Private/NavMesh/RecastNavMesh.cpp //UE4/Dev-Framework/Engine/Source/Runtime/Slate/Private/Framework/MultiBox/MultiBoxBuilder.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteEditor/Private/FortBuildingInstructionsCommandlet.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/AI/FortAIController.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/AI/FortAthenaAIBotController.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/AI/FortBT/FortBTDecorator_IsTakerAirborne.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/AI/FortEQS/FortQueryGenerator_InfluenceMapPoints.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/AI/FortEQS/FortQueryGenerator_PointsFromNavGraph.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/AI/FortEnemySpawn.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/AI/FortNavSystem.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/AI/FortPathFollowingComponent.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/AI/FortPathFollowingComponentBase.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/AI/HotSpots/FortAIHotSpotSlotGenerator_OnBoundingBox.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/AI/HotSpots/FortAIHotSpot_Building.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/AI/MissionBots/FortBotStructureBuilder.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/AI/NavUtils/NavGraphCellUtils.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/AI/NavUtils/NavLinkProcessor.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/AI/Tasks/FortAITask_Move.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/Abilities/FortGameplayAbility_AIPortal.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/Analytics/FortAnalytics.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/Analytics/FortBlueprintAnalytics.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/Athena/FortAthenaZipline.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/Athena/FortClientBotManagerAthena.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/Athena/FortGameModeAthena.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/Athena/FortPlayerControllerAthena.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/Building/AthenaLayoutRequirementData.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/Building/BuildingActor.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/Building/BuildingAutoNav.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/Building/BuildingContainer.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/Building/BuildingCorner.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/Building/BuildingDeco.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/Building/BuildingFloor.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/Building/BuildingFoundation.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/Building/BuildingPlayerPrimitivePreview.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/Building/BuildingProp.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/Building/BuildingRift.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/Building/BuildingRoof.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/Building/BuildingSMActor.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/Building/BuildingStairs.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/Building/BuildingTrap.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/Building/BuildingWall.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/Building/DeployableBasePlot.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/Building/DynamicBuildings/FortDynamicBuilder.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/Building/EditMode/BuildingEditModeSupport.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/Building/FortVolume.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/Building/StructuralSupport/BuildingStructuralSupportSystem.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/ClientPilot/FortClientPilot_GameplayBase.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/Components/FortControllerComponent_Interaction.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/Curie/Managers/FortCurieFirePropagationManager.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/Curie/Managers/FortCurieSpatialManager.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/Environment/FortProceduralFoliageComponent.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/FortClientBotManager.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/FortGameMode.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/FortGameStateZone.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/Input/FortPlayerInput.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/LevelRecordSpawner.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/LevelSaveRecord.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/Modifiers/FortGameplayMutator_DestroyMapActors.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/NoRedist/ML/FortDetectionML_BuildingMacro.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/Objectives/FortPlacementActor.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/Pawns/FortAIPawn.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/Pawns/FortPawn_Taker.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/Player/FortPlayerController.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/Replay/Automation/Pegasus/PegasusGameEventCollector.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/STW/FortConstructorBASE.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/Track/FortTrack.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/UI/FortUIZone.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/Weapons/FortDecoTool.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/Weapons/FortProjectileDecoHelper.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/Weapons/FortWeap_BuildingTool.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Private/Weapons/FortWeap_BuildingToolBase.cpp //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Public/Building/BuildingActor.h //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Public/Building/BuildingAutoNav.h //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Public/Building/BuildingPlayerPrimitivePreview.h //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Public/Building/BuildingProp.h //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Public/Building/BuildingTrap.h //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Public/Building/BuildingWall.h //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Public/FortAssets.h //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Public/Player/FortPlayerController.h //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Public/STW/FortConstructorBASE.h //UE4/Dev-Framework/FortniteGame/Source/FortniteGame/Public/Track/FortTrack.h All other files merged 'safely' #rb none [CL 10934998 by Dan Oconnor in Dev-Framework branch]
386 lines
11 KiB
C++
386 lines
11 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#include "NativeCodeGenerationTool.h"
|
|
#include "Input/Reply.h"
|
|
#include "Misc/Paths.h"
|
|
#include "Widgets/DeclarativeSyntaxSupport.h"
|
|
#include "Widgets/SCompoundWidget.h"
|
|
#include "Widgets/SBoxPanel.h"
|
|
#include "Widgets/SWindow.h"
|
|
#include "Widgets/Text/STextBlock.h"
|
|
#include "Engine/BlueprintGeneratedClass.h"
|
|
#include "Engine/UserDefinedEnum.h"
|
|
#include "Engine/UserDefinedStruct.h"
|
|
#include "Editor.h"
|
|
#include "Widgets/Layout/SBorder.h"
|
|
#include "HAL/FileManager.h"
|
|
#include "Misc/FileHelper.h"
|
|
#include "Misc/ScopedSlowTask.h"
|
|
#include "Misc/App.h"
|
|
#include "Modules/ModuleManager.h"
|
|
#include "Widgets/Layout/SBox.h"
|
|
#include "Widgets/Input/SMultiLineEditableTextBox.h"
|
|
#include "Widgets/Input/SButton.h"
|
|
#include "Widgets/Notifications/SErrorText.h"
|
|
#include "EditorStyleSet.h"
|
|
#include "SourceCodeNavigation.h"
|
|
#include "DesktopPlatformModule.h"
|
|
#include "IBlueprintCompilerCppBackendModule.h"
|
|
#include "BlueprintNativeCodeGenUtils.h"
|
|
//#include "Editor/KismetCompiler/Public/BlueprintCompilerCppBackendInterface.h"
|
|
#include "BlueprintCompilerCppBackendGatherDependencies.h"
|
|
#include "KismetCompilerModule.h"
|
|
#include "Widgets/Input/SDirectoryPicker.h"
|
|
#include "SourceCodeNavigation.h"
|
|
|
|
#define LOCTEXT_NAMESPACE "NativeCodeGenerationTool"
|
|
|
|
//
|
|
// THE CODE SHOULD BE MOVED TO GAMEPROJECTGENERATION
|
|
//
|
|
|
|
|
|
struct FGeneratedCodeData
|
|
{
|
|
FGeneratedCodeData(UBlueprint& InBlueprint)
|
|
: Blueprint(&InBlueprint)
|
|
{
|
|
FName GeneratedClassName, SkeletonClassName;
|
|
InBlueprint.GetBlueprintClassNames(GeneratedClassName, SkeletonClassName);
|
|
ClassName = GeneratedClassName.ToString();
|
|
|
|
IBlueprintCompilerCppBackendModule& CodeGenBackend = (IBlueprintCompilerCppBackendModule&)IBlueprintCompilerCppBackendModule::Get();
|
|
BaseFilename = CodeGenBackend.ConstructBaseFilename(&InBlueprint, FCompilerNativizationOptions{});
|
|
|
|
GatherUserDefinedDependencies(InBlueprint);
|
|
}
|
|
|
|
FString TypeDependencies;
|
|
FString ErrorString;
|
|
FString ClassName;
|
|
FString BaseFilename;
|
|
TWeakObjectPtr<UBlueprint> Blueprint;
|
|
TSet<UField*> DependentObjects;
|
|
TSet<UBlueprintGeneratedClass*> UnconvertedNeededClasses;
|
|
|
|
void GatherUserDefinedDependencies(UBlueprint& InBlueprint)
|
|
{
|
|
FCompilerNativizationOptions BlankOptions{};
|
|
TSharedPtr<FGatherConvertedClassDependencies> ClassDependencies = FGatherConvertedClassDependencies::Get(InBlueprint.GeneratedClass, BlankOptions);
|
|
for (auto Iter : ClassDependencies->ConvertedClasses)
|
|
{
|
|
DependentObjects.Add(Iter);
|
|
}
|
|
for (auto Iter : ClassDependencies->ConvertedStructs)
|
|
{
|
|
DependentObjects.Add(Iter);
|
|
}
|
|
for (auto Iter : ClassDependencies->ConvertedEnum)
|
|
{
|
|
DependentObjects.Add(Iter);
|
|
}
|
|
|
|
if (DependentObjects.Num())
|
|
{
|
|
TypeDependencies = LOCTEXT("ConvertedDependencies", "Detected Dependencies:\n").ToString();
|
|
}
|
|
else
|
|
{
|
|
TypeDependencies = LOCTEXT("NoConvertedAssets", "No dependencies found.\n").ToString();
|
|
}
|
|
|
|
for (auto Obj : DependentObjects)
|
|
{
|
|
TypeDependencies += FString::Printf(TEXT("%s \t%s\n"), *Obj->GetClass()->GetName(), *Obj->GetPathName());
|
|
}
|
|
DependentObjects.Add(InBlueprint.GeneratedClass);
|
|
|
|
bool bUnconvertedHeader = false;
|
|
for (auto Asset : ClassDependencies->Assets)
|
|
{
|
|
if (auto BPGC = Cast<UBlueprintGeneratedClass>(Asset))
|
|
{
|
|
UnconvertedNeededClasses.Add(BPGC);
|
|
if (!bUnconvertedHeader)
|
|
{
|
|
bUnconvertedHeader = true;
|
|
TypeDependencies += LOCTEXT("NoConvertedDependencies", "\nUnconverted Dependencies, that require a warpper struct:\n").ToString();
|
|
}
|
|
TypeDependencies += FString::Printf(TEXT("%s \t%s\n"), *BPGC->GetClass()->GetName(), *BPGC->GetPathName());
|
|
}
|
|
}
|
|
}
|
|
|
|
static FString DefaultHeaderDir()
|
|
{
|
|
auto DefaultSourceDir = FPaths::ConvertRelativePathToFull(FPaths::ProjectIntermediateDir());
|
|
return FPaths::Combine(*DefaultSourceDir, TEXT("NativizationTest"), TEXT("Public"));
|
|
}
|
|
|
|
static FString DefaultSourceDir()
|
|
{
|
|
auto DefaultSourceDir = FPaths::ConvertRelativePathToFull(FPaths::ProjectIntermediateDir());
|
|
return FPaths::Combine(*DefaultSourceDir, TEXT("NativizationTest"), TEXT("Private"));
|
|
}
|
|
|
|
FString HeaderFileName() const
|
|
{
|
|
return BaseFilename + TEXT(".h");
|
|
}
|
|
|
|
FString SourceFileName() const
|
|
{
|
|
return BaseFilename + TEXT(".cpp");
|
|
}
|
|
|
|
bool Save(const FString& HeaderDirPath, const FString& CppDirPath)
|
|
{
|
|
if (!Blueprint.IsValid())
|
|
{
|
|
ErrorString += LOCTEXT("InvalidBlueprint", "Invalid Blueprint\n").ToString();
|
|
return false;
|
|
}
|
|
|
|
const int WorkParts = 3 +(4 * DependentObjects.Num());
|
|
FScopedSlowTask SlowTask(WorkParts, LOCTEXT("GeneratingCppFiles", "Generating C++ files.."));
|
|
SlowTask.MakeDialog();
|
|
|
|
IBlueprintCompilerCppBackendModule& CodeGenBackend = (IBlueprintCompilerCppBackendModule&)IBlueprintCompilerCppBackendModule::Get();
|
|
|
|
TArray<FString> CreatedFiles;
|
|
//for(auto Obj : DependentObjects)
|
|
UObject* Obj = Blueprint->GeneratedClass;
|
|
{
|
|
SlowTask.EnterProgressFrame();
|
|
|
|
TSharedPtr<FString> HeaderSource(new FString());
|
|
TSharedPtr<FString> CppSource(new FString());
|
|
TSharedPtr<FNativizationSummary> NativizationSummary(new FNativizationSummary());
|
|
FBlueprintNativeCodeGenUtils::GenerateCppCode(Obj, HeaderSource, CppSource, NativizationSummary, FCompilerNativizationOptions{});
|
|
SlowTask.EnterProgressFrame();
|
|
|
|
const FString BackendBaseFilename = CodeGenBackend.ConstructBaseFilename(Obj, FCompilerNativizationOptions{});
|
|
|
|
const FString FullHeaderFilename = FPaths::Combine(*HeaderDirPath, *(BackendBaseFilename + TEXT(".h")));
|
|
const bool bHeaderSaved = FFileHelper::SaveStringToFile(*HeaderSource, *FullHeaderFilename);
|
|
if (!bHeaderSaved)
|
|
{
|
|
ErrorString += FText::Format(LOCTEXT("HeaderNotSavedFmt", "Header file wasn't saved. Check log for details. {0}\n"), FText::FromString(Obj->GetPathName())).ToString();
|
|
}
|
|
else
|
|
{
|
|
CreatedFiles.Add(FullHeaderFilename);
|
|
}
|
|
|
|
SlowTask.EnterProgressFrame();
|
|
if (!CppSource->IsEmpty())
|
|
{
|
|
const FString NewCppFilename = FPaths::Combine(*CppDirPath, *(BackendBaseFilename + TEXT(".cpp")));
|
|
const bool bCppSaved = FFileHelper::SaveStringToFile(*CppSource, *NewCppFilename);
|
|
if (!bCppSaved)
|
|
{
|
|
ErrorString += FText::Format(LOCTEXT("CppNotSavedFmt", "Cpp file wasn't saved. Check log for details. {0}\n"), FText::FromString(Obj->GetPathName())).ToString();
|
|
}
|
|
else
|
|
{
|
|
CreatedFiles.Add(NewCppFilename);
|
|
}
|
|
}
|
|
}
|
|
|
|
SlowTask.EnterProgressFrame();
|
|
|
|
bool bSuccess = ErrorString.IsEmpty();
|
|
if (bSuccess && CreatedFiles.Num() > 0)
|
|
{
|
|
// assume the last element is the target cpp file
|
|
FSourceCodeNavigation::OpenSourceFile(CreatedFiles.Last());
|
|
}
|
|
return bSuccess;
|
|
}
|
|
};
|
|
|
|
class SNativeCodeGenerationDialog : public SCompoundWidget
|
|
{
|
|
public:
|
|
SLATE_BEGIN_ARGS(SNativeCodeGenerationDialog){}
|
|
SLATE_ARGUMENT(TSharedPtr<SWindow>, ParentWindow)
|
|
SLATE_ARGUMENT(TSharedPtr<FGeneratedCodeData>, GeneratedCodeData)
|
|
SLATE_END_ARGS()
|
|
|
|
private:
|
|
|
|
// Child widgets
|
|
TSharedPtr<SDirectoryPicker> HeaderDirectoryBrowser;
|
|
TSharedPtr<SDirectoryPicker> SourceDirectoryBrowser;
|
|
TSharedPtr<SErrorText> ErrorWidget;
|
|
//
|
|
TWeakPtr<SWindow> WeakParentWindow;
|
|
TSharedPtr<FGeneratedCodeData> GeneratedCodeData;
|
|
bool bSaved;
|
|
|
|
void CloseParentWindow()
|
|
{
|
|
auto ParentWindow = WeakParentWindow.Pin();
|
|
if (ParentWindow.IsValid())
|
|
{
|
|
ParentWindow->RequestDestroyWindow();
|
|
}
|
|
}
|
|
|
|
bool IsEditable() const
|
|
{
|
|
return !bSaved && GeneratedCodeData->ErrorString.IsEmpty();
|
|
}
|
|
|
|
FReply OnButtonClicked()
|
|
{
|
|
bSaved = GeneratedCodeData->Save(HeaderDirectoryBrowser->GetDirectory(), SourceDirectoryBrowser->GetDirectory());
|
|
ErrorWidget->SetError(GeneratedCodeData->ErrorString);
|
|
|
|
return FReply::Handled();
|
|
}
|
|
|
|
FText ButtonText() const
|
|
{
|
|
return IsEditable() ? LOCTEXT("Generate", "Generate") : LOCTEXT("Regenerate", "Regenerate");
|
|
}
|
|
|
|
FText GetClassName() const
|
|
{
|
|
return GeneratedCodeData.IsValid() ? FText::FromString(GeneratedCodeData->ClassName) : FText::GetEmpty();
|
|
}
|
|
|
|
public:
|
|
|
|
void Construct(const FArguments& InArgs)
|
|
{
|
|
GeneratedCodeData = InArgs._GeneratedCodeData;
|
|
bSaved = false;
|
|
WeakParentWindow = InArgs._ParentWindow;
|
|
|
|
ChildSlot
|
|
[
|
|
SNew(SBorder)
|
|
.Padding(4.f)
|
|
.BorderImage(FEditorStyle::GetBrush("ToolPanel.GroupBorder"))
|
|
[
|
|
SNew(SVerticalBox)
|
|
+ SVerticalBox::Slot()
|
|
.Padding(4.0f)
|
|
.AutoHeight()
|
|
[
|
|
SNew(STextBlock)
|
|
.Text(LOCTEXT("ClassName", "Class Name"))
|
|
]
|
|
+ SVerticalBox::Slot()
|
|
.Padding(4.0f)
|
|
.AutoHeight()
|
|
[
|
|
SNew(STextBlock)
|
|
.Text(this, &SNativeCodeGenerationDialog::GetClassName)
|
|
]
|
|
+ SVerticalBox::Slot()
|
|
.Padding(4.0f)
|
|
.AutoHeight()
|
|
[
|
|
SNew(STextBlock)
|
|
.Text(LOCTEXT("HeaderPath", "Header Path"))
|
|
]
|
|
+ SVerticalBox::Slot()
|
|
.Padding(4.0f)
|
|
.AutoHeight()
|
|
[
|
|
SAssignNew(HeaderDirectoryBrowser, SDirectoryPicker)
|
|
.Directory(FGeneratedCodeData::DefaultHeaderDir())
|
|
.File(GeneratedCodeData->HeaderFileName())
|
|
.Message(LOCTEXT("HeaderDirectory", "Header Directory"))
|
|
.IsEnabled(this, &SNativeCodeGenerationDialog::IsEditable)
|
|
]
|
|
+ SVerticalBox::Slot()
|
|
.Padding(4.0f)
|
|
.AutoHeight()
|
|
[
|
|
SNew(STextBlock)
|
|
.Text(LOCTEXT("SourcePath", "Source Path"))
|
|
]
|
|
+ SVerticalBox::Slot()
|
|
.Padding(4.0f)
|
|
.AutoHeight()
|
|
[
|
|
SAssignNew(SourceDirectoryBrowser, SDirectoryPicker)
|
|
.Directory(FGeneratedCodeData::DefaultSourceDir())
|
|
.File(GeneratedCodeData->SourceFileName())
|
|
.Message(LOCTEXT("SourceDirectory", "Source Directory"))
|
|
.IsEnabled(this, &SNativeCodeGenerationDialog::IsEditable)
|
|
]
|
|
+ SVerticalBox::Slot()
|
|
.Padding(4.0f)
|
|
.AutoHeight()
|
|
[
|
|
SNew(STextBlock)
|
|
.Text(LOCTEXT("Dependencies", "Dependencies"))
|
|
]
|
|
+ SVerticalBox::Slot()
|
|
.Padding(4.0f)
|
|
.AutoHeight()
|
|
[
|
|
SNew(SBox)
|
|
.WidthOverride(360.0f)
|
|
.HeightOverride(200.0f)
|
|
[
|
|
SNew(SMultiLineEditableTextBox)
|
|
.IsReadOnly(true)
|
|
.Text(FText::FromString(GeneratedCodeData->TypeDependencies))
|
|
]
|
|
]
|
|
+ SVerticalBox::Slot()
|
|
.Padding(4.0f)
|
|
.AutoHeight()
|
|
[
|
|
SAssignNew(ErrorWidget, SErrorText)
|
|
]
|
|
+ SVerticalBox::Slot()
|
|
.Padding(4.0f)
|
|
.AutoHeight()
|
|
.HAlign(HAlign_Right)
|
|
[
|
|
SNew(SButton)
|
|
.Text(this, &SNativeCodeGenerationDialog::ButtonText)
|
|
.OnClicked(this, &SNativeCodeGenerationDialog::OnButtonClicked)
|
|
]
|
|
]
|
|
];
|
|
|
|
ErrorWidget->SetError(GeneratedCodeData->ErrorString);
|
|
}
|
|
};
|
|
|
|
void FNativeCodeGenerationTool::Open(UBlueprint& Blueprint, TSharedRef< class FBlueprintEditor> Editor)
|
|
{
|
|
TSharedRef<FGeneratedCodeData> GeneratedCodeData(new FGeneratedCodeData(Blueprint));
|
|
|
|
TSharedRef<SWindow> PickerWindow = SNew(SWindow)
|
|
.Title(LOCTEXT("GenerateNativeCode", "Generate Native Code"))
|
|
.SizingRule(ESizingRule::Autosized)
|
|
.ClientSize(FVector2D(0.f, 300.f))
|
|
.SupportsMaximize(false)
|
|
.SupportsMinimize(false);
|
|
|
|
TSharedRef<SNativeCodeGenerationDialog> CodeGenerationDialog = SNew(SNativeCodeGenerationDialog)
|
|
.ParentWindow(PickerWindow)
|
|
.GeneratedCodeData(GeneratedCodeData);
|
|
|
|
PickerWindow->SetContent(CodeGenerationDialog);
|
|
GEditor->EditorAddModalWindow(PickerWindow);
|
|
}
|
|
|
|
bool FNativeCodeGenerationTool::CanGenerate(const UBlueprint& Blueprint)
|
|
{
|
|
return (Blueprint.Status == EBlueprintStatus::BS_UpToDate || Blueprint.Status == EBlueprintStatus::BS_UpToDateWithWarnings)
|
|
&& (Blueprint.BlueprintType == EBlueprintType::BPTYPE_Normal || Blueprint.BlueprintType == EBlueprintType::BPTYPE_FunctionLibrary || Blueprint.BlueprintType == EBlueprintType::BPTYPE_Interface)
|
|
&& Cast<UBlueprintGeneratedClass>(Blueprint.GeneratedClass);
|
|
}
|
|
|
|
#undef LOCTEXT_NAMESPACE
|