mirror of
				https://github.com/vcmi/vcmi.git
				synced 2025-10-31 00:07:39 +02:00 
			
		
		
		
	* next part of hero exchange window
* minor changes
This commit is contained in:
		| @@ -371,7 +371,7 @@ void CHeroWindow::redrawCurBack() | ||||
| 		SDL_FreeSurface(curBack); | ||||
| 	curBack = SDL_DisplayFormat(background); | ||||
|  | ||||
| 	//primary skills & morale and luck graphics | ||||
| 	//primary skills & exp and mana | ||||
| 	blitAt(graphics->pskillsm->ourImages[0].bitmap, 32, 111, curBack); | ||||
| 	blitAt(graphics->pskillsm->ourImages[1].bitmap, 102, 111, curBack); | ||||
| 	blitAt(graphics->pskillsm->ourImages[2].bitmap, 172, 111, curBack); | ||||
| @@ -429,6 +429,7 @@ void CHeroWindow::redrawCurBack() | ||||
| 		CSDL_Ext::printAtMiddle(primarySkill.str(), 53 + 70 * m, 165, TNRB16, zwykly, curBack); | ||||
| 	} | ||||
|  | ||||
| 	//morale and luck printing | ||||
| 	blitAt(graphics->luck42->ourImages[curHero->getCurrentLuck()+3].bitmap, 239, 182, curBack); | ||||
| 	blitAt(graphics->morale42->ourImages[curHero->getCurrentMorale()+3].bitmap, 181, 182, curBack); | ||||
|  | ||||
|   | ||||
| @@ -3670,6 +3670,16 @@ void CExchangeWindow::activate() | ||||
| 	{ | ||||
| 		questlogButton[g]->activate(); | ||||
| 	} | ||||
|  | ||||
| 	for(int g=0; g<ARRAY_COUNT(morale); g++) | ||||
| 	{ | ||||
| 		morale[g]->activate(); | ||||
| 	} | ||||
|  | ||||
| 	for(int g=0; g<ARRAY_COUNT(luck); g++) | ||||
| 	{ | ||||
| 		luck[g]->activate(); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| void CExchangeWindow::deactivate() | ||||
| @@ -3696,6 +3706,16 @@ void CExchangeWindow::deactivate() | ||||
| 	{ | ||||
| 		questlogButton[g]->deactivate(); | ||||
| 	} | ||||
|  | ||||
| 	for(int g=0; g<ARRAY_COUNT(morale); g++) | ||||
| 	{ | ||||
| 		morale[g]->deactivate(); | ||||
| 	} | ||||
|  | ||||
| 	for(int g=0; g<ARRAY_COUNT(luck); g++) | ||||
| 	{ | ||||
| 		luck[g]->deactivate(); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| void CExchangeWindow::show(SDL_Surface * to) | ||||
| @@ -3803,9 +3823,43 @@ CExchangeWindow::CExchangeWindow(si32 hero1, si32 hero2) //c-tor | ||||
|  | ||||
| 		//experience | ||||
| 		blitAt(skilldef->ourImages[4].bitmap, 103 + 490*b, 45, bg); | ||||
| 		printAtMiddle( makeNumberShort(heroInst[b]->exp), 119 + 490*b, 71, GEOR13, zwykly, bg ); | ||||
|  | ||||
| 		//mana points | ||||
| 		blitAt(skilldef->ourImages[5].bitmap, 139 + 490*b, 45, bg); | ||||
| 		printAtMiddle( makeNumberShort(heroInst[b]->mana), 155 + 490*b, 71, GEOR13, zwykly, bg ); | ||||
|  | ||||
| 		//setting morale | ||||
| 		morale[b] = new LRClickableAreaWTextComp(); | ||||
| 		morale[b]->pos = genRect(32, 32, pos.x + 177 + 490*b, pos.y + 45); | ||||
| 		blitAt(graphics->morale30->ourImages[heroInst[b]->getCurrentMorale()+3].bitmap, 177 + 490*b, 45, bg); | ||||
|  | ||||
| 		std::vector<std::pair<int,std::string> > mrl = heroInst[b]->getCurrentMoraleModifiers(); | ||||
| 		int mrlv = heroInst[b]->getCurrentMorale(); | ||||
| 		int mrlt = (mrlv>0)-(mrlv<0); //signum: -1 - bad morale[b], 0 - neutral, 1 - good | ||||
| 		morale[b]->hoverText = CGI->generaltexth->heroscrn[4 - mrlt]; | ||||
| 		morale[b]->baseType = SComponent::morale; | ||||
| 		morale[b]->bonus = mrlv; | ||||
| 		morale[b]->text = CGI->generaltexth->arraytxt[88]; | ||||
| 		boost::algorithm::replace_first(morale[b]->text,"%s",CGI->generaltexth->arraytxt[86-mrlt]); | ||||
| 		for(int it=0; it < mrl.size(); it++) | ||||
| 			morale[b]->text += mrl[it].second; | ||||
|  | ||||
| 		//setting luck | ||||
| 		luck[b] = new LRClickableAreaWTextComp(); | ||||
| 		luck[b]->pos = genRect(32, 32, pos.x + 213 + 490*b, pos.y + 45); | ||||
| 		blitAt(graphics->luck30->ourImages[heroInst[b]->getCurrentLuck()+3].bitmap, 213 + 490*b, 45, bg); | ||||
|  | ||||
| 		mrl = heroInst[b]->getCurrentLuckModifiers(); | ||||
| 		mrlv = heroInst[b]->getCurrentLuck(); | ||||
| 		mrlt = (mrlv>0)-(mrlv<0); //signum: -1 - bad luck[b], 0 - neutral, 1 - good | ||||
| 		luck[b]->hoverText = CGI->generaltexth->heroscrn[7 - mrlt]; | ||||
| 		luck[b]->baseType = SComponent::luck; | ||||
| 		luck[b]->bonus = mrlv; | ||||
| 		luck[b]->text = CGI->generaltexth->arraytxt[62]; | ||||
| 		boost::algorithm::replace_first(luck[b]->text,"%s",CGI->generaltexth->arraytxt[60-mrlt]); | ||||
| 		for(int it=0; it < mrl.size(); it++) | ||||
| 			luck[b]->text += mrl[it].second; | ||||
| 	} | ||||
|  | ||||
| 	//printing portraits | ||||
| @@ -3851,6 +3905,16 @@ CExchangeWindow::~CExchangeWindow() //d-tor | ||||
| 	{ | ||||
| 		delete questlogButton[g]; | ||||
| 	} | ||||
|  | ||||
| 	for(int g=0; g<ARRAY_COUNT(morale); g++) | ||||
| 	{ | ||||
| 		delete morale[g]; | ||||
| 	} | ||||
|  | ||||
| 	for(int g=0; g<ARRAY_COUNT(luck); g++) | ||||
| 	{ | ||||
| 		delete luck[g]; | ||||
| 	} | ||||
| } | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -680,6 +680,8 @@ class CExchangeWindow : public CIntObject, public IShowActivable | ||||
|  | ||||
| 	std::vector<LRClickableAreaWTextComp *> secSkillAreas[2], primSkillAreas; | ||||
|  | ||||
| 	LRClickableAreaWTextComp *morale[2], *luck[2]; | ||||
|  | ||||
| public: | ||||
|  | ||||
| 	void close(); | ||||
|   | ||||
| @@ -31,6 +31,7 @@ SDL_Surface * CSDL_Ext::copySurface(SDL_Surface * mod) //returns copy of given s | ||||
| 	//return SDL_DisplayFormat(mod); | ||||
| 	return SDL_ConvertSurface(mod, mod->format, mod->flags); | ||||
| } | ||||
|  | ||||
| bool isItIn(const SDL_Rect * rect, int x, int y) | ||||
| { | ||||
| 	if ((x>rect->x && x<rect->x+rect->w) && (y>rect->y && y<rect->y+rect->h)) | ||||
| @@ -44,20 +45,24 @@ void blitAtWR(SDL_Surface * src, int x, int y, SDL_Surface * dst) | ||||
| 	SDL_BlitSurface(src,NULL,dst,&pom); | ||||
| 	SDL_UpdateRect(dst,x,y,src->w,src->h); | ||||
| } | ||||
|  | ||||
| void blitAt(SDL_Surface * src, int x, int y, SDL_Surface * dst) | ||||
| { | ||||
| 	if(!dst) dst = screen; | ||||
| 	SDL_Rect pom = genRect(src->h,src->w,x,y); | ||||
| 	SDL_BlitSurface(src,NULL,dst,&pom); | ||||
| } | ||||
|  | ||||
| void blitAtWR(SDL_Surface * src, const SDL_Rect & pos, SDL_Surface * dst) | ||||
| { | ||||
| 	blitAtWR(src,pos.x,pos.y,dst); | ||||
| } | ||||
|  | ||||
| void blitAt(SDL_Surface * src, const SDL_Rect & pos, SDL_Surface * dst) | ||||
| { | ||||
| 	blitAt(src,pos.x,pos.y,dst); | ||||
| } | ||||
|  | ||||
| SDL_Color genRGB(int r, int g, int b, int a=0) | ||||
| { | ||||
| 	SDL_Color ret; | ||||
| @@ -67,10 +72,12 @@ SDL_Color genRGB(int r, int g, int b, int a=0) | ||||
| 	ret.unused=a; | ||||
| 	return ret; | ||||
| } | ||||
|  | ||||
| void updateRect (SDL_Rect * rect, SDL_Surface * scr) | ||||
| { | ||||
| 	SDL_UpdateRect(scr,rect->x,rect->y,rect->w,rect->h); | ||||
| } | ||||
|  | ||||
| void CSDL_Ext::printAtMiddleWB(const std::string & text, int x, int y, TTF_Font * font, int charpr, SDL_Color kolor, SDL_Surface * dst) | ||||
| { | ||||
| 	std::vector<std::string> * ws = CMessage::breakText(text,charpr); | ||||
| @@ -101,6 +108,7 @@ void CSDL_Ext::printAtMiddleWB(const std::string & text, int x, int y, TTF_Font | ||||
| 		SDL_FreeSurface(wesu[i]); | ||||
| 	delete ws; | ||||
| } | ||||
|  | ||||
| void CSDL_Ext::printAtWB(const std::string & text, int x, int y, TTF_Font * font, int charpr, SDL_Color kolor, SDL_Surface * dst) | ||||
| { | ||||
| 	std::vector<std::string> * ws = CMessage::breakText(text,charpr); | ||||
| @@ -120,6 +128,7 @@ void CSDL_Ext::printAtWB(const std::string & text, int x, int y, TTF_Font * font | ||||
| 		SDL_FreeSurface(wesu[i]); | ||||
| 	delete ws; | ||||
| } | ||||
|  | ||||
| void CSDL_Ext::printAtMiddle(const std::string & text, int x, int y, TTF_Font * font, SDL_Color kolor, SDL_Surface * dst, unsigned char quality, bool refresh) | ||||
| { | ||||
| 	if(text.length()==0) return; | ||||
| @@ -149,6 +158,7 @@ void CSDL_Ext::printAtMiddle(const std::string & text, int x, int y, TTF_Font * | ||||
| 		SDL_UpdateRect(dst,x-(temp->w/2),y-(temp->h/2),temp->w,temp->h); | ||||
| 	SDL_FreeSurface(temp); | ||||
| } | ||||
|  | ||||
| void CSDL_Ext::printAt(const std::string & text, int x, int y, TTF_Font * font, SDL_Color kolor, SDL_Surface * dst, unsigned char quality, bool refresh) | ||||
| { | ||||
| 	if (text.length()==0) | ||||
|   | ||||
| @@ -5,6 +5,8 @@ | ||||
| #include <string> | ||||
| #include "../int3.h" | ||||
| #include <vector> | ||||
| #include <sstream> | ||||
| #include <boost/type_traits/is_integral.hpp> | ||||
|  | ||||
| /* | ||||
|  * SDL_Extensions.h, part of VCMI engine | ||||
| @@ -26,6 +28,47 @@ void blitAt(SDL_Surface * src, const SDL_Rect & pos, SDL_Surface * dst=screen); | ||||
| void updateRect (SDL_Rect * rect, SDL_Surface * scr = screen); | ||||
| bool isItIn(const SDL_Rect * rect, int x, int y); | ||||
|  | ||||
| template<typename IntType> | ||||
| std::string makeNumberShort(IntType number) //the output is a string containing at most 5 characters [4 if positive] (eg. intead 10000 it gives 10k) | ||||
| { | ||||
| 	BOOST_MPL_ASSERT_MSG( boost::is_integral<IntType>::value, NON_INTEGRAL_TYPES_ARE_NOT_ALLOWED, (IntType) ); //it should make noise if IntType is not integral type | ||||
|  | ||||
| 	int initialLength; | ||||
| 	bool negative = (number < 0); | ||||
| 	std::ostringstream ost, rets; | ||||
| 	ost<<number; | ||||
| 	initialLength = ost.str().size(); | ||||
|  | ||||
| 	if(negative) | ||||
| 	{ | ||||
| 		if(initialLength <= 4) | ||||
| 			return ost.str(); | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		if(initialLength <= 5) | ||||
| 			return ost.str(); | ||||
| 	} | ||||
|  | ||||
| 	//make the number short | ||||
| 	char symbol[] = {'G', 'M', 'k'}; | ||||
|  | ||||
| 	if(negative) number = (-number); //absolute value | ||||
|  | ||||
| 	for(int divisor = 1000000000, it = 0; divisor > 1; divisor /= 1000, ++it) | ||||
| 	{ | ||||
| 		if(number >= divisor) | ||||
| 		{ | ||||
| 			if(negative) rets <<'-'; | ||||
| 			rets << (number / divisor) << symbol[it]; | ||||
| 			return rets.str(); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	throw std::string("We shouldn't be here - makeNumberShort"); | ||||
| } | ||||
|  | ||||
|  | ||||
| inline SDL_Rect genRect(const int & hh, const int & ww, const int & xx, const int & yy) | ||||
| { | ||||
| 	SDL_Rect ret; | ||||
|   | ||||
| @@ -49,7 +49,8 @@ struct Entry | ||||
| 	//Entry(unsigned char ): nameStr(con){}; | ||||
| 	Entry(){}; | ||||
| }; | ||||
|  class DLL_EXPORT CLodHandler | ||||
|  | ||||
| class DLL_EXPORT CLodHandler | ||||
| { | ||||
| public: | ||||
| 	FILE* FLOD; | ||||
|   | ||||
| @@ -216,7 +216,7 @@ CLoadFile::CLoadFile( const std::string &fname ) | ||||
|  | ||||
| 		if(std::memcmp(buffer,"VCMI",4)) | ||||
| 		{ | ||||
| 			tlog1 << "Error: wrong save format!\n"; | ||||
| 			tlog1 << "Error: wrong save format! (file " << fname << " )\n"; | ||||
| 			delete sfile; | ||||
| 			sfile = NULL; | ||||
| 			return; | ||||
| @@ -225,7 +225,7 @@ CLoadFile::CLoadFile( const std::string &fname ) | ||||
| 		*this >> myVersion;	 | ||||
| 		if(myVersion != version) | ||||
| 		{ | ||||
| 			tlog1 << "Wrong save format!\n"; | ||||
| 			tlog1 << "Wrong save format! (file " << fname << " )\n"; | ||||
| 			delete sfile; | ||||
| 			sfile = NULL; | ||||
| 		} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user