void AShooterGameState::GetRankedMap(int32 TeamIndex, RankedPlayerMap& OutRankedMap) const { OutRankedMap.Empty(); //first, we need to go over all the PlayerStates, grab their score, and rank them TMultiMap<int32, AShooterPlayerState*> SortedMap; for(int32 i = 0; i < PlayerArray.Num(); ++i) { int32 Score = 0; AShooterPlayerState* CurPlayerState = Cast<AShooterPlayerState>(PlayerArray[i]); if (CurPlayerState && (CurPlayerState->GetTeamNum() == TeamIndex)) { SortedMap.Add(FMath::TruncToInt(CurPlayerState->Score), CurPlayerState); } } //sort by the keys SortedMap.KeySort(TGreater<int32>()); //now, add them back to the ranked map OutRankedMap.Empty(); int32 Rank = 0; for(TMultiMap<int32, AShooterPlayerState*>::TIterator It(SortedMap); It; ++It) { OutRankedMap.Add(Rank++, It.Value()); } }
bool FChunkManifestGenerator::SaveManifests(FSandboxPlatformFile* InSandboxFile) { // Always do package dependency work, is required to modify asset registry FixupPackageDependenciesForChunks(InSandboxFile); if (bGenerateChunks) { for (auto Platform : Platforms) { if (!GenerateStreamingInstallManifest(Platform->PlatformName())) { return false; } // Generate map for the platform abstraction TMultiMap<FString, int32> ChunkMap; // asset -> ChunkIDs map TSet<int32> ChunkIDsInUse; const FString PlatformName = Platform->PlatformName(); // Collect all unique chunk indices and map all files to their chunks for (int32 ChunkIndex = 0; ChunkIndex < FinalChunkManifests.Num(); ++ChunkIndex) { if (FinalChunkManifests[ChunkIndex] && FinalChunkManifests[ChunkIndex]->Num()) { ChunkIDsInUse.Add(ChunkIndex); for (auto& Filename : *FinalChunkManifests[ChunkIndex]) { FString PlatFilename = Filename.Value.Replace(TEXT("[Platform]"), *PlatformName); ChunkMap.Add(PlatFilename, ChunkIndex); } } } // Sort our chunk IDs and file paths ChunkMap.KeySort(TLess<FString>()); ChunkIDsInUse.Sort(TLess<int32>()); // Platform abstraction will generate any required platform-specific files for the chunks if (!Platform->GenerateStreamingInstallManifest(ChunkMap, ChunkIDsInUse)) { return false; } } GenerateAssetChunkInformationCSV(FPaths::Combine(*FPaths::GameLogDir(), TEXT("ChunkLists"))); } return true; }