Initial commit of Command & Conquer Generals and Command & Conquer Generals Zero Hour source code.
This commit is contained in:
parent
2e338c00cb
commit
3d0ee53a05
6072 changed files with 2283311 additions and 0 deletions
188
Generals/Code/GameEngine/Include/Common/Xfer.h
Normal file
188
Generals/Code/GameEngine/Include/Common/Xfer.h
Normal file
|
@ -0,0 +1,188 @@
|
|||
/*
|
||||
** Command & Conquer Generals(tm)
|
||||
** Copyright 2025 Electronic Arts Inc.
|
||||
**
|
||||
** This program 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.
|
||||
**
|
||||
** This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// (c) 2001-2003 Electronic Arts Inc. //
|
||||
// //
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// FILE: Xfer.h ///////////////////////////////////////////////////////////////////////////////////
|
||||
// Author: Colin Day, February 2002
|
||||
// Desc: The Xfer system is capable of setting up operations to work with blocks of data
|
||||
// from other subsystems. It can work things such as file reading, file writing,
|
||||
// CRC computations etc
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifndef __XFER_H_
|
||||
#define __XFER_H_
|
||||
|
||||
// INCLUDES ///////////////////////////////////////////////////////////////////////////////////////
|
||||
#include "Common/STLTypedefs.h"
|
||||
#include "Common/ModelState.h"
|
||||
#include "Common/Science.h"
|
||||
|
||||
// FORWARD REFERENCES /////////////////////////////////////////////////////////////////////////////
|
||||
class Snapshot;
|
||||
typedef Int Color;
|
||||
enum ObjectID;
|
||||
enum DrawableID;
|
||||
enum KindOfType;
|
||||
enum ScienceType;
|
||||
class Matrix3D;
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
typedef UnsignedByte XferVersion;
|
||||
|
||||
//-------------------------------------------------------------------------------------------------
|
||||
//-------------------------------------------------------------------------------------------------
|
||||
enum XferMode
|
||||
{
|
||||
XFER_INVALID = 0,
|
||||
|
||||
XFER_SAVE,
|
||||
XFER_LOAD,
|
||||
XFER_CRC,
|
||||
|
||||
NUM_XFER_TYPES // please keep this last
|
||||
};
|
||||
|
||||
//-------------------------------------------------------------------------------------------------
|
||||
//-------------------------------------------------------------------------------------------------
|
||||
enum XferStatus
|
||||
{
|
||||
XFER_STATUS_INVALID = 0,
|
||||
|
||||
XFER_OK, ///< all is green and good
|
||||
XFER_EOF, ///< end of file encountered
|
||||
XFER_FILE_NOT_FOUND, ///< requested file does not exist
|
||||
XFER_FILE_NOT_OPEN, ///< file was not open
|
||||
XFER_FILE_ALREADY_OPEN, ///< this xfer is already open
|
||||
XFER_READ_ERROR, ///< error reading from file
|
||||
XFER_WRITE_ERROR, ///< error writing to file
|
||||
XFER_MODE_UNKNOWN, ///< unknown xfer mode
|
||||
XFER_SKIP_ERROR, ///< error skipping file
|
||||
XFER_BEGIN_END_MISMATCH, ///< mismatched pair calls of begin/end block
|
||||
XFER_OUT_OF_MEMORY, ///< out of memory
|
||||
XFER_STRING_ERROR, ///< error with strings
|
||||
XFER_INVALID_VERSION, ///< invalid version encountered
|
||||
XFER_INVALID_PARAMETERS, ///< invalid parameters
|
||||
XFER_LIST_NOT_EMPTY, ///< trying to xfer into a list that should be empty, but isn't
|
||||
XFER_UNKNOWN_STRING, ///< unrecognized string value
|
||||
|
||||
XFER_ERROR_UNKNOWN, ///< unknown error (isn't that useful!)
|
||||
|
||||
NUM_XFER_STATUS // please keep this last
|
||||
};
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
enum XferOptions
|
||||
{
|
||||
XO_NONE = 0x00000000,
|
||||
XO_NO_POST_PROCESSING = 0x00000001,
|
||||
|
||||
XO_ALL = 0xFFFFFFFF // keep this last please
|
||||
};
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
typedef Int XferBlockSize;
|
||||
|
||||
//-------------------------------------------------------------------------------------------------
|
||||
//-------------------------------------------------------------------------------------------------
|
||||
class Xfer
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
Xfer( void );
|
||||
virtual ~Xfer( void );
|
||||
|
||||
virtual XferMode getXferMode( void ) { return m_xferMode; }
|
||||
AsciiString getIdentifier( void ) { return m_identifier; }
|
||||
|
||||
// xfer management
|
||||
virtual void setOptions( UnsignedInt options ) { BitSet( m_options, options ); }
|
||||
virtual void clearOptions( UnsignedInt options ) { BitClear( m_options, options ); }
|
||||
virtual UnsignedInt getOptions( void ) { return m_options; }
|
||||
virtual void open( AsciiString identifier ) = 0; ///< xfer open event
|
||||
virtual void close( void ) = 0; ///< xfer close event
|
||||
virtual Int beginBlock( void ) = 0; ///< xfer begin block event
|
||||
virtual void endBlock( void ) = 0; ///< xfer end block event
|
||||
virtual void skip( Int dataSize ) = 0; ///< xfer skip data
|
||||
|
||||
virtual void xferSnapshot( Snapshot *snapshot ) = 0; ///< entry point for xfering a snapshot
|
||||
|
||||
//
|
||||
// default transfer methods, these call the implementation method with the data
|
||||
// parameters. You may use the default, or derive and create new ways to xfer each
|
||||
// of these types of data
|
||||
//
|
||||
virtual void xferVersion( XferVersion *versionData, XferVersion currentVersion );
|
||||
virtual void xferByte( Byte *byteData );
|
||||
virtual void xferUnsignedByte( UnsignedByte *unsignedByteData );
|
||||
virtual void xferBool( Bool *boolData );
|
||||
virtual void xferInt( Int *intData );
|
||||
virtual void xferInt64( Int64 *int64Data );
|
||||
virtual void xferUnsignedInt( UnsignedInt *unsignedIntData );
|
||||
virtual void xferShort( Short *shortData );
|
||||
virtual void xferUnsignedShort( UnsignedShort *unsignedShortData );
|
||||
virtual void xferReal( Real *realData );
|
||||
virtual void xferMarkerLabel( AsciiString asciiStringData ); // This is purely for readability purposes - it is explicitly discarded on load.
|
||||
virtual void xferAsciiString( AsciiString *asciiStringData );
|
||||
virtual void xferUnicodeString( UnicodeString *unicodeStringData );
|
||||
virtual void xferCoord3D( Coord3D *coord3D );
|
||||
virtual void xferICoord3D( ICoord3D *iCoord3D );
|
||||
virtual void xferRegion3D( Region3D *region3D );
|
||||
virtual void xferIRegion3D( IRegion3D *iRegion3D );
|
||||
virtual void xferCoord2D( Coord2D *coord2D );
|
||||
virtual void xferICoord2D( ICoord2D *iCoord2D );
|
||||
virtual void xferRegion2D( Region2D *region2D );
|
||||
virtual void xferIRegion2D( IRegion2D *iRegion2D );
|
||||
virtual void xferRealRange( RealRange *realRange );
|
||||
virtual void xferColor( Color *color );
|
||||
virtual void xferRGBColor( RGBColor *rgbColor );
|
||||
virtual void xferRGBAColorReal( RGBAColorReal *rgbaColorReal );
|
||||
virtual void xferRGBAColorInt( RGBAColorInt *rgbaColorInt );
|
||||
virtual void xferObjectID( ObjectID *objectID );
|
||||
virtual void xferDrawableID( DrawableID *drawableID );
|
||||
virtual void xferSTLObjectIDList( std::list< ObjectID > *objectIDListData );
|
||||
virtual void xferSTLIntList( std::list< Int > *intListData );
|
||||
virtual void xferScienceType( ScienceType *science );
|
||||
virtual void xferScienceVec( ScienceVec *scienceVec );
|
||||
virtual void xferKindOf( KindOfType *kindOfData );
|
||||
virtual void xferUpgradeMask( Int64 *upgradeMaskData );
|
||||
virtual void xferUser( void *data, Int dataSize );
|
||||
virtual void xferMatrix3D( Matrix3D* mtx );
|
||||
virtual void xferMapName( AsciiString *mapNameData );
|
||||
|
||||
protected:
|
||||
|
||||
// this is the actual xfer impelmentation that each derived class should implement
|
||||
virtual void xferImplementation( void *data, Int dataSize ) = 0;
|
||||
|
||||
UnsignedInt m_options; ///< xfer options
|
||||
XferMode m_xferMode; ///< the current xfer mode
|
||||
AsciiString m_identifier; ///< the string identifier
|
||||
|
||||
};
|
||||
|
||||
#endif // __XFER_H_
|
||||
|
Reference in a new issue