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

* it's possible to give numbers moved creatures with keyboard in the stack split window

* updated changelog
This commit is contained in:
Michał W. Urbańczyk 2009-02-20 19:19:52 +00:00
parent 79ae1441ff
commit a635ac7143
4 changed files with 94 additions and 7 deletions

View File

@ -3216,10 +3216,12 @@ CRecrutationWindow::~CRecrutationWindow()
CSplitWindow::CSplitWindow(int cid, int max, CGarrisonInt *Owner) CSplitWindow::CSplitWindow(int cid, int max, CGarrisonInt *Owner)
{ {
which = 1;
c=cid; c=cid;
slider = NULL; slider = NULL;
gar = Owner; gar = Owner;
bitmap = BitmapHandler::loadBitmap("GPUCRDIV.bmp"); bitmap = BitmapHandler::loadBitmap("GPUCRDIV.bmp");
graphics->blueToPlayersAdv(bitmap,LOCPLINT->playerID);
SDL_SetColorKey(bitmap,SDL_SRCCOLORKEY,SDL_MapRGB(bitmap->format,0,255,255)); SDL_SetColorKey(bitmap,SDL_SRCCOLORKEY,SDL_MapRGB(bitmap->format,0,255,255));
pos.x = screen->w/2 - bitmap->w/2; pos.x = screen->w/2 - bitmap->w/2;
pos.y = screen->h/2 - bitmap->h/2; pos.y = screen->h/2 - bitmap->h/2;
@ -3247,6 +3249,7 @@ CSplitWindow::~CSplitWindow()
} }
void CSplitWindow::activate() void CSplitWindow::activate()
{ {
ClickableL::activate();
LOCPLINT->objsToBlit.push_back(this); LOCPLINT->objsToBlit.push_back(this);
KeyInterested::activate(); KeyInterested::activate();
ok->activate(); ok->activate();
@ -3255,6 +3258,7 @@ void CSplitWindow::activate()
} }
void CSplitWindow::deactivate() void CSplitWindow::deactivate()
{ {
ClickableL::deactivate();
LOCPLINT->objsToBlit.erase(std::find(LOCPLINT->objsToBlit.begin(),LOCPLINT->objsToBlit.end(),this)); LOCPLINT->objsToBlit.erase(std::find(LOCPLINT->objsToBlit.begin(),LOCPLINT->objsToBlit.end(),this));
KeyInterested::deactivate(); KeyInterested::deactivate();
ok->deactivate(); ok->deactivate();
@ -3280,23 +3284,63 @@ void CSplitWindow::sliderMoved(int to)
} }
void CSplitWindow::show(SDL_Surface * to) void CSplitWindow::show(SDL_Surface * to)
{ {
char pom[15];
blitAt(bitmap,pos.x,pos.y,screen); blitAt(bitmap,pos.x,pos.y,screen);
ok->show(); ok->show();
cancel->show(); cancel->show();
slider->show(); slider->show();
SDL_itoa(a1,pom,10); printAtMiddle(boost::lexical_cast<std::string>(a1) + (!which ? "_" : ""),pos.x+70,pos.y+237,GEOR16,zwykly,screen);
printAtMiddle(pom,pos.x+70,pos.y+237,GEOR16,zwykly,screen); printAtMiddle(boost::lexical_cast<std::string>(a2) + (which ? "_" : ""),pos.x+233,pos.y+237,GEOR16,zwykly,screen);
SDL_itoa(a2,pom,10);
printAtMiddle(pom,pos.x+233,pos.y+237,GEOR16,zwykly,screen);
anim->blitPic(screen,pos.x+20,pos.y+54,false); anim->blitPic(screen,pos.x+20,pos.y+54,false);
anim->blitPic(screen,pos.x+177,pos.y+54,false); anim->blitPic(screen,pos.x+177,pos.y+54,false);
} }
void CSplitWindow::keyPressed (const SDL_KeyboardEvent & key) void CSplitWindow::keyPressed (const SDL_KeyboardEvent & key)
{ {
//TODO: make manual typing possible if(key.state != SDL_PRESSED)
return;
int &cur = (which ? a2 : a1),
&sec = (which ? a1 : a2),
ncur = cur;
if (key.keysym.sym == SDLK_BACKSPACE)
{
ncur /= 10;
}
else if(key.keysym.sym == SDLK_TAB)
{
which = !which;
}
else
{
int number = key.keysym.sym - SDLK_0;
if (number < 0 || number > 9) //not a number presses
{
return;
}
ncur = cur*10 + number;
}
int delta = ncur - cur;
if(delta > sec)
{
cur += sec;
sec = 0;
}
slider->moveTo(which ? ncur : a1+a2-ncur);
} }
void CSplitWindow::clickLeft( boost::logic::tribool down )
{
if(down)
{
Point click(LOCPLINT->current->motion.x,LOCPLINT->current->motion.y);
click -= pos.topLeft();
if(Rect(19,216,105,40).isIn(click))
which = 0;
else if(Rect(175,216,105,40).isIn(click))
which = 1;
}
}
void CCreInfoWindow::show(SDL_Surface * to) void CCreInfoWindow::show(SDL_Surface * to)
{ {
char pom[15]; char pom[15];

View File

@ -58,10 +58,22 @@ struct Point
{ {
return Point(x+b.x,y+b.y); return Point(x+b.x,y+b.y);
} }
Point& operator+=(const Point &b)
{
x += b.x;
y += b.y;
return *this;
}
Point operator-(const Point &b) Point operator-(const Point &b)
{ {
return Point(x+b.x,y+b.y); return Point(x+b.x,y+b.y);
} }
Point& operator-=(const Point &b)
{
x -= b.x;
y -= b.y;
return *this;
}
bool operator<(const Point &b) bool operator<(const Point &b)
{ {
return x < b.x && y < b.y; return x < b.x && y < b.y;
@ -633,7 +645,7 @@ public:
~CRecrutationWindow(); ~CRecrutationWindow();
}; };
class CSplitWindow : public IShowable, public KeyInterested class CSplitWindow : public IShowable, public KeyInterested, public ClickableL
{ {
public: public:
CGarrisonInt *gar; CGarrisonInt *gar;
@ -651,6 +663,7 @@ public:
void close(); void close();
void deactivate(); void deactivate();
void show(SDL_Surface * to = NULL); void show(SDL_Surface * to = NULL);
void clickLeft(boost::logic::tribool down);
void keyPressed (const SDL_KeyboardEvent & key); void keyPressed (const SDL_KeyboardEvent & key);
void sliderMoved(int to); void sliderMoved(int to);
}; };

View File

@ -11,8 +11,10 @@ GENERAL:
* updating blockmap/visitmap of randomized objects * updating blockmap/visitmap of randomized objects
* fixed crashes on loading maps with flag all mines/dwelling victory condition * fixed crashes on loading maps with flag all mines/dwelling victory condition
* further fixes for leveling-up (stability and identical offered skills bug) * further fixes for leveling-up (stability and identical offered skills bug)
* support for numpad keyboard
ADVENTURE INTERFACE: ADVENTURE INTERFACE:
* added "Next hero" button functionality
* added missing path arrows * added missing path arrows
* corrected centering on hero's position * corrected centering on hero's position
* recalculating hero path after reselecting hero * recalculating hero path after reselecting hero
@ -23,6 +25,8 @@ ADVENTURE INTERFACE:
BATTLES: BATTLES:
* partial support for battle obstacles * partial support for battle obstacles
* only one spell can be casted per turn
* blocked opening sepllbook if hero doesn't have a one
* spells not known by hero can't be casted * spells not known by hero can't be casted
* spell books won't be placed in War Machine slots after battle * spell books won't be placed in War Machine slots after battle
* attack is now possible when hex under cursor is not displayed * attack is now possible when hex under cursor is not displayed
@ -41,6 +45,8 @@ New spells supported:
- Misfortune - Misfortune
TOWN INTERFACE: TOWN INTERFACE:
* cannot build more than one capitol
* cannot build shipyard if town is not near water
* Rampart's Treasury requires Miner's Guild * Rampart's Treasury requires Miner's Guild
* minor improvements in Recruitment Window * minor improvements in Recruitment Window
* fixed crash occuring when clicking on hero portrait in Tavern Window, minor improvements for Tavern Window * fixed crash occuring when clicking on hero portrait in Tavern Window, minor improvements for Tavern Window
@ -56,6 +62,8 @@ PREGAME:
* minor fixes * minor fixes
OBJECTS: OBJECTS:
* windmill gives 500 gold only during first week ever (not every month)
* After the first visit to the Witch Hut, right-click/hover tip mentions the skill available.
New objects supported: New objects supported:
* Prison * Prison
* Magic Well * Magic Well

View File

@ -200,6 +200,28 @@ namespace vstd
} }
using vstd::operator-=; using vstd::operator-=;
template <typename t1, typename t2>
t1 & amax(t1 &a, const t2 &b)
{
if(a >= b)
return a;
else
{
a = b;
return a;
}
}
template <typename t1, typename t2>
t1 & amin(t1 &a, const t2 &b)
{
if(a <= b)
return a;
else
{
a = b;
return a;
}
}
#include "CConsoleHandler.h" #include "CConsoleHandler.h"
extern DLL_EXPORT std::ostream *logfile; extern DLL_EXPORT std::ostream *logfile;
extern DLL_EXPORT CConsoleHandler *console; extern DLL_EXPORT CConsoleHandler *console;