123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380 |
- /*
- ===========================================================================
- Doom 3 GPL Source Code
- Copyright (C) 1999-2011 id Software LLC, a ZeniMax Media company.
- This file is part of the Doom 3 GPL Source Code (?Doom 3 Source Code?).
- Doom 3 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 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 Source Code. If not, see <http://www.gnu.org/licenses/>.
- In addition, the Doom 3 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 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 __SESSIONLOCAL_H__
- #define __SESSIONLOCAL_H__
- /*
- IsConnectedToServer();
- IsGameLoaded();
- IsGuiActive();
- IsPlayingRenderDemo();
- if connected to a server
- if handshaking
- if map loading
- if in game
- else if a game loaded
- if in load game menu
- if main menu up
- else if playing render demo
- else
- if error dialog
- full console
- */
- typedef struct {
- usercmd_t cmd;
- int consistencyHash;
- } logCmd_t;
- struct fileTIME_T {
- int index;
- ID_TIME_T timeStamp;
- operator int() const { return timeStamp; }
- };
- typedef struct {
- idDict serverInfo;
- idDict syncedCVars;
- idDict userInfo[MAX_ASYNC_CLIENTS];
- idDict persistentPlayerInfo[MAX_ASYNC_CLIENTS];
- usercmd_t mapSpawnUsercmd[MAX_ASYNC_CLIENTS]; // needed for tracking delta angles
- } mapSpawnData_t;
- typedef enum {
- TD_NO,
- TD_YES,
- TD_YES_THEN_QUIT
- } timeDemo_t;
- const int USERCMD_PER_DEMO_FRAME = 2;
- const int CONNECT_TRANSMIT_TIME = 1000;
- const int MAX_LOGGED_USERCMDS = 60*60*60; // one hour of single player, 15 minutes of four player
- class idSessionLocal : public idSession {
- public:
- idSessionLocal();
- virtual ~idSessionLocal();
- virtual void Init();
- virtual void Shutdown();
- virtual void Stop();
- virtual void UpdateScreen( bool outOfSequence = true );
- virtual void PacifierUpdate();
- virtual void Frame();
- virtual bool IsMultiplayer();
- virtual bool ProcessEvent( const sysEvent_t *event );
- virtual void StartMenu( bool playIntro = false );
- virtual void ExitMenu();
- virtual void GuiFrameEvents();
- virtual void SetGUI( idUserInterface *gui, HandleGuiCommand_t handle );
- virtual const char *MessageBox( msgBoxType_t type, const char *message, const char *title = NULL, bool wait = false, const char *fire_yes = NULL, const char *fire_no = NULL, bool network = false );
- virtual void StopBox( void );
- virtual void DownloadProgressBox( backgroundDownload_t *bgl, const char *title, int progress_start = 0, int progress_end = 100 );
- virtual void SetPlayingSoundWorld();
- virtual void TimeHitch( int msec );
- virtual void ReadCDKey( void );
- virtual void WriteCDKey( void );
- virtual const char *GetCDKey( bool xp );
- virtual bool CheckKey( const char *key, bool netConnect, bool offline_valid[ 2 ] );
- virtual bool CDKeysAreValid( bool strict );
- virtual void ClearCDKey( bool valid[ 2 ] );
- virtual void SetCDKeyGuiVars( void );
- virtual bool WaitingForGameAuth( void );
- virtual void CDKeysAuthReply( bool valid, const char *auth_msg );
- virtual int GetSaveGameVersion( void );
- virtual const char *GetCurrentMapName();
- //=====================================
- int GetLocalClientNum();
- void MoveToNewMap( const char *mapName );
- // loads a map and starts a new game on it
- void StartNewGame( const char *mapName, bool devmap = false );
- void PlayIntroGui();
- void LoadSession( const char *name );
- void SaveSession( const char *name );
- // called by Draw when the scene to scene wipe is still running
- void DrawWipeModel();
- void StartWipe( const char *materialName, bool hold = false);
- void CompleteWipe();
- void ClearWipe();
- void ShowLoadingGui();
- void ScrubSaveGameFileName( idStr &saveFileName ) const;
- idStr GetAutoSaveName( const char *mapName ) const;
- bool LoadGame(const char *saveName);
- bool SaveGame(const char *saveName, bool autosave = false);
- const char *GetAuthMsg( void );
- //=====================================
- static idCVar com_showAngles;
- static idCVar com_showTics;
- static idCVar com_minTics;
- static idCVar com_fixedTic;
- static idCVar com_showDemo;
- static idCVar com_skipGameDraw;
- static idCVar com_aviDemoWidth;
- static idCVar com_aviDemoHeight;
- static idCVar com_aviDemoSamples;
- static idCVar com_aviDemoTics;
- static idCVar com_wipeSeconds;
- static idCVar com_guid;
- static idCVar gui_configServerRate;
- int timeHitch;
- bool menuActive;
- idSoundWorld * menuSoundWorld; // so the game soundWorld can be muted
- bool insideExecuteMapChange; // draw loading screen and update
- // screen on prints
- int bytesNeededForMapLoad; //
- // we don't want to redraw the loading screen for every single
- // console print that happens
- int lastPacifierTime;
- // this is the information required to be set before ExecuteMapChange() is called,
- // which can be saved off at any time with the following commands so it can all be played back
- mapSpawnData_t mapSpawnData;
- idStr currentMapName; // for checking reload on same level
- bool mapSpawned; // cleared on Stop()
- int numClients; // from serverInfo
- int logIndex;
- logCmd_t loggedUsercmds[MAX_LOGGED_USERCMDS];
- int statIndex;
- logStats_t loggedStats[MAX_LOGGED_STATS];
- int lastSaveIndex;
- // each game tic, numClients usercmds will be added, until full
- bool insideUpdateScreen; // true while inside ::UpdateScreen()
- bool loadingSaveGame; // currently loading map from a SaveGame
- idFile * savegameFile; // this is the savegame file to load from
- int savegameVersion;
- idFile * cmdDemoFile; // if non-zero, we are reading commands from a file
- int latchedTicNumber; // set to com_ticNumber each frame
- int lastGameTic; // while latchedTicNumber > lastGameTic, run game frames
- int lastDemoTic;
- bool syncNextGameFrame;
- bool aviCaptureMode; // if true, screenshots will be taken and sound captured
- idStr aviDemoShortName; //
- float aviDemoFrameCount;
- int aviTicStart;
- timeDemo_t timeDemo;
- int timeDemoStartTime;
- int numDemoFrames; // for timeDemo and demoShot
- int demoTimeOffset;
- renderView_t currentDemoRenderView;
- // the next one will be read when
- // com_frameTime + demoTimeOffset > currentDemoRenderView.
- // TODO: make this private (after sync networking removal and idnet tweaks)
- idUserInterface * guiActive;
- HandleGuiCommand_t guiHandle;
- idUserInterface * guiInGame;
- idUserInterface * guiMainMenu;
- idListGUI * guiMainMenu_MapList; // easy map list handling
- idUserInterface * guiRestartMenu;
- idUserInterface * guiLoading;
- idUserInterface * guiIntro;
- idUserInterface * guiGameOver;
- idUserInterface * guiTest;
- idUserInterface * guiTakeNotes;
- //bc
- idListGUI * guiMainMenu_spMapList; // easy map list handling
- idStrList spMapList;
-
- idUserInterface * guiMsg;
- idUserInterface * guiMsgRestore; // store the calling GUI for restore
- idStr msgFireBack[ 2 ];
- bool msgRunning;
- int msgRetIndex;
- bool msgIgnoreButtons;
-
- bool waitingOnBind;
- const idMaterial * whiteMaterial;
- const idMaterial * wipeMaterial;
- int wipeStartTic;
- int wipeStopTic;
- bool wipeHold;
- #if ID_CONSOLE_LOCK
- int emptyDrawCount; // watchdog to force the main menu to restart
- #endif
- //=====================================
- void Clear();
- void DrawCmdGraph();
- void Draw();
- void WriteCmdDemo( const char *name, bool save = false);
- void StartPlayingCmdDemo( const char *demoName);
- void TimeCmdDemo( const char *demoName);
- void SaveCmdDemoToFile(idFile *file);
- void LoadCmdDemoFromFile(idFile *file);
- void StartRecordingRenderDemo( const char *name );
- void StopRecordingRenderDemo();
- void StartPlayingRenderDemo( idStr name );
- void StopPlayingRenderDemo();
- void CompressDemoFile( const char *scheme, const char *name );
- void TimeRenderDemo( const char *name, bool twice = false );
- void AVIRenderDemo( const char *name );
- void AVICmdDemo( const char *name );
- void AVIGame( const char *name );
- void BeginAVICapture( const char *name );
- void EndAVICapture();
- void AdvanceRenderDemo( bool singleFrameOnly );
- void RunGameTic();
-
- void FinishCmdLoad();
- void LoadLoadingGui(const char *mapName);
- void DemoShot( const char *name );
- void TestGUI( const char *name );
- int GetBytesNeededForMapLoad( const char *mapName );
- void SetBytesNeededForMapLoad( const char *mapName, int bytesNeeded );
- void ExecuteMapChange( bool noFadeWipe = false );
- void UnloadMap();
- // return true if we actually waiting on an auth reply
- bool MaybeWaitOnCDKey( void );
- //------------------
- // Session_menu.cpp
- idStrList loadGameList;
- idStrList modsList;
- idUserInterface * GetActiveMenu();
- void DispatchCommand( idUserInterface *gui, const char *menuCommand, bool doIngame = true );
- void MenuEvent( const sysEvent_t *event );
- bool HandleSaveGameMenuCommand( idCmdArgs &args, int &icmd );
- void HandleInGameCommands( const char *menuCommand );
- void HandleMainMenuCommands( const char *menuCommand );
- void HandleChatMenuCommands( const char *menuCommand );
- void HandleIntroMenuCommands( const char *menuCommand );
- void HandleRestartMenuCommands( const char *menuCommand );
- void HandleMsgCommands( const char *menuCommand );
- void HandleNoteCommands( const char *menuCommand );
- void GetSaveGameList( idStrList &fileList, idList<fileTIME_T> &fileTimes );
- void TakeNotes( const char * p, bool extended = false );
- void UpdateMPLevelShot( void );
- void SetSaveGameGuiVars( void );
- void SetMainMenuGuiVars( void );
- void SetModsMenuGuiVars( void );
- void SetMainMenuSkin( void );
- void SetPbMenuGuiVars( void );
-
-
- private:
- bool BoxDialogSanityCheck( void );
- void EmitGameAuth( void );
-
- typedef enum {
- CDKEY_UNKNOWN, // need to perform checks on the key
- CDKEY_INVALID, // that key is wrong
- CDKEY_OK, // valid
- CDKEY_CHECKING, // sent a check request ( gameAuth only )
- CDKEY_NA // does not apply, xp key when xp is not present
- } cdKeyState_t;
- static const int CDKEY_BUF_LEN = 17;
- static const int CDKEY_AUTH_TIMEOUT = 5000;
- char cdkey[ CDKEY_BUF_LEN ];
- cdKeyState_t cdkey_state;
- char xpkey[ CDKEY_BUF_LEN ];
- cdKeyState_t xpkey_state;
- int authEmitTimeout;
- bool authWaitBox;
- idStr authMsg;
- };
- extern idSessionLocal sessLocal;
- #endif /* !__SESSIONLOCAL_H__ */
|