Skip to content

Instantly share code, notes, and snippets.

@gotwig
Created April 9, 2015 01:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gotwig/f8bc7bc33436c28f5dfe to your computer and use it in GitHub Desktop.
Save gotwig/f8bc7bc33436c28f5dfe to your computer and use it in GitHub Desktop.
// Fill out your copyright notice in the Description page of Project Settings.
#include "CarCarCar.h"
#include "UBP_FuncLib.h"
#include "OnlineSubsystem.h"
#include "Runtime/Engine/Classes/Engine/GameInstance.h"
FString UUBP_FuncLib::GetSessionResultKeyValue(const FBlueprintSessionResult& Result, FName keyName)
{
FString keyValue;
Result.OnlineResult.Session.SessionSettings.Get(keyName, keyValue);
return keyValue;
}
void UUBP_FuncLib::UpdateSession(TArray<FName> KeyIDs,TArray<FString> KeyValues, bool RefreshOnlinedata)
{
auto Sessions = IOnlineSubsystem::Get()->GetSessionInterface();
if (Sessions.IsValid() && KeyIDs.Num() > 0 && KeyValues.Num() > 0 && KeyIDs.Num() == KeyValues.Num())
{
FOnlineSessionSettings Settings;
for (int32 i = 0; i < KeyIDs.Num(); ++i)
{
FOnlineSessionSetting Setting(KeyValues[i]);
Settings.Set(KeyIDs[i], Setting);
}
Sessions->UpdateSession(GameSessionName, Settings, RefreshOnlinedata);
UE_LOG(LogClass, Log, TEXT("Updated Session"));
}
else
{
UE_LOG(LogClass, Log, TEXT("Not Updated Session"));
FFrame::KismetExecutionMessage(TEXT("Sessions not supported by Online Subsystem"), ELogVerbosity::Warning);
}
}
TArray<FString> UUBP_FuncLib::SessionSettingsToString(const FBlueprintSessionResult& Result)
{
TArray<FString> SessionSettings = TArray<FString>();
for (FSessionSettings::TConstIterator It(Result.OnlineResult.Session.SessionSettings.Settings); It; ++It)
{
UE_LOG(LogClass, Log, TEXT("Test SessionToString"));
FName Key = It.Key();
const FOnlineSessionSetting& Setting = It.Value();
SessionSettings.Add(Key.ToString());
SessionSettings.Add(Setting.ToString());
}
return SessionSettings;
}
TArray<FString> UUBP_FuncLib::GetAllMapNames(FString folderPath)
{
auto ObjectLibrary = UObjectLibrary::CreateLibrary(UWorld::StaticClass(), false, true);
ObjectLibrary->LoadAssetDataFromPath(folderPath);
TArray<FAssetData> AssetDatas;
ObjectLibrary->GetAssetDataList(AssetDatas);
TArray<FString> Names = TArray<FString>();
for (int32 i = 0; i < AssetDatas.Num(); ++i)
{
FAssetData& AssetData = AssetDatas[i];
auto name = AssetData.AssetName.ToString();
Names.Add(name);
}
return Names;
}
TArray<FString> UUBP_FuncLib::GetAllFileNames(FString folderPath)
{
auto ObjectLibrary = UObjectLibrary::CreateLibrary(false, false, true);
ObjectLibrary->LoadAssetDataFromPath(folderPath);
TArray<FAssetData> AssetDatas;
ObjectLibrary->GetAssetDataList(AssetDatas);
UE_LOG(LogTemp, Warning, TEXT("Found maps: %d"), AssetDatas.Num());
TArray<FString> Names = TArray<FString>();
for (int32 i = 0; i < AssetDatas.Num(); ++i)
{
FAssetData& AssetData = AssetDatas[i];
auto name = AssetData.AssetName.ToString();
Names.Add(name);
}
return Names;
}
void UUBP_FuncLib::CustomStuff()
{
}
void UUBP_FuncLib::RemoveSplitscreenPlayers()
{
const int32 MaxSplitScreenPlayers = 4;
ULocalPlayer* PlayersToRemove[MaxSplitScreenPlayers];
int32 RemIndex = 0;
for (FConstPlayerControllerIterator Iterator = GEngine->GameViewport->GetWorld()->GetPlayerControllerIterator(); Iterator; ++Iterator)
{
// Remove only local split screen players
APlayerController* Controller = *Iterator;
if (Controller && Controller->IsLocalController() && !Controller->IsPrimaryPlayer())
{
ULocalPlayer* ExPlayer = Cast<ULocalPlayer>(Controller->Player);
if (ExPlayer)
{
PlayersToRemove[RemIndex++] = ExPlayer;
Controller->PawnPendingDestroy(Controller->GetPawn());
}
}
}
for (int32 i = 0; i < RemIndex; ++i)
{
GEngine->GameViewport->RemovePlayer(PlayersToRemove[i]);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment