1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-11-28 08:48:48 +02:00

a bit of hero window

help needed - make something to prevent changing surface stored in CHeroWindow::background. I do not overwrite it, but it changes dramatically with every call of CHeroWindow method!

And besides - is there anything to make my window displayed easily, without calling show() every frame when it should be displayed? any machanism?
This commit is contained in:
mateuszb 2008-01-10 19:01:25 +00:00
parent 9530fb42c2
commit e62cfed95f
9 changed files with 67 additions and 4 deletions

View File

@ -1,3 +1,4 @@
#pragma once
#include "SDL_Extensions.h"
template <typename T>
AdventureMapButton<T>::AdventureMapButton ()

View File

@ -121,6 +121,8 @@ void CHeroList::clickLeft(tribool down)
float ny = (float)hy/(float)32;
if (ny>5 || ny<0)
return;
if (((int)(ny+from))==selected)
LOCPLINT->openHeroWindow(items[selected].first);//print hero screen
select(ny+from);
}
else
@ -1274,6 +1276,8 @@ endTurn(CGI->preth->advEndTurn.first,CGI->preth->advEndTurn.second,
heroList.genList();
//townList.init();
townList.genList();
heroWindow = CHeroWindow();
gems.push_back(CGI->spriteh->giveDef("agemLL.def"));
gems.push_back(CGI->spriteh->giveDef("agemLR.def"));

View File

@ -5,6 +5,7 @@
#include "SDL.h"
#include "CPlayerInterface.h"
#include <map>
#include "CHeroWindow.h"
class CDefHandler;
class CCallback;
class CTownInstance;
@ -235,6 +236,8 @@ public:
CHeroList heroList;
CTownList townList;
CInfoBar infoBar;
CHeroWindow heroWindow;
struct CurrentSelection
{

View File

@ -1,3 +1,4 @@
#pragma once
#include "global.h"
#include "SDL.h"
#include "CPlayerInterface.h"

32
CHeroWindow.cpp Normal file
View File

@ -0,0 +1,32 @@
#include "stdafx.h"
#include "CHeroWindow.h"
#include "SDL.h"
#include "SDL_Extensions.h"
extern SDL_Surface * ekran;
CHeroWindow::CHeroWindow()
{
background = SDL_LoadBMP("Data\\HEROSCR4.bmp");
pos.x = 0;
pos.y = 0;
pos.h = background->h;
pos.w = background->w;
}
CHeroWindow::~CHeroWindow()
{
SDL_FreeSurface(background);
}
void CHeroWindow::show(SDL_Surface *to)
{
if(!to)
to=ekran;
blitAt(background,pos.x,pos.y,to);
}
void CHeroWindow::setHero(const CGHeroInstance *hero)
{
curHero = hero;
}

16
CHeroWindow.h Normal file
View File

@ -0,0 +1,16 @@
#pragma once
#include "CPlayerInterface.h"
class SDL_Surface;
class CGHeroInstance;
class CHeroWindow: public IShowable, public virtual CIntObject
{
SDL_Surface * background;
const CGHeroInstance * curHero;
public:
CHeroWindow(); //c-tor
~CHeroWindow(); //d-tor
void setHero(const CGHeroInstance * hero); //sets main displayed hero
virtual void show(SDL_Surface * to = NULL); //shows hero window
};

View File

@ -1567,3 +1567,8 @@ void CPlayerInterface::tileHidden(int3 pos)
{
adventureInt->minimap.hideTile(pos);
}
void CPlayerInterface::openHeroWindow(const CGHeroInstance *hero)
{
adventureInt->heroWindow.setHero(hero);
adventureInt->heroWindow.show();
}

View File

@ -219,7 +219,8 @@ public:
void showComp(SComponent comp);
void openTownWindow(const CGTownInstance * town);
void openTownWindow(const CGTownInstance * town); //shows townscreen
void openHeroWindow(const CGHeroInstance * hero); //shows hero window with given hero
SDL_Surface * infoWin(const CGObjectInstance * specific); //specific=0 => draws info about selected town/hero //TODO - gdy sie dorobi sensowna hierarchie klas ins. to wywalic tego brzydkiego void*
void handleEvent(SDL_Event * sEvent);
void handleKeyDown(SDL_Event *sEvent);

View File

@ -1639,7 +1639,7 @@ void CAmbarCendamo::deh3m()
{
std::cout<<"Hej, sprawdz co to za budynek w miescie " <<nt<<std::endl;
}
}//bs==3 - nie wiadomo co to, 4 w 2. bajcie
}//bs==3 - not known what it is, 4 in 2. byte
else
{
if(spec->buildingSettings[ir] & (1<<bs))
@ -1662,7 +1662,7 @@ void CAmbarCendamo::deh3m()
{
if(spec->buildingSettings[ir] & (1<<bs))
{
nt->builtBuildings.insert(26); //graal
nt->builtBuildings.insert(26); //grail
}
}
else if(bs==2)
@ -1683,7 +1683,7 @@ void CAmbarCendamo::deh3m()
{
if(spec->buildingSettings[ir] & (1<<bs))
{
nt->builtBuildings.insert(21); //stajnia
nt->builtBuildings.insert(21); //stables
}
}
else if(bs==5)