1
0
KF2-Dev-Scripts/Engine/Classes/OnlineRecentPlayersList.uc

372 lines
11 KiB
Ucode
Raw Normal View History

2020-12-13 15:01:13 +00:00
/**
* Copyright 1998-2013 Epic Games, Inc. All Rights Reserved.
*/
/**
* This class holds a list of players met online that the players on this PC/console
* encountered. It does not persist the list. Both parties and individuals are tracked
* with the individuals containing all party members. Note that it only holds the
* unique ids of the players.
*/
class OnlineRecentPlayersList extends Object
config(Engine);
/** The set of players that players on this PC/console have recently encountered */
var array<UniqueNetId> RecentPlayers;
/** Holds a set of players that made up a party */
struct RecentParty
{
/** The player that was the party leader */
var UniqueNetid PartyLeader;
/** The list of players that comprise the party (should include the leader) */
var array<UniqueNetId> PartyMembers;
};
/** The list of recent parties that the players on this PC/console has encountered */
var array<RecentParty> RecentParties;
/** Holds the information about the last party that a player on this pc/console was in */
var RecentParty LastParty;
/** The size of the recent player list to allow before losing the oldest entries */
var config int MaxRecentPlayers;
/** The size of the recent party list to allow before losing the oldest entries */
var config int MaxRecentParties;
/** The position in the array that new players should be added at */
var int RecentPlayersAddIndex;
/** The position in the array that new parties should be added at */
var int RecentPartiesAddIndex;
/** The set of people that the player/PC/console are currently playing with/against */
struct CurrentPlayerMet
{
/** The team the player is on */
var int TeamNum;
/** The skill rating of the player */
var int Skill;
/** The unique net id for the player */
var UniqueNetId NetId;
};
/** Holds the list of current players (the set of players currently in a session */
var private array<CurrentPlayerMet> CurrentPlayers;
/**
* Adds a player to the recent players list
*
* @param NewPlayer the player being added
*/
function AddPlayerToRecentPlayers(UniqueNetId NewPlayer)
{
local int FindIndex;
// Search the list of players for this one and only add if not present
FindIndex = RecentPlayers.Find('Uid',NewPlayer.Uid);
if (FindIndex == INDEX_NONE)
{
// Wrap back to the oldest entry if we've hit our max
if (RecentPlayersAddIndex >= MaxRecentPlayers)
{
RecentPlayersAddIndex = 0;
}
// Make sure the array has space
if (RecentPlayersAddIndex + 1 >= RecentPlayers.Length)
{
RecentPlayers.Length = RecentPlayersAddIndex + 1;
}
RecentPlayers[RecentPlayersAddIndex] = NewPlayer;
// Move to the next available slot. This will wrap to zero if it grows too large
RecentPlayersAddIndex++;
}
}
/** Clears the recent players list and resets the add index */
function ClearRecentPlayers()
{
RecentPlayersAddIndex = 0;
RecentPlayers.Length = 0;
}
/**
* Adds a player to the recent players list
*
* @param PartyLeader the player being added
* @param PartyMembers the members of the party
*/
function AddPartyToRecentParties(UniqueNetId PartyLeader,const out array<UniqueNetId> PartyMembers)
{
local int FindIndex;
// Search the list of parties for the leader and only add if not present
FindIndex = RecentParties.Find('PartyLeader',PartyLeader);
if (FindIndex == INDEX_NONE)
{
// Wrap back to the oldest entry if we've hit our max
if (RecentPartiesAddIndex >= MaxRecentParties)
{
RecentPartiesAddIndex = 0;
}
// Make sure the array has space
if (RecentPartiesAddIndex + 1 >= RecentParties.Length)
{
RecentParties.Length = RecentPartiesAddIndex + 1;
}
RecentParties[RecentPartiesAddIndex].PartyLeader = PartyLeader;
RecentParties[RecentPartiesAddIndex].PartyMembers = PartyMembers;
// Move to the next available slot. This will wrap to zero if it grows too large
RecentPartiesAddIndex++;
}
}
/** Clears the recent parties list and resets the add index */
function ClearRecentParties()
{
RecentPartiesAddIndex = 0;
RecentParties.Length = 0;
}
/**
* Builds a single list of players from the recent parties list
*
* @param Players the array getting the data copied into it
*/
function GetPlayersFromRecentParties(out array<UniqueNetId> Players)
{
local int PartyIndex;
local int MemberIndex;
local int AddMemberAt;
Players.Length = 0;
AddMemberAt = 0;
// Look at each registered party and add them for showing
for (PartyIndex = 0; PartyIndex < RecentParties.Length; PartyIndex++)
{
for (MemberIndex = 0; MemberIndex < RecentParties[PartyIndex].PartyMembers.Length; MemberIndex++)
{
Players.Length = AddMemberAt + 1;
Players[AddMemberAt] = RecentParties[PartyIndex].PartyMembers[MemberIndex];
}
}
}
/**
* Builds a single list of players from the current players list
*
* @param Players the array getting the data copied into it
*/
function GetPlayersFromCurrentPlayers(out array<UniqueNetId> Players)
{
local int PlayerIndex;
Players.Length = 0;
// Look at each registered party and add them for showing
for (PlayerIndex = 0; PlayerIndex < CurrentPlayers.Length; PlayerIndex++)
{
Players.AddItem(CurrentPlayers[PlayerIndex].NetId);
}
}
/**
* Finds the player indicated and returns their skill rating
*
* @param Player the player to search for
*
* @return the skill for the specified player
*/
function int GetSkillForCurrentPlayer(UniqueNetId Player)
{
local int PlayerIndex;
// Search for the specified player and return their skill
for (PlayerIndex = 0; PlayerIndex < CurrentPlayers.Length; PlayerIndex++)
{
if (CurrentPlayers[PlayerIndex].NetId == Player)
{
return CurrentPlayers[PlayerIndex].Skill;
}
}
return 0;
}
/**
* Finds the player indicated and returns their team that was assigned
*
* @param Player the player to search for
*
* @return the team number for the specified player
*/
function int GetTeamForCurrentPlayer(UniqueNetId Player)
{
local int PlayerIndex;
// Search for the specified player and return their team number
for (PlayerIndex = 0; PlayerIndex < CurrentPlayers.Length; PlayerIndex++)
{
if (CurrentPlayers[PlayerIndex].NetId == Player)
{
return CurrentPlayers[PlayerIndex].TeamNum;
}
}
return 255;
}
/**
* Adds a player to the recent players list
*
* @param PartyLeader the player being added
* @param PartyMembers the members of the party
*/
function SetLastParty(UniqueNetId PartyLeader,const out array<UniqueNetId> PartyMembers)
{
LastParty.PartyLeader = PartyLeader;
LastParty.PartyMembers = PartyMembers;
}
/**
* Helper function for showing the recent players list
*
* @param LocalUserNum the controller number of the associated user
* @param Title the title to use for the UI
* @param Description the text to show at the top of the UI
*
* @return TRUE if it was able to show the UI, FALSE if it failed
*/
function bool ShowRecentPlayerList(byte LocalUserNum,string Title,string Description)
{
local OnlineSubsystem OnlineSub;
OnlineSub = class'GameEngine'.static.GetOnlineSubsystem();
if (OnlineSub != None &&
OnlineSub.PlayerInterfaceEx != None)
{
// Use the custom UI list to display them
return OnlineSub.PlayerInterfaceEx.ShowCustomPlayersUI(LocalUserNum,RecentPlayers,Title,Description);
}
return false;
}
/**
* Builds a single player list out of the various parties encountered and shows
*
* @param LocalUserNum the controller number of the associated user
* @param Title the title to use for the UI
* @param Description the text to show at the top of the UI
*
* @return TRUE if it was able to show the UI, FALSE if it failed
*/
function bool ShowRecentPartiesPlayerList(byte LocalUserNum,string Title,string Description)
{
local OnlineSubsystem OnlineSub;
local array<UniqueNetId> Players;
OnlineSub = class'GameEngine'.static.GetOnlineSubsystem();
if (OnlineSub != None &&
OnlineSub.PlayerInterfaceEx != None)
{
GetPlayersFromRecentParties(Players);
// Use the custom UI list to display them
return OnlineSub.PlayerInterfaceEx.ShowCustomPlayersUI(LocalUserNum,Players,Title,Description);
}
return false;
}
/**
* Shows the last party that you were in as a player list
*
* @param LocalUserNum the controller number of the associated user
* @param Title the title to use for the UI
* @param Description the text to show at the top of the UI
*
* @return TRUE if it was able to show the UI, FALSE if it failed
*/
function bool ShowLastPartyPlayerList(byte LocalUserNum,string Title,string Description)
{
local OnlineSubsystem OnlineSub;
OnlineSub = class'GameEngine'.static.GetOnlineSubsystem();
if (OnlineSub != None &&
OnlineSub.PlayerInterfaceEx != None)
{
// Use the custom UI list to display them
return OnlineSub.PlayerInterfaceEx.ShowCustomPlayersUI(LocalUserNum,LastParty.PartyMembers,Title,Description);
}
return false;
}
/**
* Builds a single player list out of the players in the current players list
*
* @param LocalUserNum the controller number of the associated user
* @param Title the title to use for the UI
* @param Description the text to show at the top of the UI
*
* @return TRUE if it was able to show the UI, FALSE if it failed
*/
function bool ShowCurrentPlayersList(byte LocalUserNum,string Title,string Description)
{
local OnlineSubsystem OnlineSub;
local array<UniqueNetId> Players;
OnlineSub = class'GameEngine'.static.GetOnlineSubsystem();
if (OnlineSub != None &&
OnlineSub.PlayerInterfaceEx != None)
{
GetPlayersFromCurrentPlayers(Players);
// Use the custom UI list to display them
return OnlineSub.PlayerInterfaceEx.ShowCustomPlayersUI(LocalUserNum,Players,Title,Description);
}
return false;
}
`if(`notdefined(FINAL_RELEASE))
/** Log list of players for debugging */
function DumpPlayersList(const out array<CurrentPlayerMet> Players)
{
local OnlineSubsystem OnlineSub;
local int PlayerIdx,TeamNum;
local UniqueNetId NetId;
OnlineSub = class'GameEngine'.static.GetOnlineSubsystem();
if (OnlineSub != None)
{
for (PlayerIdx=0; PlayerIdx<Players.Length; PlayerIdx++)
{
NetId = Players[PlayerIdx].NetId;
TeamNum = Players[PlayerIdx].TeamNum;
`Log("DumpPlayersList: "
$" TeamNum="$TeamNum
$" PlayerIdx="$PlayerIdx
$" UniqueId="$OnlineSub.UniqueNetIdToString(NetId)
,,'DevOnline');
}
}
}
/** Log current players list for debugging */
function DumpCurrentPlayers()
{
DumpPlayersList(CurrentPlayers);
}
`endif
/**
* Sets the current player list to the data specified
*
* @param Players the list of players to copy
*/
function SetCurrentPlayersList(const array<CurrentPlayerMet> Players)
{
`if(`notdefined(FINAL_RELEASE))
DumpPlayersList(Players);
`endif
CurrentPlayers = Players;
}
/** @return the number of players in the current player session */
function int GetCurrentPlayersListCount()
{
return CurrentPlayers.Length;
}