2009-04-16 14:14:13 +03:00
# ifndef __GRAPHICS_H__
# define __GRAPHICS_H__
# include "../global.h"
2009-08-18 04:57:39 +03:00
# include "FontBase.h"
2009-04-16 14:14:13 +03:00
2009-04-15 17:03:31 +03:00
/*
* Graphics . h , part of VCMI engine
*
* Authors : listed in file AUTHORS in main folder
*
* License : GNU General Public License v2 .0 or later
* Full text of license available in license . txt file , in main folder
*
2009-04-16 14:14:13 +03:00
*/
class CDefEssential ;
struct SDL_Surface ;
class CGHeroInstance ;
class CGTownInstance ;
class CDefHandler ;
class CHeroClass ;
struct SDL_Color ;
2009-07-20 04:47:49 +03:00
struct InfoAboutHero ;
2009-07-20 05:56:35 +03:00
struct InfoAboutTown ;
2009-07-20 04:47:49 +03:00
2009-08-17 11:50:31 +03:00
struct Font
{
struct Char
{
si32 unknown1 , width , unknown2 , offset ;
unsigned char * pixels ;
} ;
Char chars [ 256 ] ;
ui8 height ;
unsigned char * data ;
Font ( unsigned char * Data ) ;
~ Font ( ) ;
int getWidth ( const char * text ) const ;
} ;
2009-04-16 14:14:13 +03:00
class Graphics
{
public :
2009-08-17 11:50:31 +03:00
//Fonts
static const int FONTS_NUMBER = 9 ;
Font * fonts [ FONTS_NUMBER ] ;
2009-04-16 14:14:13 +03:00
//various graphics
SDL_Color * playerColors ; //array [8]
SDL_Color * neutralColor ;
SDL_Color * playerColorPalette ; //palette to make interface colors good - array of size [256]
2009-06-30 18:36:12 +03:00
SDL_Color * neutralColorPalette ;
2009-04-16 14:14:13 +03:00
SDL_Surface * hInfo , * tInfo ; //hero and town infobox bgs
SDL_Surface * heroInGarrison ; //icon for town infobox
std : : vector < std : : pair < int , int > > slotsPos ; //creature slot positions in infoboxes
CDefEssential * luck22 , * luck30 , * luck42 , * luck82 ,
* morale22 , * morale30 , * morale42 , * morale82 ,
* halls , * forts , * bigTownPic ;
std : : map < int , SDL_Surface * > heroWins ; //hero_ID => infobox
std : : map < int , SDL_Surface * > townWins ; //town_ID => infobox
2009-06-17 19:46:16 +03:00
CDefEssential * artDefs ; //artifacts
2009-04-16 14:14:13 +03:00
std : : vector < SDL_Surface * > portraitSmall ; //48x32 px portraits of heroes
std : : vector < SDL_Surface * > portraitLarge ; //58x64 px portraits of heroes
2009-06-17 19:46:16 +03:00
std : : vector < CDefEssential * > flags1 , flags2 , flags3 , flags4 ; //flags blitted on heroes when ,
CDefEssential * pskillsb , * resources ; //82x93
2009-12-29 15:40:16 +02:00
CDefEssential * pskillsm ; //42x42 primary skills
CDefEssential * pskillst ; //32x32
2009-06-17 19:46:16 +03:00
CDefEssential * un44 ; //many things
CDefEssential * smallIcons , * resources32 ; //resources 32x32
CDefEssential * flags ;
std : : vector < CDefEssential * > heroAnims ; // [class id: 0 - 17] //added group 10: up - left, 11 - left and 12 - left down // 13 - up-left standing; 14 - left standing; 15 - left down standing
2009-07-06 22:41:27 +03:00
std : : vector < CDefEssential * > boatAnims ; // [boat type: 0 - 3] //added group 10: up - left, 11 - left and 12 - left down // 13 - up-left standing; 14 - left standing; 15 - left down standing
2009-04-16 14:14:13 +03:00
//creatures
std : : map < int , SDL_Surface * > smallImgs ; //creature ID -> small 32x32 img of creature; //ID=-2 is for blank (black) img; -1 for the border
std : : map < int , SDL_Surface * > bigImgs ; //creature ID -> big 58x64 img of creature; //ID=-2 is for blank (black) img; -1 for the border
std : : map < int , SDL_Surface * > backgrounds ; //castle ID -> 100x130 background creature image // -1 is for neutral
std : : map < int , SDL_Surface * > backgroundsm ; //castle ID -> 100x120 background creature image // -1 is for neutral
//for battles
std : : vector < std : : vector < std : : string > > battleBacks ; //battleBacks[terType] - vector of possible names for certain terrain type
std : : vector < std : : string > battleHeroes ; //battleHeroes[hero type] - name of def that has hero animation for battle
std : : map < int , std : : vector < std : : string > > battleACToDef ; //maps AC format to vector of appropriate def names
2009-06-17 19:46:16 +03:00
CDefEssential * spellEffectsPics ; //bitmaps representing spells affecting a stack in battle
2009-04-16 14:14:13 +03:00
std : : vector < std : : string > guildBgs ; // name of bitmaps with imgs for mage guild screen
//abilities
2009-06-17 19:46:16 +03:00
CDefEssential * abils32 , * abils44 , * abils82 ;
2009-04-16 14:14:13 +03:00
//spells
2009-06-17 19:46:16 +03:00
CDefEssential * spellscr ; //spell on the scroll 83x61
2009-04-16 14:14:13 +03:00
//functions
Graphics ( ) ;
void initializeBattleGraphics ( ) ;
void loadPaletteAndColors ( ) ;
void loadHeroFlags ( ) ;
2009-06-17 19:46:16 +03:00
void loadHeroFlags ( std : : pair < std : : vector < CDefEssential * > Graphics : : * , std : : vector < const char * > > & pr , bool mode ) ;
2009-07-06 22:41:27 +03:00
void loadHeroAnims ( ) ;
void loadHeroAnim ( const std : : string & name , const std : : vector < std : : pair < int , int > > & rotations , std : : vector < CDefEssential * > Graphics : : * dst ) ;
2009-04-16 14:14:13 +03:00
void loadHeroPortraits ( ) ;
2009-07-20 04:47:49 +03:00
SDL_Surface * drawHeroInfoWin ( const InfoAboutHero & curh ) ;
2009-04-16 14:14:13 +03:00
SDL_Surface * drawHeroInfoWin ( const CGHeroInstance * curh ) ;
2009-07-20 05:56:35 +03:00
SDL_Surface * drawTownInfoWin ( const InfoAboutTown & curh ) ;
2009-04-16 14:14:13 +03:00
SDL_Surface * drawTownInfoWin ( const CGTownInstance * curh ) ;
SDL_Surface * getPic ( int ID , bool fort = true , bool builded = false ) ; //returns small picture of town: ID=-1 - blank; -2 - border; -3 - random
void blueToPlayersAdv ( SDL_Surface * sur , int player ) ; //replaces blue interface colour with a color of player
2009-08-17 11:50:31 +03:00
void loadFonts ( ) ;
Font * loadFont ( const char * name ) ;
2009-04-16 14:14:13 +03:00
} ;
extern Graphics * graphics ;
# endif // __GRAPHICS_H__