1
0
KF2-Dev-Scripts/Engine/Classes/UIDataProvider_OnlineFriendMessages.uc
2020-12-13 18:01:13 +03:00

169 lines
5.3 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_OnlineFriendMessages extends UIDataProvider_OnlinePlayerDataBase
native(inherit)
dependson(OnlineSubsystem)
transient;
/** Gets a copy of the friends messages from the online subsystem */
var array<OnlineFriendMessage> Messages;
/** The column name to display in the UI */
var localized string SendingPlayerNameCol;
/** The column name to display in the UI */
var localized string bIsFriendInviteCol;
/** The column name to display in the UI */
var localized string bWasAcceptedCol;
/** The column name to display in the UI */
var localized string bWasDeniedCol;
/** The column name to display in the UI */
var localized string MessageCol;
/** The person that sent the last invite */
var string LastInviteFrom;
/**
* 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
if (PlayerControllerId != -1)
{
// 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);
// Add the callbacks for messages
PlayerInterface.AddFriendMessageReceivedDelegate(PlayerControllerId,OnFriendMessageReceived);
PlayerInterface.AddFriendInviteReceivedDelegate(PlayerControllerId,OnFriendInviteReceived);
PlayerInterface.AddReceivedGameInviteDelegate(PlayerControllerId,OnGameInviteReceived);
// Read any messages that are waiting
ReadMessages();
}
}
}
}
/**
* 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)
{
// Clear our callback function per player
PlayerInterface.ClearLoginChangeDelegate(OnLoginChange);
// Clear the callbacks for messages
PlayerInterface.ClearFriendMessageReceivedDelegate(PlayerControllerId,OnFriendMessageReceived);
PlayerInterface.ClearFriendInviteReceivedDelegate(PlayerControllerId,OnFriendInviteReceived);
PlayerInterface.ClearReceivedGameInviteDelegate(PlayerControllerId,OnGameInviteReceived);
}
}
Super.OnUnregister();
}
/** Copies the messages from the subsystem */
function ReadMessages()
{
local OnlineSubsystem OnlineSub;
local OnlinePlayerInterface PlayerInterface;
Messages.Length = 0;
// 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 &&
PlayerInterface.GetLoginStatus(PlayerControllerId) > LS_NotLoggedIn)
{
// Make a copy of the friends messages for the UI
PlayerInterface.GetFriendMessages(PlayerControllerId,Messages);
}
}
}
/**
* Called when a friend invite arrives for a local player
*
* @param LocalUserNum the user that is receiving the invite
* @param RequestingPlayer the player sending the friend request
* @param RequestingNick the nick of the player sending the friend request
* @param Message the message to display to the recipient
*/
function OnFriendInviteReceived(byte LocalUserNum,UniqueNetId RequestingPlayer,string RequestingNick,string Message)
{
ReadMessages();
}
/**
* Handles the notification that a friend message was received
*
* @param LocalUserNum the user that is receiving the message
* @param SendingPlayer the player sending the message
* @param SendingNick the nick of the player sending the message
* @param Message the message to display to the recipient
*/
function OnFriendMessageReceived(byte LocalUserNum,UniqueNetId SendingPlayer,string SendingNick,string Message)
{
ReadMessages();
}
/**
* 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)
{
if (LocalUserNum == PlayerControllerId)
{
ReadMessages();
}
}
/**
* Handles the notification that a game invite has arrived
*
* @param LocalUserNum the user that is receiving the invite
* @param InviterName the nick name of the person sending the invite
*/
function OnGameInviteReceived(byte LocalUserNum,string InviterName)
{
LastInviteFrom = InviterName;
ReadMessages();
}