/* =========================================================================== 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 . 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 __SAVEGAME_H__ #define __SAVEGAME_H__ /* Save game related helper classes. */ class idSaveGame { public: idSaveGame( idFile* savefile, idFile* stringFile, int inVersion ); ~idSaveGame(); void Close(); void WriteDecls(); void AddObject( const idClass* obj ); void Resize( const int count ) { objects.Resize( count ); } void WriteObjectList(); void Write( const void* buffer, int len ); void WriteInt( const int value ); void WriteJoint( const jointHandle_t value ); void WriteShort( const short value ); void WriteByte( const byte value ); void WriteSignedChar( const signed char value ); void WriteFloat( const float value ); void WriteBool( const bool value ); void WriteString( const char* string ); void WriteVec2( const idVec2& vec ); void WriteVec3( const idVec3& vec ); void WriteVec4( const idVec4& vec ); void WriteVec6( const idVec6& vec ); void WriteWinding( const idWinding& winding ); void WriteBounds( const idBounds& bounds ); void WriteMat3( const idMat3& mat ); void WriteAngles( const idAngles& angles ); void WriteObject( const idClass* obj ); void WriteStaticObject( const idClass& obj ); void WriteDict( const idDict* dict ); void WriteMaterial( const idMaterial* material ); void WriteSkin( const idDeclSkin* skin ); void WriteParticle( const idDeclParticle* particle ); void WriteFX( const idDeclFX* fx ); void WriteSoundShader( const idSoundShader* shader ); void WriteModelDef( const class idDeclModelDef* modelDef ); void WriteModel( const idRenderModel* model ); void WriteUserInterface( const idUserInterface* ui, bool unique ); void WriteRenderEntity( const renderEntity_t& renderEntity ); void WriteRenderLight( const renderLight_t& renderLight ); void WriteRefSound( const refSound_t& refSound ); void WriteRenderView( const renderView_t& view ); void WriteUsercmd( const usercmd_t& usercmd ); void WriteContactInfo( const contactInfo_t& contactInfo ); void WriteTrace( const trace_t& trace ); void WriteTraceModel( const idTraceModel& trace ); void WriteClipModel( const class idClipModel* clipModel ); void WriteSoundCommands(); void WriteBuildNumber( const int value ); int GetBuildNumber() const { return version; } int GetCurrentSaveSize() const { return file->Length(); } private: idFile* file; idFile* stringFile; idCompressor* compressor; idList objects; int version; void CallSave_r( const idTypeInfo* cls, const idClass* obj ); struct stringTableIndex_s { idStr string; int offset; }; idHashIndex stringHash; idList< stringTableIndex_s > stringTable; int curStringTableOffset; }; class idRestoreGame { public: idRestoreGame( idFile* savefile, idFile* stringTableFile, int saveVersion ); ~idRestoreGame(); void ReadDecls(); void CreateObjects(); void RestoreObjects(); void DeleteObjects(); void Error( VERIFY_FORMAT_STRING const char* fmt, ... ); void Read( void* buffer, int len ); void ReadInt( int& value ); void ReadJoint( jointHandle_t& value ); void ReadShort( short& value ); void ReadByte( byte& value ); void ReadSignedChar( signed char& value ); void ReadFloat( float& value ); void ReadBool( bool& value ); void ReadString( idStr& string ); void ReadVec2( idVec2& vec ); void ReadVec3( idVec3& vec ); void ReadVec4( idVec4& vec ); void ReadVec6( idVec6& vec ); void ReadWinding( idWinding& winding ); void ReadBounds( idBounds& bounds ); void ReadMat3( idMat3& mat ); void ReadAngles( idAngles& angles ); void ReadObject( idClass*& obj ); void ReadStaticObject( idClass& obj ); void ReadDict( idDict* dict ); void ReadMaterial( const idMaterial*& material ); void ReadSkin( const idDeclSkin*& skin ); void ReadParticle( const idDeclParticle*& particle ); void ReadFX( const idDeclFX*& fx ); void ReadSoundShader( const idSoundShader*& shader ); void ReadModelDef( const idDeclModelDef*& modelDef ); void ReadModel( idRenderModel*& model ); void ReadUserInterface( idUserInterface*& ui ); void ReadRenderEntity( renderEntity_t& renderEntity ); void ReadRenderLight( renderLight_t& renderLight ); void ReadRefSound( refSound_t& refSound ); void ReadRenderView( renderView_t& view ); void ReadUsercmd( usercmd_t& usercmd ); void ReadContactInfo( contactInfo_t& contactInfo ); void ReadTrace( trace_t& trace ); void ReadTraceModel( idTraceModel& trace ); void ReadClipModel( idClipModel*& clipModel ); void ReadSoundCommands(); // Used to retrieve the saved game buildNumber from within class Restore methods int GetBuildNumber() const { return version; } private: idFile* file; idFile* stringFile; idList objects; int version; int stringTableOffset; void CallRestore_r( const idTypeInfo* cls, idClass* obj ); }; #endif /* !__SAVEGAME_H__*/