mirror of
https://github.com/id-Software/DOOM-3-BFG.git
synced 2024-11-25 05:21:39 +00:00
150 lines
5.9 KiB
C
150 lines
5.9 KiB
C
|
/*
|
||
|
===========================================================================
|
||
|
|
||
|
Doom 3 BFG Edition GPL Source Code
|
||
|
Copyright (C) 1993-2012 id Software LLC, a ZeniMax Media company.
|
||
|
|
||
|
This file is part of the Doom 3 BFG Edition GPL Source Code ("Doom 3 BFG Edition Source Code").
|
||
|
|
||
|
Doom 3 BFG Edition Source Code is free software: you can redistribute it and/or modify
|
||
|
it under the terms of the GNU General Public License as published by
|
||
|
the Free Software Foundation, either version 3 of the License, or
|
||
|
(at your option) any later version.
|
||
|
|
||
|
Doom 3 BFG Edition Source Code is distributed in the hope that it will be useful,
|
||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
GNU General Public License for more details.
|
||
|
|
||
|
You should have received a copy of the GNU General Public License
|
||
|
along with Doom 3 BFG Edition Source Code. If not, see <http://www.gnu.org/licenses/>.
|
||
|
|
||
|
In addition, the Doom 3 BFG Edition Source Code is also subject to certain additional terms. You should have received a copy of these additional terms immediately following the terms and conditions of the GNU General Public License which accompanied the Doom 3 BFG Edition Source Code. If not, please request a copy in writing from id Software at the address below.
|
||
|
|
||
|
If you have questions concerning this license or the applicable additional terms, you may contact in writing id Software LLC, c/o ZeniMax Media Inc., Suite 120, Rockville, Maryland 20850 USA.
|
||
|
|
||
|
===========================================================================
|
||
|
*/
|
||
|
#ifndef __SYS_LOCALUSER_H__
|
||
|
#define __SYS_LOCALUSER_H__
|
||
|
|
||
|
#include "sys_profile.h"
|
||
|
|
||
|
struct achievementDescription_t;
|
||
|
class idPlayerProfile;
|
||
|
class idProfileMgr;
|
||
|
|
||
|
enum onlineCaps_t {
|
||
|
CAP_IS_ONLINE = BIT( 0 ),
|
||
|
CAP_BLOCKED_PERMISSION = BIT( 1 ),
|
||
|
CAP_CAN_PLAY_ONLINE = BIT( 2 ),
|
||
|
};
|
||
|
|
||
|
class idSerializer;
|
||
|
|
||
|
/*
|
||
|
================================================
|
||
|
localUserHandle_t
|
||
|
================================================
|
||
|
*/
|
||
|
struct localUserHandle_t {
|
||
|
public:
|
||
|
typedef uint32 userHandleType_t;
|
||
|
|
||
|
localUserHandle_t() : handle( 0 ) {}
|
||
|
|
||
|
explicit localUserHandle_t( userHandleType_t handle_ ) : handle( handle_ ) {}
|
||
|
|
||
|
bool operator == ( const localUserHandle_t & other ) const {
|
||
|
return handle == other.handle;
|
||
|
}
|
||
|
|
||
|
bool operator < ( const localUserHandle_t & other ) const {
|
||
|
return handle < other.handle;
|
||
|
}
|
||
|
|
||
|
bool IsValid() const { return handle > 0; }
|
||
|
|
||
|
void WriteToMsg( idBitMsg & msg ) {
|
||
|
msg.WriteLong( handle );
|
||
|
}
|
||
|
|
||
|
void ReadFromMsg( const idBitMsg & msg ) {
|
||
|
handle = msg.ReadLong();
|
||
|
}
|
||
|
|
||
|
void Serialize( idSerializer & ser );
|
||
|
|
||
|
private:
|
||
|
userHandleType_t handle;
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
================================================
|
||
|
idLocalUser
|
||
|
An idLocalUser is a user holding a controller.
|
||
|
It represents someone controlling the menu or game.
|
||
|
They may not necessarily be in a game (which would be a session user of TYPE_GAME).
|
||
|
A controller user references an input device (which is a gamepad, keyboard, etc).
|
||
|
================================================
|
||
|
*/
|
||
|
class idLocalUser {
|
||
|
public:
|
||
|
idLocalUser();
|
||
|
virtual ~idLocalUser() {}
|
||
|
|
||
|
void Pump();
|
||
|
virtual void PumpPlatform() = 0;
|
||
|
|
||
|
virtual bool IsPersistent() const { return IsProfileReady(); } // True if this user is a persistent user, and can save stats, etc (signed in)
|
||
|
virtual bool IsProfileReady() const = 0; // True if IsPersistent is true AND profile is signed into LIVE service
|
||
|
virtual bool IsOnline() const = 0; // True if this user has online capabilities
|
||
|
virtual uint32 GetOnlineCaps() const = 0; // Returns combination of onlineCaps_t flags
|
||
|
virtual bool HasOwnerChanged() const { return false; } // Whether or not the original persistent owner has changed since it was first registered
|
||
|
virtual int GetInputDevice() const = 0; // Input device of controller
|
||
|
virtual const char * GetGamerTag() const = 0; // Gamertag of user
|
||
|
virtual bool IsInParty() const = 0; // True if the user is in a party (do we support this on pc and ps3? )
|
||
|
virtual int GetPartyCount() const = 0; // Gets the amount of users in the party
|
||
|
|
||
|
// Storage related
|
||
|
virtual bool IsStorageDeviceAvailable() const; // Only false if the player has chosen to play without a storage device, only possible on 360, if available, everything needs to check for available space
|
||
|
virtual void ResetStorageDevice();
|
||
|
virtual bool StorageSizeAvailable( uint64 minSizeInBytes, int64 & neededBytes );
|
||
|
|
||
|
// These set stats within the profile as a enum/value pair
|
||
|
virtual void SetStatInt( int stat, int value );
|
||
|
virtual void SetStatFloat( int stat, float value );
|
||
|
virtual int GetStatInt( int stat );
|
||
|
virtual float GetStatFloat( int stat);
|
||
|
|
||
|
virtual idPlayerProfile * GetProfile() { return GetProfileMgr().GetProfile(); }
|
||
|
const idPlayerProfile * GetProfile() const { return const_cast< idLocalUser * >( this )->GetProfile(); }
|
||
|
|
||
|
idProfileMgr & GetProfileMgr() { return profileMgr; }
|
||
|
|
||
|
// Helper state to determine if the user is joining a party lobby or not
|
||
|
void SetJoiningLobby( int lobbyType, bool value ) { joiningLobby[lobbyType] = value; }
|
||
|
bool IsJoiningLobby( int lobbyType ) const { return joiningLobby[lobbyType]; }
|
||
|
|
||
|
bool CanPlayOnline() const { return ( GetOnlineCaps() & CAP_CAN_PLAY_ONLINE ) > 0; }
|
||
|
|
||
|
localUserHandle_t GetLocalUserHandle() const { return localUserHandle; }
|
||
|
void SetLocalUserHandle( localUserHandle_t newHandle ) { localUserHandle = newHandle; }
|
||
|
|
||
|
// Creates a new profile if one not already there
|
||
|
void LoadProfileSettings();
|
||
|
void SaveProfileSettings();
|
||
|
|
||
|
// Will attempt to sync the achievement bits between the server and the localUser when the achievement system is ready
|
||
|
void RequestSyncAchievements() { syncAchievementsRequested = true; }
|
||
|
|
||
|
private:
|
||
|
bool joiningLobby[2];
|
||
|
localUserHandle_t localUserHandle;
|
||
|
idProfileMgr profileMgr;
|
||
|
|
||
|
bool syncAchievementsRequested;
|
||
|
};
|
||
|
|
||
|
#endif // __SYS_LOCALUSER_H__
|