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"
2010-08-16 12:54:09 +03:00
# include "GUIBase.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 ;
2010-12-19 16:39:56 +02:00
class CGObjectInstance ;
class CGDefInfo ;
2010-08-19 18:24:32 +03:00
typedef struct _TTF_Font TTF_Font ; //from SDL_ttf.h
2009-07-20 04:47:49 +03:00
2011-02-22 13:52:36 +02:00
/// Handles fonts, hero images, town images, various graphics
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 ] ;
2010-02-04 17:50:59 +02:00
TTF_Font * fontsTrueType [ FONTS_NUMBER ] ; //true type fonts, if some of the fonts not loaded - NULL
2009-08-17 11:50:31 +03:00
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 ;
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
2010-01-25 23:25:14 +02:00
CDefEssential * pskillsm ; //42x42 primary skills
2009-12-29 15:40:16 +02:00
CDefEssential * pskillst ; //32x32
2010-01-25 23:25:14 +02:00
CDefEssential * un32 ; //many small things
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
2010-08-16 16:51:31 +03:00
std : : map < std : : string , CDefEssential * > mapObjectDefs ; //pointers to loaded defs (key is filename, uppercase)
CDefHandler * FoWfullHide ; //for Fog of War
CDefHandler * FoWpartialHide ; //for For of War
2010-12-19 16:39:56 +02:00
std : : map < int , std : : map < int , CDefEssential * > > advmapobjGraphics ;
CDefEssential * getDef ( const CGObjectInstance * obj ) ;
CDefEssential * getDef ( const CGDefInfo * info ) ;
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
2010-08-18 17:24:30 +03:00
//towns
std : : vector < std : : string > buildingPics ; //filenames of def with building images (used rarely, too big to keep them loaded)
std : : vector < std : : string > townBgs ; //backgrounds of town
std : : vector < std : : string > guildBgs ; // name of bitmaps with imgs for mage guild screen
2010-12-20 23:22:53 +02:00
std : : map < int , std : : string > ERMUtoPicture [ F_NUMBER ] ; //maps building ID to it's picture's name for each town type
2009-04-16 14:14:13 +03:00
//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
2010-08-16 12:54:09 +03:00
std : : vector < Point > wallPositions [ F_NUMBER ] ; //positions of different pieces of wall <x, y>
2009-04-16 14:14:13 +03:00
//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 ( ) ;
2010-08-16 12:54:09 +03:00
void loadWallPositions ( ) ;
2010-12-20 23:22:53 +02:00
void loadErmuToPicture ( ) ;
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
2010-02-04 17:50:59 +02:00
void loadTrueType ( ) ;
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__