1
0
KF2-Dev-Scripts/KFGame/Classes/KFGFxPopup_FriendsList.uc

257 lines
7.6 KiB
Ucode
Raw Permalink Normal View History

2020-12-13 15:01:13 +00:00
//=============================================================================
// KFGFxPopup_FriendsList
//=============================================================================
// Class Description
//=============================================================================
// Killing Floor 2
// Copyright (C) 2019 SABER Interactive
// - Author Pavel Rodionov 18/10/2019
//=============================================================================
class KFGFxPopup_FriendsList extends KFGFxObject_Popup;
var OnlineSubsystemSteamworks OnlineSub;
var KFOnlineLobbySteamworks SteamworksLobby;
function InitializePopup( KFGFxMoviePlayer_Manager InManager )
{
Super.InitializePopup(InManager);
OnlineSub = OnlineSubsystemSteamworks(class'GameEngine'.static.GetOnlineSubsystem());
SteamworksLobby = KFOnlineLobbySteamworks(OnlineSub.GetLobbyInterface());
setLocalizedText();
setOtherFirendsTitleVisibility();
fillFriendsListPopup();
SetupLinkVisibility();
OnlineSub.TriggerRefreshFriendsList();
}
function setLocalizedText()
{
local GFxObject LocalizedStringsObject;
LocalizedStringsObject = CreateObject("Object");
LocalizedStringsObject.SetString("titleText", Class'KFCommon_LocalizedStrings'.default.FriendsListPopupTitleString);
LocalizedStringsObject.SetString("friendName", Class'KFCommon_LocalizedStrings'.default.FriendsListPopupFriendString);
LocalizedStringsObject.SetString("friendsBlockTitleText", Class'KFCommon_LocalizedStrings'.default.FriendsListPopupFriendsString);
LocalizedStringsObject.SetString("otherFriendsBlockTitleText", Class'KFCommon_LocalizedStrings'.default.FriendsListPopupOtherFriendsString);
LocalizedStringsObject.SetString("linkText", Class'KFCommon_LocalizedStrings'.default.FriendsListPopupLinkButonString);
SetObject("setTextLocalized", LocalizedStringsObject);
}
function SetupLinkVisibility()
{
if (OnlineSub.IsLoggedInOnOtherPlatform())
{
SetBool("showLink", false);
}
}
function setOtherFirendsTitleVisibility()
{
if (class'WorldInfo'.static.IsEosBuild())
{
GetObject("otherFriendsTitle").SetVisible(false);
}
}
function fillFriendsListPopup()
{
local array<OnlineFriend> FriendsList;
local array<OnlineFriend> FriendsFromOtherPlatformList;
local GFxObject FriendDataObject;
local GFxObject OtherFriendDataObject;
local int i;
local int index1;
local int index2;
OnlineSub.GetFriendsList(0, FriendsList);
OnlineSub.GetFriendsListFromOtherPlatform(0, FriendsFromOtherPlatformList);
FriendDataObject = CreateArray();
OtherFriendDataObject = CreateArray();
index1 = 0;
for (i = 0; i < FriendsList.Length; i++)
{
friendsListLog(FriendsList[i]);
FriendDataObject.SetElementObject(index1++, CreateFriendItem(FriendsList[i]));
}
index2 = 0;
for (i = 0; i < FriendsFromOtherPlatformList.length; i++)
{
friendsListLog(FriendsFromOtherPlatformList[i]);
OtherFriendDataObject.SetElementObject(index2++, CreateFriendItem(FriendsFromOtherPlatformList[i]));
}
//send friends list to flash popup
SetObject("fillFriendsList", FriendDataObject);
SetObject("fillOtherFriendsList", OtherFriendDataObject);
GetObject("friendsTitle").GetObject("btnPlus").SetVisible(FriendsList.Length == 0);
GetObject("friendsTitle").GetObject("btnMinus").SetVisible(FriendsList.Length != 0);
GetObject("otherFriendsTitle").GetObject("btnPlus").SetVisible(FriendsFromOtherPlatformList.Length == 0);
GetObject("otherFriendsTitle").GetObject("btnMinus").SetVisible(FriendsFromOtherPlatformList.Length != 0);
//sendFakeData();//for testing only
}
function GFxObject CreateFriendItem(OnlineFriend friend)
{
local GFxObject DataObject;
local KFPlayerController KFPC;
local string AvatarPath;
local int i;
local UniqueNetId ZeroId;
KFPC = KFPlayerController(GetPC());
DataObject = CreateObject("Object");
//waiting avatar URL from steam
if (friend.UniqueId != ZeroId)
{
AvatarPath = "";
for (i = 0; i < 10; i++)
{
AvatarPath = KFPC.GetSteamAvatar(friend.UniqueId);
if (AvatarPath != "") {
break;
}
}
}
`log("avatarURL:"@AvatarPath);
DataObject.SetString("friendName", friend.NickName);
DataObject.SetString("friendUid", Class'OnlineSubsystem'.static.UniqueNetIdToString(friend.UniqueId));
DataObject.SetBool("sendInvite", false);
DataObject.SetString("profileImageSource", "img://"$AvatarPath);
return DataObject;
}
function string getAvatarPath(UniqueNetId friendId, KFPlayerController KFPC)
{
local string AvatarPath;
local int i;
local UniqueNetId ZeroId;
//waiting avatar URL from steam
if (friendId != ZeroId)
{
AvatarPath = "";
for (i = 0; i < 10; i++)
{
AvatarPath = KFPC.GetSteamAvatar(friendId);
if (AvatarPath != "") {
return AvatarPath;
}
}
}
return "";
}
//Callback functions
function OnFriendsChange()
{
fillFriendsListPopup();
}
function OnLoginOnOtherPlatformDoneAndFriendsReady()
{
fillFriendsListPopup();
SetupLinkVisibility();
}
function Callback_BtnBackClick()
{
ClosePopUp();
}
function Callback_SendInviteToSelectedFriend(String Uid)
{
local UniqueNetId FriendUid;
`log(getFuncName()@"Uid:"@Uid);
Class'OnlineSubsystem'.static.StringToUniqueNetId(Uid, FriendUid);
if (SteamworksLobby != none)
{
SteamworksLobby.InviteFriendToLobbyByUid(FriendUid.Uid);
}
}
function Callback_BtnLinkClick()
{
`log(getFuncName());
OnlineSub.LoginOnOtherPlatform();
}
function friendsListLog(OnlineFriend friend)
{
`log("**********FRIEND**********");
`log("Name:"@friend.NickName);
`log("UniqueId:"@Class'OnlineSubsystem'.static.UniqueNetIdToString(friend.UniqueId));
//`log(friend.SessionId);
//`log("PresenceInfo:"@friend.PresenceInfo);
//`log("FriendState:"@friend.FriendState);
`log("bIsOnline:"@friend.bIsOnline);
`log("bIsPlaying:"@friend.bIsPlaying);
`log("bIsPlayingThisGame:"@friend.bIsPlayingThisGame);
`log("bIsJoinable:"@friend.bIsJoinable);
//`log("bHasVoiceSupport:"@friend.bHasVoiceSupport);
`log("bHaveInvited:"@friend.bHaveInvited);
`log("bHasInvitedYou:"@friend.bHasInvitedYou);
}
function Callback_Log(String text)
{
`log("---From Popup"@text);
}
function sendFakeData()
{
local int i;
local GFxObject DataObject1;
local GFxObject itemDataObject1;
local GFxObject DataObject2;
local GFxObject itemDataObject2;
DataObject1 = CreateArray();
DataObject2 = CreateArray();
for (i = 0; i < 12; i++)
{
itemDataObject1 = CreateObject("Object");
itemDataObject1.SetString("friendName", "Nick_"$i);
itemDataObject1.SetBool("sendInvite", false);
itemDataObject1.SetString("profileImageSource", "img://");
itemDataObject2 = CreateObject("Object");
itemDataObject2.SetString("friendName", "OtherNick_"$i);
itemDataObject2.SetBool("sendInvite", false);
itemDataObject2.SetString("profileImageSource", "img://");
DataObject1.SetElementObject(i, itemDataObject1);
DataObject2.SetElementObject(i, itemDataObject2);
}
SetObject("fillFriendsList", DataObject1);
SetObject("fillOtherFriendsList", DataObject2);
}
defaultproperties
{
}