1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-09-16 09:26:28 +02:00

* improved borders

* minor changes
This commit is contained in:
Michał W. Urbańczyk
2008-01-23 22:15:33 +00:00
parent c66d430702
commit 1f324c3b31
4 changed files with 57 additions and 25 deletions

View File

@@ -56,17 +56,17 @@ bool CBuildingRect::operator<(const CBuildingRect & p2) const
} }
void CBuildingRect::hover(bool on) void CBuildingRect::hover(bool on)
{ {
if(area)
{
if(CSDL_Ext::SDL_GetPixel(area,LOCPLINT->current->motion.x-pos.x,LOCPLINT->current->motion.y-pos.y) == 0)
{
Hoverable::hover(false);
return;
}
}
Hoverable::hover(on); Hoverable::hover(on);
if(border) if(on)
blitAt(border,pos.x,pos.y); {
MotionInterested::activate();
}
else
{
MotionInterested::deactivate();
if(LOCPLINT->castleInt->hBuild == this)
LOCPLINT->castleInt->hBuild = NULL;
}
} }
void CBuildingRect::clickLeft (tribool down) void CBuildingRect::clickLeft (tribool down)
{ {
@@ -76,6 +76,35 @@ void CBuildingRect::clickRight (tribool down)
{ {
//todo - handle //todo - handle
} }
void CBuildingRect::mouseMoved (SDL_MouseMotionEvent & sEvent)
{
if(area)
{
if(CSDL_Ext::SDL_GetPixel(area,sEvent.x-pos.x,sEvent.y-pos.y) == 0) //najechany piksel jest poza polem
{
if(LOCPLINT->castleInt->hBuild == this)
LOCPLINT->castleInt->hBuild = NULL;
}
else //w polu
{
if(LOCPLINT->castleInt->hBuild) //jakis budynek jest zaznaczony
{
if((*LOCPLINT->castleInt->hBuild)<(*this)) //ustawiamy sie, jesli jestesmy na wierzchu
{
LOCPLINT->castleInt->hBuild = this;
}
}
else //nie ma budynku, wiec damy nasz
{
LOCPLINT->castleInt->hBuild = this;
}
}
}
//if(border)
// blitAt(border,pos.x,pos.y);
}
std::string getBgName(int type) //TODO - co z tym zrobi�? std::string getBgName(int type) //TODO - co z tym zrobi�?
{ {
switch (type) switch (type)
@@ -115,12 +144,7 @@ public:
CCastleInterface::CCastleInterface(const CGTownInstance * Town, bool Activate) CCastleInterface::CCastleInterface(const CGTownInstance * Town, bool Activate)
{ {
int t = 600; hBuild = NULL;
while(t--)
{
CDefHandler* defik = CGI->spriteh->giveDef("ITMTL.DEF");
delete defik;
}
count=0; count=0;
town = Town; town = Town;
townInt = CGI->bitmaph->loadBitmap("TOWNSCRN.bmp"); townInt = CGI->bitmaph->loadBitmap("TOWNSCRN.bmp");
@@ -140,13 +164,7 @@ CCastleInterface::CCastleInterface(const CGTownInstance * Town, bool Activate)
{ {
if(CGI->townh->structures[town->subID].find(*i)!=CGI->townh->structures[town->subID].end()) if(CGI->townh->structures[town->subID].find(*i)!=CGI->townh->structures[town->subID].end())
{ {
//CDefHandler *b = CGI->spriteh->giveDef(CGI->townh->structures[town->subID][*i]->defName);
buildings.push_back(new CBuildingRect(CGI->townh->structures[town->subID][*i])); buildings.push_back(new CBuildingRect(CGI->townh->structures[town->subID][*i]));
//boost::tuples::tuple<int,CDefHandler*,Structure*,SDL_Surface*,SDL_Surface*> *t
// = new boost::tuples::tuple<int,CDefHandler*,Structure*,SDL_Surface*,SDL_Surface*>
// (*i,b,CGI->townh->structures[town->subID][*i],NULL,NULL);
////TODO: obw�dki i pola
//buildings.push_back(t);
} }
else continue; else continue;
} }
@@ -300,8 +318,10 @@ void CCastleInterface::show(SDL_Surface * to)
} }
else else
blitAt(buildings[i]->def->ourImages[(animval)%(buildings[i]->def->ourImages.size())].bitmap,buildings[i]->pos.x,buildings[i]->pos.y,to); blitAt(buildings[i]->def->ourImages[(animval)%(buildings[i]->def->ourImages.size())].bitmap,buildings[i]->pos.x,buildings[i]->pos.y,to);
if(buildings[i]->hovered && buildings[i]->border) //if(buildings[i]->hovered && buildings[i]->border)
blitAt(buildings[i]->border,buildings[i]->pos.x,buildings[i]->pos.y); // blitAt(buildings[i]->border,buildings[i]->pos.x,buildings[i]->pos.y);
if(hBuild==buildings[i] && hBuild->border)
blitAt(hBuild->border,hBuild->pos,to);
} }
//for(int i=0;i<buildings.size();i++) //for(int i=0;i<buildings.size();i++)
//{ //{

View File

@@ -7,7 +7,7 @@ class CGTownInstance;
class CTownHandler; class CTownHandler;
struct Structure; struct Structure;
template <typename T> class AdventureMapButton; template <typename T> class AdventureMapButton;
class CBuildingRect : public Hoverable, public ClickableL, public ClickableR//, public TimeInterested class CBuildingRect : public Hoverable, public MotionInterested, public ClickableL, public ClickableR//, public TimeInterested
{ {
public: public:
Structure* str; Structure* str;
@@ -22,11 +22,13 @@ public:
void hover(bool on); void hover(bool on);
void clickLeft (tribool down); void clickLeft (tribool down);
void clickRight (tribool down); void clickRight (tribool down);
void mouseMoved (SDL_MouseMotionEvent & sEvent);
}; };
class CCastleInterface : public IShowable, public IActivable class CCastleInterface : public IShowable, public IActivable
{ {
public: public:
CBuildingRect * hBuild; //highlighted building
SDL_Surface * townInt; SDL_Surface * townInt;
SDL_Surface * cityBg; SDL_Surface * cityBg;
const CGTownInstance * town; const CGTownInstance * town;

View File

@@ -43,6 +43,14 @@ void blitAt(SDL_Surface * src, int x, int y, SDL_Surface * dst)
SDL_Rect pom = genRect(src->h,src->w,x,y); SDL_Rect pom = genRect(src->h,src->w,x,y);
SDL_BlitSurface(src,NULL,dst,&pom); SDL_BlitSurface(src,NULL,dst,&pom);
} }
void blitAtWR(SDL_Surface * src, SDL_Rect pos, SDL_Surface * dst)
{
blitAtWR(src,pos.x,pos.y,dst);
}
void blitAt(SDL_Surface * src, 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 genRGB(int r, int g, int b, int a=0)
{ {
SDL_Color ret; SDL_Color ret;

View File

@@ -9,6 +9,8 @@ extern SDL_Color tytulowy, tlo, zwykly ;
extern TTF_Font * TNRB16, *TNR, *GEOR13, *GEORXX, *GEORM; extern TTF_Font * TNRB16, *TNR, *GEOR13, *GEORXX, *GEORM;
void blitAtWR(SDL_Surface * src, int x, int y, SDL_Surface * dst=ekran); void blitAtWR(SDL_Surface * src, int x, int y, SDL_Surface * dst=ekran);
void blitAt(SDL_Surface * src, int x, int y, SDL_Surface * dst=ekran); void blitAt(SDL_Surface * src, int x, int y, SDL_Surface * dst=ekran);
void blitAtWR(SDL_Surface * src, SDL_Rect pos, SDL_Surface * dst=ekran);
void blitAt(SDL_Surface * src, SDL_Rect pos, SDL_Surface * dst=ekran);
void updateRect (SDL_Rect * rect, SDL_Surface * scr = ekran); void updateRect (SDL_Rect * rect, SDL_Surface * scr = ekran);
bool isItIn(const SDL_Rect * rect, int x, int y); bool isItIn(const SDL_Rect * rect, int x, int y);
SDL_Rect genRect(int hh, int ww, int xx, int yy); SDL_Rect genRect(int hh, int ww, int xx, int yy);