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
*/
2017-07-13 10:26:03 +02:00
# pragma once
# include "gui/Fonts.h"
# include "../lib/GameConstants.h"
# include "gui/Geometries.h"
2009-04-16 14:14:13 +03:00
struct SDL_Surface ;
class CGHeroInstance ;
class CGTownInstance ;
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 ;
2014-01-03 02:48:38 +03:00
class ObjectTemplate ;
2014-03-10 19:00:58 +03:00
class CAnimation ;
Entities redesign and a few ERM features
* Made most Handlers derived from CHandlerBase and moved service API there.
* Declared existing Entity APIs.
* Added basic script context caching
* Started Lua script module
* Started Lua spell effect API
* Started script state persistence
* Started battle info callback binding
* CommitPackage removed
* Extracted spells::Caster to own header; Expanded Spell API.
* implemented !!MC:S, !!FU:E, !!FU:P, !!MA, !!VR:H, !!VR:C
* !!BU:C, !!BU:E, !!BU:G, !!BU:M implemented
* Allow use of "MC:S@varName@" to declare normal variable (technically v-variable with string key)
* Re-enabled VERM macros.
* !?GM0 added
* !?TM implemented
* Added !!MF:N
* Started !?OB, !!BM, !!HE, !!OW, !!UN
* Added basic support of w-variables
* Added support for ERM indirect variables
* Made !?FU regular trigger
* !!re (ERA loop receiver) implemented
* Fixed ERM receivers with zero args.
2018-03-17 16:58:30 +02:00
class EntityService ;
2010-12-19 16:39:56 +02:00
2012-12-19 20:24:53 +03:00
enum EFonts
{
FONT_BIG , FONT_CALLI , FONT_CREDITS , FONT_HIGH_SCORE , FONT_MEDIUM , FONT_SMALL , FONT_TIMES , FONT_TINY , FONT_VERD
} ;
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
{
Entities redesign and a few ERM features
* Made most Handlers derived from CHandlerBase and moved service API there.
* Declared existing Entity APIs.
* Added basic script context caching
* Started Lua script module
* Started Lua spell effect API
* Started script state persistence
* Started battle info callback binding
* CommitPackage removed
* Extracted spells::Caster to own header; Expanded Spell API.
* implemented !!MC:S, !!FU:E, !!FU:P, !!MA, !!VR:H, !!VR:C
* !!BU:C, !!BU:E, !!BU:G, !!BU:M implemented
* Allow use of "MC:S@varName@" to declare normal variable (technically v-variable with string key)
* Re-enabled VERM macros.
* !?GM0 added
* !?TM implemented
* Added !!MF:N
* Started !?OB, !!BM, !!HE, !!OW, !!UN
* Added basic support of w-variables
* Added support for ERM indirect variables
* Made !?FU regular trigger
* !!re (ERA loop receiver) implemented
* Fixed ERM receivers with zero args.
2018-03-17 16:58:30 +02:00
void addImageListEntry ( size_t index , const std : : string & listName , const std : : string & imageName ) ;
void addImageListEntries ( const EntityService * service ) ;
2013-04-22 22:51:22 +03:00
2016-10-18 09:31:31 +02:00
void initializeBattleGraphics ( ) ;
void loadPaletteAndColors ( ) ;
2016-11-07 23:15:46 +02:00
2016-11-07 23:19:53 +02:00
void loadHeroAnimations ( ) ;
//loads animation and adds required rotated frames
std : : shared_ptr < CAnimation > loadHeroAnimation ( const std : : string & name ) ;
void loadHeroFlagAnimations ( ) ;
//loads animation and adds required rotated frames
std : : shared_ptr < CAnimation > loadHeroFlagAnimation ( const std : : string & name ) ;
void loadErmuToPicture ( ) ;
void loadFogOfWar ( ) ;
2016-10-18 09:31:31 +02:00
void loadFonts ( ) ;
void initializeImageLists ( ) ;
2009-04-16 14:14:13 +03:00
public :
2009-08-17 11:50:31 +03:00
//Fonts
static const int FONTS_NUMBER = 9 ;
2016-11-07 23:19:53 +02:00
std : : array < std : : shared_ptr < IFont > , FONTS_NUMBER > fonts ;
2016-10-18 09:31:31 +02: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]
2016-10-18 09:31:31 +02:00
SDL_Color * neutralColorPalette ;
2009-06-30 18:36:12 +03:00
2016-10-18 09:31:31 +02:00
std : : shared_ptr < CAnimation > heroMoveArrows ;
2016-11-07 23:19:53 +02:00
// [hero class def name] //added group 10: up - left, 11 - left and 12 - left down // 13 - up-left standing; 14 - left standing; 15 - left down standing
std : : map < std : : string , std : : shared_ptr < CAnimation > > heroAnimations ;
std : : vector < std : : shared_ptr < CAnimation > > heroFlagAnimations ;
// [boat type: 0 .. 2] //added group 10: up - left, 11 - left and 12 - left down // 13 - up-left standing; 14 - left standing; 15 - left down standing
std : : array < std : : shared_ptr < CAnimation > , 3 > boatAnimations ;
std : : array < std : : vector < std : : shared_ptr < CAnimation > > , 3 > boatFlagAnimations ;
//all other objects (not hero or boat)
std : : map < std : : string , std : : shared_ptr < CAnimation > > mapObjectAnimations ;
std : : shared_ptr < CAnimation > fogOfWarFullHide ;
std : : shared_ptr < CAnimation > fogOfWarPartialHide ;
2010-12-19 16:39:56 +02:00
2013-04-22 22:51:22 +03:00
std : : map < std : : string , JsonNode > imageLists ;
2010-08-18 17:24:30 +03:00
//towns
2011-12-14 00:23:17 +03:00
std : : map < int , std : : string > ERMUtoPicture [ GameConstants : : 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 : : map < int , std : : vector < std : : string > > battleACToDef ; //maps AC format to vector of appropriate def names
2016-11-10 13:03:56 +02:00
2009-04-16 14:14:13 +03:00
//functions
2016-10-18 09:31:31 +02:00
Graphics ( ) ;
2016-11-25 14:45:09 +02:00
~ Graphics ( ) ;
2013-04-22 22:51:22 +03:00
2016-10-18 09:31:31 +02:00
void load ( ) ;
void blueToPlayersAdv ( SDL_Surface * sur , PlayerColor player ) ; //replaces blue interface colour with a color of player
2016-11-07 23:19:53 +02:00
std : : shared_ptr < CAnimation > getAnimation ( const CGObjectInstance * obj ) ;
2022-09-11 15:12:35 +02:00
std : : shared_ptr < CAnimation > getAnimation ( std : : shared_ptr < const ObjectTemplate > info ) ;
2009-04-16 14:14:13 +03:00
} ;
extern Graphics * graphics ;