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

194 lines
5.4 KiB
Ucode

/**
* Copyright 1998-2013 Epic Games, Inc. All Rights Reserved.
*/
/**
* This class is responsible for mapping properties in an OnlineGameSettings
* object to something that the UI system can consume.
*
* NOTE: Each game needs to derive at least one class from this one in
* order to expose the game's specific settings class(es)
*/
class UIDataStore_OnlineGameSettings extends UIDataStore_Settings
native(inherit)
abstract
transient;
/** Holds the information used to expose 1 or more game settings providers */
struct native GameSettingsCfg
{
/** The OnlineGameSettings derived class to create and expose */
var class<OnlineGameSettings> GameSettingsClass;
/** The provider that was created to process the specified game settings object */
var UIDataProvider_Settings Provider;
/** The object we are exposing to the UI */
var OnlineGameSettings GameSettings;
/** Used to set/select by name */
var name SettingsName;
};
/** The list of settings that this data store is exposing */
var const array<GameSettingsCfg> GameSettingsCfgList;
/** the class to use for creating the data provider for each game settings object */
var const class<UIDataProvider_Settings> SettingsProviderClass;
/** The index into the list that is currently being exposed */
var int SelectedIndex;
cpptext
{
private:
/**
* Loads and creates an instance of the registered provider objects for each
* registered OnlineGameSettings class
*/
virtual void InitializeDataStore(void);
}
/**
* Called to kick create an online game based upon the settings
*
* @param WorldInfo the world info object. useful for actor iterators
* @param ControllerIndex the ControllerId for the player to create the game for
*
* @return TRUE if the game was created, FALSE otherwise
*/
event bool CreateGame( byte ControllerIndex )
{
local OnlineSubsystem OnlineSub;
local OnlineGameInterface GameInterface;
// Figure out if we have an online subsystem registered
OnlineSub = class'GameEngine'.static.GetOnlineSubsystem();
if (OnlineSub != None)
{
// Grab the game interface to verify the subsystem supports it
GameInterface = OnlineSub.GameInterface;
if (GameInterface != None)
{
// Start the async task
return GameInterface.CreateOnlineGame(ControllerIndex,'Game',GameSettingsCfgList[SelectedIndex].GameSettings);
}
else
{
`warn("OnlineSubsystem does not support the game interface. Can't create online games");
}
}
else
{
`warn("No OnlineSubsystem present. Can't create online games");
}
return false;
}
/** Returns the game settings object that is currently selected */
event OnlineGameSettings GetCurrentGameSettings()
{
return GameSettingsCfgList[SelectedIndex].GameSettings;
}
/** Returns the provider object that is currently selected */
event UIDataProvider_Settings GetCurrentProvider()
{
return GameSettingsCfgList[SelectedIndex].Provider;
}
/**
* Sets the index into the list of game settings to use
*
* @param NewIndex the new index to use
*/
event SetCurrentByIndex(int NewIndex)
{
// Range check to prevent accessed nones
if (NewIndex >= 0 && NewIndex < GameSettingsCfgList.Length)
{
SelectedIndex = NewIndex;
// notify any subscribers that we have new data
RefreshSubscribers( , true, GetCurrentProvider());
}
else
{
`Log("Invalid index ("$NewIndex$") specified to SetCurrentByIndex() on "$Self);
}
}
/**
* Sets the index into the list of game settings to use
*
* @param SettingsName the name of the setting to find
*/
event SetCurrentByName(name SettingsName)
{
local int Index;
for (Index = 0; Index < GameSettingsCfgList.Length; Index++)
{
// If this is the one we want, set it and refresh
if (GameSettingsCfgList[Index].SettingsName == SettingsName)
{
SetCurrentByIndex(Index);
return;
}
}
`Log("Invalid name ("$SettingsName$") specified to SetCurrentByName() on "$Self);
}
/** Moves to the next item in the list */
event MoveToNext()
{
local int NewIndex;
NewIndex = Min(SelectedIndex + 1, GameSettingsCfgList.Length - 1);
if ( SelectedIndex != NewIndex )
{
SetCurrentByIndex(NewIndex);
}
}
/** Moves to the previous item in the list */
event MoveToPrevious()
{
local int NewIndex;
NewIndex = Max(SelectedIndex - 1,0);
if ( SelectedIndex != NewIndex )
{
SetCurrentByIndex(NewIndex);
}
}
/* === UIDataStore interface === */
/**
* Called when this data store is added to the data store manager's list of active data stores.
*
* @param PlayerOwner the player that will be associated with this DataStore. Only relevant if this data store is
* associated with a particular player; NULL if this is a global data store.
*/
event Registered( LocalPlayer PlayerOwner )
{
Super.Registered(PlayerOwner);
}
/**
* Called when this data store is removed from the data store manager's list of active data stores.
*
* @param PlayerOwner the player that will be associated with this DataStore. Only relevant if this data store is
* associated with a particular player; NULL if this is a global data store.
*/
event Unregistered( LocalPlayer PlayerOwner )
{
Super.Unregistered(PlayerOwner);
}
defaultproperties
{
// derived classes should keep the same tag if they are replacing the OnlineGameSettings data store
Tag=OnlineGameSettings
SettingsProviderClass=class'Engine.UIDataProvider_Settings'
}