//------------------------------------------------------------------------------ // Load/save example object //------------------------------------------------------------------------------ #include "console/consoleTypes.h" #include "console/simBase.h" #include "core/fileStream.h" class LoadSaveObject : public SimObject { typedef SimObject Parent; protected: S32 mSomeS32; StringTableEntry mSomeString; F32 mSomeF32; public: LoadSaveObject() : mSomeS32(0), mSomeString( "" ), mSomeF32( 0.f ) {}; static void initPersistFields(); bool saveToFile( const char *filename ) const; bool loadFromFile( const char *filename ); DECLARE_CONOBJECT(LoadSaveObject); }; //------------------------------------------------------------------------------ IMPLEMENT_CONOBJECT(LoadSaveObject); void LoadSaveObject::initPersistFields() { Parent::initPersistFields(); addField( "someS32", TypeS32, Offset( mSomeS32, LoadSaveObject ) ); addField( "someString", TypeCaseString, Offset( mSomeString, LoadSaveObject ) ); addField( "someF32", TypeF32, Offset( mSomeF32, LoadSaveObject ) ); } //------------------------------------------------------------------------------ bool LoadSaveObject::saveToFile( const char *filename ) const { char fname[1024]; if( filename ) if( Con::expandScriptFilename( fname, sizeof( fname ), filename ) ) filename = fname; FileStream fs; if( !fs.open( filename, FileStream::Write ) ) { Con::errorf( "LoadSaveObject: Could not open '%s'for writing.", filename ); return false; } fs.write( mSomeS32 ); fs.writeString( mSomeString, dStrlen( mSomeString ) ); fs.write( mSomeF32 ); fs.close(); return true; } ConsoleMethod( LoadSaveObject, saveToFile, bool, 3, 3, "LoadSaveObject.saveToFile( filename );" ) { return object->saveToFile( argv[2] ); } //------------------------------------------------------------------------------ bool LoadSaveObject::loadFromFile( const char *filename ) { char fname[1024]; if( filename ) if( Con::expandScriptFilename( fname, sizeof( fname ), filename ) ) filename = fname; FileStream fs; if( !fs.open( filename, FileStream::Read ) ) { Con::errorf( "LoadSaveObject: Could not open '%s' for reading.", filename ); return false; } fs.read( &mSomeS32 ); char buffer[256]; fs.readString( buffer ); mSomeString = StringTable->insert( buffer ); fs.read( &mSomeF32 ); fs.close(); return true; } ConsoleMethod( LoadSaveObject, loadFromFile, bool, 3, 3, "LoadSaveObject.loadFromFile( filename );" ) { return object->loadFromFile( argv[2] ); }