215 lines
6.5 KiB
Ucode
215 lines
6.5 KiB
Ucode
/**
|
|
* Copyright 1998-2013 Epic Games, Inc. All Rights Reserved.
|
|
*/
|
|
|
|
/**
|
|
* This class is responsible for retrieving the friends list from the online
|
|
* subsystem and populating the UI with that data.
|
|
*/
|
|
class UIDataProvider_OnlineFriends extends UIDataProvider_OnlinePlayerDataBase
|
|
native(inherit)
|
|
dependson(OnlineSubsystem)
|
|
transient;
|
|
|
|
/** Gets a copy of the friends data from the online subsystem */
|
|
var array<OnlineFriend> FriendsList;
|
|
|
|
/** The column name to display in the UI */
|
|
var localized string NickNameCol;
|
|
|
|
/** The column name to display in the UI */
|
|
var localized string PresenceInfoCol;
|
|
|
|
/** The column name to display in the UI */
|
|
var localized string FriendStateCol;
|
|
|
|
/** The column name to display in the UI */
|
|
var localized string bIsOnlineCol;
|
|
|
|
/** The column name to display in the UI */
|
|
var localized string bIsPlayingCol;
|
|
|
|
/** The column name to display in the UI */
|
|
var localized string bIsPlayingThisGameCol;
|
|
|
|
/** The column name to display in the UI */
|
|
var localized string bIsJoinableCol;
|
|
|
|
/** The column name to display in the UI */
|
|
var localized string bHasVoiceSupportCol;
|
|
|
|
/** The column name to display in the UI */
|
|
var localized string bHaveInvitedCol;
|
|
|
|
/** The column name to display in the UI */
|
|
var localized string bHasInvitedYouCol;
|
|
|
|
/** The text to use when offline */
|
|
var localized string OfflineText;
|
|
|
|
/** The text to use when online */
|
|
var localized string OnlineText;
|
|
|
|
/** The text to use when away */
|
|
var localized string AwayText;
|
|
|
|
/** The text to use when busy */
|
|
var localized string BusyText;
|
|
|
|
/**
|
|
* Binds the player to this provider. Starts the async friends list gathering
|
|
*
|
|
* @param InPlayer the player that we are retrieving friends for
|
|
*/
|
|
event OnRegister(LocalPlayer InPlayer)
|
|
{
|
|
local OnlineSubsystem OnlineSub;
|
|
local OnlinePlayerInterface PlayerInterface;
|
|
|
|
Super.OnRegister(InPlayer);
|
|
// If the player is None, we are in the editor
|
|
// BWJ - 12-14-16 - Don't care about this
|
|
if (PlayerControllerId != -1 && !class'WorldInfo'.static.IsConsoleBuild(CONSOLE_Durango))
|
|
{
|
|
// Figure out if we have an online subsystem registered
|
|
OnlineSub = class'GameEngine'.static.GetOnlineSubsystem();
|
|
if (OnlineSub != None)
|
|
{
|
|
// Grab the player interface to verify the subsystem supports it
|
|
PlayerInterface = OnlineSub.PlayerInterface;
|
|
if (PlayerInterface != None)
|
|
{
|
|
// Register that we are interested in any sign in change for this player
|
|
PlayerInterface.AddLoginChangeDelegate(OnLoginChange);
|
|
// Set our callback function per player
|
|
PlayerInterface.AddReadFriendsCompleteDelegate(PlayerControllerId,OnFriendsReadComplete);
|
|
// Don't read people that aren't signed in or are guest accounts
|
|
if (PlayerInterface.GetLoginStatus(PlayerControllerId) > LS_NotLoggedIn &&
|
|
!PlayerInterface.IsGuestLogin(PlayerControllerId))
|
|
{
|
|
// Start the async task
|
|
PlayerInterface.ReadFriendsList(PlayerControllerId);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Clears our delegate for getting login change notifications
|
|
*/
|
|
event OnUnregister()
|
|
{
|
|
local OnlineSubsystem OnlineSub;
|
|
local OnlinePlayerInterface PlayerInterface;
|
|
|
|
// Figure out if we have an online subsystem registered
|
|
OnlineSub = class'GameEngine'.static.GetOnlineSubsystem();
|
|
if (OnlineSub != None)
|
|
{
|
|
// Grab the player interface to verify the subsystem supports it
|
|
PlayerInterface = OnlineSub.PlayerInterface;
|
|
if (PlayerInterface != None)
|
|
{
|
|
// Set our callback function per player
|
|
PlayerInterface.ClearReadFriendsCompleteDelegate(PlayerControllerId,OnFriendsReadComplete);
|
|
// Clear our delegate
|
|
PlayerInterface.ClearLoginChangeDelegate(OnLoginChange);
|
|
}
|
|
}
|
|
Super.OnUnregister();
|
|
}
|
|
|
|
/**
|
|
* Handles the notification that the async read of the friends data is done
|
|
*
|
|
* @param bWasSuccessful whether the call completed ok or not
|
|
*/
|
|
function OnFriendsReadComplete(bool bWasSuccessful)
|
|
{
|
|
local OnlineSubsystem OnlineSub;
|
|
local OnlinePlayerInterface PlayerInterface;
|
|
|
|
if (bWasSuccessful == true)
|
|
{
|
|
// Figure out if we have an online subsystem registered
|
|
OnlineSub = class'GameEngine'.static.GetOnlineSubsystem();
|
|
if (OnlineSub != None)
|
|
{
|
|
// Grab the player interface to verify the subsystem supports it
|
|
PlayerInterface = OnlineSub.PlayerInterface;
|
|
if (PlayerInterface != None)
|
|
{
|
|
// Make a copy of the friends data for the UI
|
|
PlayerInterface.GetFriendsList(PlayerControllerId,FriendsList);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
`Log("Failed to read friends list",,'DevOnline');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Executes a refetching of the friends data when the login for this player
|
|
* changes
|
|
*
|
|
* @param LocalUserNum the player that logged in/out
|
|
*/
|
|
function OnLoginChange(byte LocalUserNum)
|
|
{
|
|
local OnlineSubsystem OnlineSub;
|
|
local OnlinePlayerInterface PlayerInterface;
|
|
|
|
FriendsList.Length = 0;
|
|
// Figure out if we have an online subsystem registered
|
|
OnlineSub = class'GameEngine'.static.GetOnlineSubsystem();
|
|
if (OnlineSub != None)
|
|
{
|
|
// BWJ - 12-12-16 - We don't want this for XB1. Maybe for nothing at all?
|
|
if( !class'WorldInfo'.static.IsConsoleBuild( CONSOLE_Durango ) )
|
|
{
|
|
// Grab the player interface to verify the subsystem supports it
|
|
PlayerInterface = OnlineSub.PlayerInterface;
|
|
if (PlayerInterface != None &&
|
|
PlayerInterface.GetLoginStatus(PlayerControllerId) > LS_NotLoggedIn &&
|
|
!PlayerInterface.IsGuestLogin(PlayerControllerId))
|
|
{
|
|
// Start the async task
|
|
PlayerInterface.ReadFriendsList(PlayerControllerId);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/** Re-reads the friends list to freshen any cached data */
|
|
event RefreshFriendsList()
|
|
{
|
|
local OnlineSubsystem OnlineSub;
|
|
local OnlinePlayerInterface PlayerInterface;
|
|
|
|
// If the player is None, we are in the editor
|
|
if (PlayerControllerId != -1)
|
|
{
|
|
// Figure out if we have an online subsystem registered
|
|
OnlineSub = class'GameEngine'.static.GetOnlineSubsystem();
|
|
if (OnlineSub != None)
|
|
{
|
|
// BWJ - 12-12-16 - We don't want this for XB1. Maybe for nothing at all?
|
|
if (!class'WorldInfo'.static.IsConsoleBuild(CONSOLE_Durango))
|
|
{
|
|
// Grab the player interface to verify the subsystem supports it
|
|
PlayerInterface = OnlineSub.PlayerInterface;
|
|
if (PlayerInterface != None &&
|
|
PlayerInterface.GetLoginStatus(PlayerControllerId) > LS_NotLoggedIn &&
|
|
!PlayerInterface.IsGuestLogin(PlayerControllerId))
|
|
{
|
|
// Start the async task
|
|
PlayerInterface.ReadFriendsList(PlayerControllerId);
|
|
`log("Refreshing friends list",,'DevOnline');
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |