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
174
GeneralsMD/Code/GameEngine/Include/GameClient/Image.h
Normal file
174
GeneralsMD/Code/GameEngine/Include/GameClient/Image.h
Normal file
|
@ -0,0 +1,174 @@
|
|||
/*
|
||||
** Command & Conquer Generals Zero Hour(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: Image.h //////////////////////////////////////////////////////////////////////////////////
|
||||
// Created: Colin Day, June 2001
|
||||
// Desc: High level representation of images, this is currently being
|
||||
// written so we have a way to refer to images in the windows GUI.
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifndef __IMAGE_H_
|
||||
#define __IMAGE_H_
|
||||
|
||||
#include "Common/AsciiString.h"
|
||||
#include "Common/GameMemory.h"
|
||||
#include "Common/SubsystemInterface.h"
|
||||
#include <map>
|
||||
|
||||
struct FieldParse;
|
||||
class INI;
|
||||
|
||||
//-------------------------------------------------------------------------------------------------
|
||||
/** Image status bits. Keep in sync with imageStatusNames[] */
|
||||
//-------------------------------------------------------------------------------------------------
|
||||
typedef enum
|
||||
{
|
||||
IMAGE_STATUS_NONE = 0x00000000,
|
||||
IMAGE_STATUS_ROTATED_90_CLOCKWISE = 0x00000001, // image should be treated as rotated
|
||||
IMAGE_STATUS_RAW_TEXTURE = 0x00000002, // image struct contains raw texture data
|
||||
|
||||
} ImageStatus;
|
||||
#ifdef DEFINE_IMAGE_STATUS_NAMES
|
||||
static const char *imageStatusNames[] =
|
||||
{
|
||||
"ROTATED_90_CLOCKWISE",
|
||||
"RAW_TEXTURE",
|
||||
NULL
|
||||
};
|
||||
#endif // end DEFINE_IMAGE_STATUS_NAMES
|
||||
|
||||
//-------------------------------------------------------------------------------------------------
|
||||
/** Image bitmap information */
|
||||
//-------------------------------------------------------------------------------------------------
|
||||
class Image : public MemoryPoolObject
|
||||
{
|
||||
|
||||
MEMORY_POOL_GLUE_WITH_USERLOOKUP_CREATE( Image, "Image" );
|
||||
|
||||
public:
|
||||
|
||||
Image( void );
|
||||
// virtual desctructor defined by memory pool object
|
||||
|
||||
void setName( AsciiString name ); ///< set image name
|
||||
AsciiString getName( void ) const; ///< return name
|
||||
void setFilename( AsciiString filename ); ///< set filename
|
||||
AsciiString getFilename( void ) const; ///< return filename
|
||||
void setUV( Region2D *uv ); ///< set UV coord range
|
||||
const Region2D *getUV( void ) const; ///< get UV coords
|
||||
void setTextureWidth( Int width ); ///< set width of texture page this image is on
|
||||
void setTextureHeight( Int height ); ///< set height of texture page this image is on
|
||||
const ICoord2D *getTextureSize( void ) const; ///< return the texture size defined
|
||||
void setImageSize( ICoord2D *size ); ///< set image width and height
|
||||
const ICoord2D *getImageSize( void ) const; ///< get size
|
||||
Int getImageWidth( void ) const; ///< get width
|
||||
Int getImageHeight( void ) const; ///< get height
|
||||
void setRawTextureData( void *data ); ///< set raw texture data
|
||||
const void *getRawTextureData( void ) const; ///< get raw texture data
|
||||
UnsignedInt setStatus( UnsignedInt bit ); ///< set status bit
|
||||
UnsignedInt clearStatus( UnsignedInt bit ); ///< clear status bit
|
||||
UnsignedInt getStatus( void ) const; ///< get status bits
|
||||
|
||||
|
||||
// for parsing from INI
|
||||
const FieldParse *getFieldParse( void ) const { return m_imageFieldParseTable; }
|
||||
static void parseImageCoords( INI* ini, void *instance, void *store, const void* /*userData*/ );
|
||||
static void parseImageStatus( INI* ini, void *instance, void *store, const void* /*userData*/ );
|
||||
|
||||
protected:
|
||||
|
||||
friend class ImageCollection;
|
||||
|
||||
AsciiString m_name; ///< name for this image
|
||||
AsciiString m_filename; ///< texture filename this image is in
|
||||
ICoord2D m_textureSize; ///< size of the texture this image is a part of
|
||||
Region2D m_UVCoords; ///< texture UV coords for image
|
||||
ICoord2D m_imageSize; ///< dimensions of image
|
||||
void *m_rawTextureData; ///< raw texture data
|
||||
UnsignedInt m_status; ///< status bits from ImageStatus
|
||||
|
||||
static const FieldParse m_imageFieldParseTable[]; ///< the parse table for INI definition
|
||||
|
||||
}; // end Image
|
||||
|
||||
//-------------------------------------------------------------------------------------------------
|
||||
/** A collection of images */
|
||||
//-------------------------------------------------------------------------------------------------
|
||||
class ImageCollection : public SubsystemInterface
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
ImageCollection( void );
|
||||
virtual ~ImageCollection( void );
|
||||
|
||||
virtual void init( void ) { }; ///< initialize system
|
||||
virtual void reset( void ) { }; ///< reset system
|
||||
virtual void update( void ) { }; ///< update system
|
||||
|
||||
void load( Int textureSize ); ///< load images
|
||||
|
||||
const Image *findImageByName( const AsciiString& name ); ///< find image based on name
|
||||
|
||||
/// adds the given image to the collection, transfers ownership to this object
|
||||
void addImage(Image *image);
|
||||
|
||||
/// enumerates the list of existing images
|
||||
Image *Enum(unsigned index)
|
||||
{
|
||||
for (std::map<unsigned,Image *>::iterator i=m_imageMap.begin();i!=m_imageMap.end();++i)
|
||||
if (!index--)
|
||||
return i->second;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
protected:
|
||||
std::map<unsigned,Image *> m_imageMap; ///< maps named keys to images
|
||||
}; // end ImageCollection
|
||||
|
||||
// INLINING ///////////////////////////////////////////////////////////////////////////////////////
|
||||
inline void Image::setName( AsciiString name ) { m_name = name; }
|
||||
inline AsciiString Image::getName( void ) const { return m_name; }
|
||||
inline void Image::setFilename( AsciiString name ) { m_filename = name; }
|
||||
inline AsciiString Image::getFilename( void ) const { return m_filename; }
|
||||
inline void Image::setUV( Region2D *uv ) { if( uv ) m_UVCoords = *uv; }
|
||||
inline const Region2D *Image::getUV( void ) const { return &m_UVCoords; }
|
||||
inline void Image::setTextureWidth( Int width ) { m_textureSize.x = width; }
|
||||
inline void Image::setTextureHeight( Int height ) { m_textureSize.y = height; }
|
||||
inline void Image::setImageSize( ICoord2D *size ) { m_imageSize = *size; }
|
||||
inline const ICoord2D *Image::getImageSize( void ) const { return &m_imageSize; }
|
||||
inline const ICoord2D *Image::getTextureSize( void ) const { return &m_textureSize; }
|
||||
inline Int Image::getImageWidth( void ) const { return m_imageSize.x; }
|
||||
inline Int Image::getImageHeight( void ) const { return m_imageSize.y; }
|
||||
inline void Image::setRawTextureData( void *data ) { m_rawTextureData = data; }
|
||||
inline const void *Image::getRawTextureData( void ) const { return m_rawTextureData; }
|
||||
inline UnsignedInt Image::getStatus( void ) const { return m_status; }
|
||||
|
||||
// EXTERNALS //////////////////////////////////////////////////////////////////////////////////////
|
||||
extern ImageCollection *TheMappedImageCollection; ///< mapped images
|
||||
|
||||
#endif // __IMAGE_H_
|
||||
|
Reference in a new issue