void FQuestionBlock::MarkAnswerByIndex( int32 QuestionIndex, int32 AnswerIndex ) { if ( Response == Response_Single ) { if( UserAnswers[QuestionIndex].Num() > 0 ) { const FAnswer& AnswerToRemove = Answers[UserAnswers[QuestionIndex][0]]; UpdateBranchPoints( AnswerToRemove, false ); } UserAnswers[QuestionIndex].Empty(); UserAnswers[QuestionIndex].Push( AnswerIndex ); UpdateBranchPoints( Answers[AnswerIndex], true ); } else if ( Response == Response_Multi || UserAnswers[QuestionIndex].Num() < (int32)Response ) { UserAnswers[QuestionIndex].Push( AnswerIndex ); UpdateBranchPoints( Answers[AnswerIndex], true ); } else { auto UserAnswer = UserAnswers[QuestionIndex]; for( auto AnswerIt=UserAnswer.CreateConstIterator(); AnswerIt; ++AnswerIt ) { UpdateBranchPoints( Answers[*AnswerIt], false ); } UserAnswers[QuestionIndex].RemoveAt( 0 ); UserAnswers[QuestionIndex].Push( AnswerIndex ); UpdateBranchPoints( Answers[AnswerIndex], true ); } }
void FQuestionBlock::UpdateAllBranchPoints( bool bAdd ) const { for( int32 QuestionIndex=0; QuestionIndex<Questions.Num(); ++QuestionIndex ) { auto UserAnswer = UserAnswers[QuestionIndex]; for( auto AnswerIt=UserAnswer.CreateConstIterator(); AnswerIt; ++AnswerIt ) { UpdateBranchPoints( Answers[*AnswerIt], bAdd ); } } }
void FPackageAutoSaver::ClearStalePointers() { auto DirtyPackagesForUserSaveTmp = DirtyPackagesForUserSave; for(auto It = DirtyPackagesForUserSaveTmp.CreateConstIterator(); It; ++It) { const TWeakObjectPtr<UPackage>& Package = It->Key; if(!Package.IsValid()) { DirtyPackagesForUserSave.Remove(Package); } } auto DirtyPackagesForAutoSaveTmp = DirtyPackagesForAutoSave; for(auto It = DirtyPackagesForAutoSaveTmp.CreateConstIterator(); It; ++It) { const TWeakObjectPtr<UPackage>& Package = *It; if(!Package.IsValid()) { DirtyPackagesForAutoSave.Remove(Package); } } }
void FAssetTypeActions_CurveTable::GetActions( const TArray<UObject*>& InObjects, FMenuBuilder& MenuBuilder ) { auto Tables = GetTypedWeakObjectPtrs<UObject>(InObjects); TArray<FString> ImportPaths; for (auto TableIter = Tables.CreateConstIterator(); TableIter; ++TableIter) { const UCurveTable* CurTable = Cast<UCurveTable>((*TableIter).Get()); if (CurTable) { ImportPaths.Add(FReimportManager::ResolveImportFilename(CurTable->ImportPath, CurTable)); } } MenuBuilder.AddMenuEntry( LOCTEXT("CurveTable_ExportAsCSV", "Export as CSV"), LOCTEXT("CurveTable_ExportAsCSVTooltip", "Export the curve table as a file containing CSV data."), FSlateIcon(), FUIAction( FExecuteAction::CreateSP( this, &FAssetTypeActions_CurveTable::ExecuteExportAsCSV, Tables ), FCanExecuteAction() ) ); MenuBuilder.AddMenuEntry( LOCTEXT("CurveTable_ExportAsJSON", "Export as JSON"), LOCTEXT("CurveTable_ExportAsJSONTooltip", "Export the curve table as a file containing JSON data."), FSlateIcon(), FUIAction( FExecuteAction::CreateSP( this, &FAssetTypeActions_CurveTable::ExecuteExportAsJSON, Tables ), FCanExecuteAction() ) ); TArray<FString> PotentialFileExtensions; PotentialFileExtensions.Add(TEXT(".xls")); PotentialFileExtensions.Add(TEXT(".xlsm")); PotentialFileExtensions.Add(TEXT(".csv")); PotentialFileExtensions.Add(TEXT(".json")); MenuBuilder.AddMenuEntry( LOCTEXT("CurveTable_OpenSourceData", "Open Source Data"), LOCTEXT("CurveTable_OpenSourceDataTooltip", "Opens the curve table's source data file in an external editor. It will search using the following extensions: .xls/.xlsm/.csv/.json"), FSlateIcon(), FUIAction( FExecuteAction::CreateSP( this, &FAssetTypeActions_CurveTable::ExecuteFindSourceFileInExplorer, ImportPaths, PotentialFileExtensions ), FCanExecuteAction::CreateSP(this, &FAssetTypeActions_CurveTable::CanExecuteFindSourceFileInExplorer, ImportPaths, PotentialFileExtensions) ) ); }
void UWorldTileDetails::SyncStreamingLevels(const FWorldTileModel& TileModel) { // Clean list if tile streaming details, // will be refiled with an actual information in a loop bellow StreamingLevels.Empty(); const ULevel* Level = TileModel.GetLevelObject(); if (Level) { auto WorldStreamingLevels = CastChecked<UWorld>(Level->GetOuter())->StreamingLevels; for (auto It = WorldStreamingLevels.CreateConstIterator(); It; ++It) { ULevelStreaming* LevelStreaming = (*It); FTileStreamingLevelDetails Details; Details.StreamingMode = FTileStreamingLevelDetails::StreamingObject2Mode(LevelStreaming); Details.PackageName = LevelStreaming->PackageName; StreamingLevels.Add(Details); } } }
void FAssetTypeActions_DataTable::GetActions( const TArray<UObject*>& InObjects, FMenuBuilder& MenuBuilder ) { auto Tables = GetTypedWeakObjectPtrs<UObject>(InObjects); TArray<FString> ImportPaths; for (auto TableIter = Tables.CreateConstIterator(); TableIter; ++TableIter) { const UDataTable* CurTable = Cast<UDataTable>((*TableIter).Get()); if (CurTable) { ImportPaths.Add(FReimportManager::ResolveImportFilename(CurTable->ImportPath, CurTable)); } } MenuBuilder.AddMenuEntry( LOCTEXT("DataTable_JSON", "JSON"), LOCTEXT("DataTable_JSONTooltip", "Creates a JSON version of the data table in the lock."), FSlateIcon(), FUIAction( FExecuteAction::CreateSP( this, &FAssetTypeActions_DataTable::ExecuteJSON, Tables ), FCanExecuteAction() ) ); TArray<FString> XLSExtensions; XLSExtensions.Add(TEXT(".xls")); XLSExtensions.Add(TEXT(".xlsm")); MenuBuilder.AddMenuEntry( LOCTEXT("DataTable_OpenSourceXLS", "Open Source (.xls/.xlsm)"), LOCTEXT("DataTable_OpenSourceXLSTooltip", "Opens the data table's source XLS/XLSM file in an external editor."), FSlateIcon(), FUIAction( FExecuteAction::CreateSP( this, &FAssetTypeActions_DataTable::ExecuteFindExcelFileInExplorer, ImportPaths, XLSExtensions ), FCanExecuteAction::CreateSP(this, &FAssetTypeActions_DataTable::CanExecuteFindExcelFileInExplorer, ImportPaths, XLSExtensions) ) ); }
void FChunkManifestGenerator::FixupPackageDependenciesForChunks(FSandboxPlatformFile* InSandboxFile) { for (int32 ChunkID = 0, MaxChunk = ChunkManifests.Num(); ChunkID < MaxChunk; ++ChunkID) { FinalChunkManifests.Add(nullptr); if (!ChunkManifests[ChunkID]) { continue; } FinalChunkManifests[ChunkID] = new FChunkPackageSet(); for (auto It = ChunkManifests[ChunkID]->CreateConstIterator(); It; ++It) { AddPackageAndDependenciesToChunk(FinalChunkManifests[ChunkID], It.Key(), It.Value(), ChunkID, InSandboxFile); } } //Once complete, Add any remaining assets (that are not assigned to a chunk) to the first chunk. if (FinalChunkManifests.Num() == 0) { FinalChunkManifests.Add(nullptr); } if (!FinalChunkManifests[0]) { FinalChunkManifests[0] = new FChunkPackageSet(); } // Copy the remaining assets auto RemainingAssets = UnassignedPackageSet; for (auto It = RemainingAssets.CreateConstIterator(); It; ++It) { AddPackageAndDependenciesToChunk(FinalChunkManifests[0], It.Key(), It.Value(), 0, InSandboxFile); } //Finally, if the previous step may added any extra packages to the 0 chunk. Pull them out of other chunks and save space for (auto It = FinalChunkManifests[0]->CreateConstIterator(); It; ++It) { for (int32 ChunkID = 1, MaxChunk = FinalChunkManifests.Num(); ChunkID < MaxChunk; ++ChunkID) { if (!FinalChunkManifests[ChunkID]) { continue; } FinalChunkManifests[ChunkID]->Remove(It.Key()); } } // Fix up the asset registry to reflect this chunk layout for (int32 ChunkID = 0, MaxChunk = FinalChunkManifests.Num(); ChunkID < MaxChunk; ++ChunkID) { if (!FinalChunkManifests[ChunkID]) { continue; } for (const auto& Asset : *FinalChunkManifests[ChunkID]) { auto* AssetIndexArray = PackageToRegistryDataMap.Find(Asset.Key); if (AssetIndexArray) { for (auto AssetIndex : *AssetIndexArray) { AssetRegistryData[AssetIndex].ChunkIDs.AddUnique(ChunkID); } } } } }
void FChunkManifestGenerator::FixupPackageDependenciesForChunks(FSandboxPlatformFile* InSandboxFile) { for (int32 ChunkID = 0, MaxChunk = ChunkManifests.Num(); ChunkID < MaxChunk; ++ChunkID) { FinalChunkManifests.Add(nullptr); if (!ChunkManifests[ChunkID]) { continue; } FinalChunkManifests[ChunkID] = new FChunkPackageSet(); for (auto It = ChunkManifests[ChunkID]->CreateConstIterator(); It; ++It) { AddPackageAndDependenciesToChunk(FinalChunkManifests[ChunkID], It.Key(), It.Value(), ChunkID, InSandboxFile); } } auto* ChunkDepGraph = DependencyInfo->GetChunkDependencyGraph(ChunkManifests.Num()); //Once complete, Add any remaining assets (that are not assigned to a chunk) to the first chunk. if (FinalChunkManifests.Num() == 0) { FinalChunkManifests.Add(nullptr); } if (!FinalChunkManifests[0]) { FinalChunkManifests[0] = new FChunkPackageSet(); } // Copy the remaining assets auto RemainingAssets = UnassignedPackageSet; for (auto It = RemainingAssets.CreateConstIterator(); It; ++It) { AddPackageAndDependenciesToChunk(FinalChunkManifests[0], It.Key(), It.Value(), 0, InSandboxFile); } if (!CheckChunkAssetsAreNotInChild(*ChunkDepGraph)) { UE_LOG(LogChunkManifestGenerator, Log, TEXT("Initial scan of chunks found duplicate assets in graph children")); } //Finally, if the previous step may added any extra packages to the 0 chunk. Pull them out of other chunks and save space ResolveChunkDependencyGraph(*ChunkDepGraph, FChunkPackageSet()); if (!CheckChunkAssetsAreNotInChild(*ChunkDepGraph)) { UE_LOG(LogChunkManifestGenerator, Error, TEXT("Second Scan of chunks found duplicate asset entries in children.")); } // Fix up the asset registry to reflect this chunk layout for (int32 ChunkID = 0, MaxChunk = FinalChunkManifests.Num(); ChunkID < MaxChunk; ++ChunkID) { if (!FinalChunkManifests[ChunkID]) { continue; } for (const auto& Asset : *FinalChunkManifests[ChunkID]) { auto* AssetIndexArray = PackageToRegistryDataMap.Find(Asset.Key); if (AssetIndexArray) { for (auto AssetIndex : *AssetIndexArray) { AssetRegistryData[AssetIndex].ChunkIDs.AddUnique(ChunkID); } } } } }
void FAssetTypeActions_DataTable::GetActions( const TArray<UObject*>& InObjects, FMenuBuilder& MenuBuilder ) { auto Tables = GetTypedWeakObjectPtrs<UObject>(InObjects); TArray<FString> ImportPaths; for (auto TableIter = Tables.CreateConstIterator(); TableIter; ++TableIter) { const UDataTable* CurTable = Cast<UDataTable>((*TableIter).Get()); if (CurTable) { ImportPaths.Add(FReimportManager::ResolveImportFilename(CurTable->ImportPath, CurTable)); } } MenuBuilder.AddMenuEntry( LOCTEXT("DataTable_Edit", "Edit"), LOCTEXT("DataTable_EditTooltip", "Opens the selected tables in the table editor."), FSlateIcon(), FUIAction( FExecuteAction::CreateSP( this, &FAssetTypeActions_DataTable::ExecuteEdit, Tables ), FCanExecuteAction() ) ); MenuBuilder.AddMenuEntry( LOCTEXT("DataTable_Reimport", "Reimport"), LOCTEXT("DataTable_ReimportTooltip", "Reimports the selected Data Table from file."), FSlateIcon(), FUIAction( FExecuteAction::CreateSP( this, &FAssetTypeActions_DataTable::ExecuteReimport, Tables ), FCanExecuteAction() ) ); MenuBuilder.AddMenuEntry( LOCTEXT("DataTable_FindSource", "Find Source"), LOCTEXT("DataTable_FindSourceTooltip", "Opens explorer at the location of this asset's source data."), FSlateIcon(), FUIAction( FExecuteAction::CreateSP( this, &FAssetTypeActions_DataTable::ExecuteFindInExplorer, ImportPaths ), FCanExecuteAction::CreateSP(this, &FAssetTypeActions_DataTable::CanExecuteFindInExplorerSourceCommand, ImportPaths ) ) ); static const TArray<FString> EmptyArray; MenuBuilder.AddMenuEntry( LOCTEXT("DataTable_OpenSourceCSV", "Open Source (.csv)"), LOCTEXT("DataTable_OpenSourceCSVTooltip", "Opens the selected asset's source CSV data in an external editor."), FSlateIcon(), FUIAction( FExecuteAction::CreateSP( this, &FAssetTypeActions_DataTable::ExecuteOpenInExternalEditor, ImportPaths, EmptyArray ), FCanExecuteAction::CreateSP(this, &FAssetTypeActions_DataTable::CanExecuteLaunchExternalSourceCommands, ImportPaths, EmptyArray ) ) ); TArray<FString> XLSExtensions; XLSExtensions.Add(TEXT(".xls")); XLSExtensions.Add(TEXT(".xlsm")); MenuBuilder.AddMenuEntry( LOCTEXT("DataTable_OpenSourceXLS", "Open Source (.xls/.xlsm)"), LOCTEXT("DataTable_OpenSourceXLSTooltip", "Opens the selected asset's source XLS/XLSM data in an external editor."), FSlateIcon(), FUIAction( FExecuteAction::CreateSP( this, &FAssetTypeActions_DataTable::ExecuteOpenInExternalEditor, ImportPaths, XLSExtensions ), FCanExecuteAction::CreateSP(this, &FAssetTypeActions_DataTable::CanExecuteLaunchExternalSourceCommands, ImportPaths, XLSExtensions ) ) ); MenuBuilder.AddMenuEntry( LOCTEXT("DataTable_JSON", "JSON"), LOCTEXT("DataTable_JSONTooltip", "Creates a JSON version of the data table in the lock."), FSlateIcon(), FUIAction( FExecuteAction::CreateSP( this, &FAssetTypeActions_DataTable::ExecuteJSON, Tables ), FCanExecuteAction() ) ); }