mirror of
https://github.com/vcmi/vcmi.git
synced 2024-12-24 22:14:36 +02:00
* directional attack in battles
* CSystemOptionsWindow partially done * added a few consts and references to improve performance
This commit is contained in:
parent
8bde616908
commit
6a3d0b666f
@ -90,7 +90,7 @@ void AdventureMapButton::activate()
|
||||
KeyInterested::activate();
|
||||
}
|
||||
|
||||
void AdventureMapButton::keyPressed (SDL_KeyboardEvent & key)
|
||||
void AdventureMapButton::keyPressed (const SDL_KeyboardEvent & key)
|
||||
{
|
||||
//TODO: check if it's shortcut
|
||||
}
|
||||
@ -272,7 +272,7 @@ void CSlider::sliderClicked()
|
||||
}
|
||||
}
|
||||
|
||||
void CSlider::mouseMoved (SDL_MouseMotionEvent & sEvent)
|
||||
void CSlider::mouseMoved (const SDL_MouseMotionEvent & sEvent)
|
||||
{
|
||||
float v = sEvent.x - pos.x - 24;
|
||||
v/= (pos.w - 48);
|
||||
|
@ -17,7 +17,7 @@ public:
|
||||
virtual void clickLeft (tribool down);
|
||||
void hover (bool on);
|
||||
void block(bool on); //if button is blocked then it'll change it's graphic to inactive (offset==2) and won't react on l-clicks
|
||||
void keyPressed (SDL_KeyboardEvent & key);
|
||||
void keyPressed (const SDL_KeyboardEvent & key);
|
||||
void activate(); // makes button active
|
||||
void deactivate(); // makes button inactive (but doesn't delete)
|
||||
|
||||
@ -78,7 +78,7 @@ public:
|
||||
void sliderClicked();
|
||||
void moveLeft();
|
||||
void clickLeft (tribool down);
|
||||
void mouseMoved (SDL_MouseMotionEvent & sEvent);
|
||||
void mouseMoved (const SDL_MouseMotionEvent & sEvent);
|
||||
void moveRight();
|
||||
void moveTo(int to);
|
||||
void block(bool on);
|
||||
|
@ -219,7 +219,7 @@ void CMinimap::hover (bool on)
|
||||
else if (LOCPLINT->adventureInt->statusbar.current==statusbarTxt)
|
||||
LOCPLINT->adventureInt->statusbar.clear();
|
||||
}
|
||||
void CMinimap::mouseMoved (SDL_MouseMotionEvent & sEvent)
|
||||
void CMinimap::mouseMoved (const SDL_MouseMotionEvent & sEvent)
|
||||
{
|
||||
if (pressedL)
|
||||
{
|
||||
@ -395,7 +395,7 @@ endchkpt:
|
||||
void CTerrainRect::clickRight(tribool down)
|
||||
{
|
||||
}
|
||||
void CTerrainRect::mouseMoved (SDL_MouseMotionEvent & sEvent)
|
||||
void CTerrainRect::mouseMoved (const SDL_MouseMotionEvent & sEvent)
|
||||
{
|
||||
int3 pom=LOCPLINT->adventureInt->verifyPos(whichTileIsIt(sEvent.x,sEvent.y));
|
||||
if (pom!=curHoveredTile)
|
||||
@ -438,7 +438,7 @@ void CTerrainRect::mouseMoved (SDL_MouseMotionEvent & sEvent)
|
||||
}
|
||||
CGI->curh->changeGraphic(0,0);
|
||||
}
|
||||
void CTerrainRect::keyPressed (SDL_KeyboardEvent & key){}
|
||||
void CTerrainRect::keyPressed (const SDL_KeyboardEvent & key){}
|
||||
void CTerrainRect::hover(bool on)
|
||||
{
|
||||
if (!on)
|
||||
@ -698,7 +698,7 @@ void CTerrainRect::show()
|
||||
}
|
||||
}
|
||||
|
||||
int3 CTerrainRect::whichTileIsIt(int x, int y)
|
||||
int3 CTerrainRect::whichTileIsIt(const int & x, const int & y)
|
||||
{
|
||||
int3 ret;
|
||||
ret.x = LOCPLINT->adventureInt->position.x + ((LOCPLINT->current->motion.x-pos.x)/32);
|
||||
@ -1048,6 +1048,11 @@ void CAdvMapInt::fadventureOPtions()
|
||||
}
|
||||
void CAdvMapInt::fsystemOptions()
|
||||
{
|
||||
LOCPLINT->curint->deactivate();
|
||||
|
||||
CSystemOptionsWindow * sysopWindow = new CSystemOptionsWindow(genRect(487, 481, 159, 57));
|
||||
sysopWindow->activate();
|
||||
LOCPLINT->objsToBlit.push_back(sysopWindow);
|
||||
}
|
||||
void CAdvMapInt::fnextHero()
|
||||
{
|
||||
|
@ -34,7 +34,7 @@ public:
|
||||
void clickRight (tribool down);
|
||||
void clickLeft (tribool down);
|
||||
void hover (bool on);
|
||||
void mouseMoved (SDL_MouseMotionEvent & sEvent);
|
||||
void mouseMoved (const SDL_MouseMotionEvent & sEvent);
|
||||
void activate(); // makes button active
|
||||
void deactivate(); // makes button inactive (but don't deletes)
|
||||
void hideTile(int3 pos); //puts FoW
|
||||
@ -56,11 +56,11 @@ public:
|
||||
void clickLeft(tribool down);
|
||||
void clickRight(tribool down);
|
||||
void hover(bool on);
|
||||
void mouseMoved (SDL_MouseMotionEvent & sEvent);
|
||||
void keyPressed (SDL_KeyboardEvent & key);
|
||||
void mouseMoved (const SDL_MouseMotionEvent & sEvent);
|
||||
void keyPressed (const SDL_KeyboardEvent & key);
|
||||
void show();
|
||||
void showPath();
|
||||
int3 whichTileIsIt(int x, int y); //x,y are cursor position
|
||||
int3 whichTileIsIt(const int & x, const int & y); //x,y are cursor position
|
||||
int3 whichTileIsIt(); //uses current cursor pos
|
||||
};
|
||||
class CResDataBar
|
||||
|
@ -248,6 +248,7 @@ void CBattleInterface::setPrintMouseShadow(bool set)
|
||||
|
||||
void CBattleInterface::activate()
|
||||
{
|
||||
MotionInterested::activate();
|
||||
subInt = NULL;
|
||||
bOptions->activate();
|
||||
bSurrender->activate();
|
||||
@ -270,6 +271,7 @@ void CBattleInterface::activate()
|
||||
|
||||
void CBattleInterface::deactivate()
|
||||
{
|
||||
MotionInterested::deactivate();
|
||||
bOptions->deactivate();
|
||||
bSurrender->deactivate();
|
||||
bFlee->deactivate();
|
||||
@ -461,6 +463,85 @@ void CBattleInterface::show(SDL_Surface * to)
|
||||
}
|
||||
}
|
||||
|
||||
void CBattleInterface::mouseMoved(const SDL_MouseMotionEvent &sEvent)
|
||||
{
|
||||
if(activeStack>=0)
|
||||
{
|
||||
int myNumber = -1; //number of hovered tile
|
||||
for(int g=0; g<187; ++g)
|
||||
{
|
||||
if(bfield[g].hovered && bfield[g].strictHovered)
|
||||
{
|
||||
myNumber = g;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(myNumber == -1)
|
||||
{
|
||||
CGI->curh->changeGraphic(1, 6);
|
||||
}
|
||||
else
|
||||
{
|
||||
if(std::find(shadedHexes.begin(),shadedHexes.end(),myNumber) == shadedHexes.end())
|
||||
{
|
||||
CStack *shere = LOCPLINT->cb->battleGetStackByPos(myNumber);
|
||||
if(shere)
|
||||
{
|
||||
if(shere->owner == LOCPLINT->playerID) //our stack
|
||||
CGI->curh->changeGraphic(1,5);
|
||||
else if(LOCPLINT->cb->battleGetStackByID(activeStack)->creature->isShooting()) //we can shoot enemy
|
||||
CGI->curh->changeGraphic(1,3);
|
||||
else if(isTileAttackable(myNumber)) //available enemy (melee attackable)
|
||||
{
|
||||
int fromHex = -1;
|
||||
for(int b=0; b<187; ++b)
|
||||
if(bfield[b].hovered && !bfield[b].strictHovered)
|
||||
{
|
||||
fromHex = b;
|
||||
break;
|
||||
}
|
||||
if(fromHex!=-1 && fromHex%17!=0 && fromHex%17!=16)
|
||||
{
|
||||
switch(BattleInfo::mutualPosition(fromHex, myNumber))
|
||||
{
|
||||
case 0:
|
||||
CGI->curh->changeGraphic(1,12);
|
||||
break;
|
||||
case 1:
|
||||
CGI->curh->changeGraphic(1,7);
|
||||
break;
|
||||
case 2:
|
||||
CGI->curh->changeGraphic(1,8);
|
||||
break;
|
||||
case 3:
|
||||
CGI->curh->changeGraphic(1,9);
|
||||
break;
|
||||
case 4:
|
||||
CGI->curh->changeGraphic(1,10);
|
||||
break;
|
||||
case 5:
|
||||
CGI->curh->changeGraphic(1,11);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else //unavailable enemy
|
||||
CGI->curh->changeGraphic(1,0);
|
||||
}
|
||||
else //empty unavailable tile
|
||||
CGI->curh->changeGraphic(1,0);
|
||||
}
|
||||
else //available tile
|
||||
{
|
||||
if(LOCPLINT->cb->battleGetStackByID(activeStack)->creature->isFlying())
|
||||
CGI->curh->changeGraphic(1,2);
|
||||
else
|
||||
CGI->curh->changeGraphic(1,1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool CBattleInterface::reverseCreature(int number, int hex, bool wideTrick)
|
||||
{
|
||||
if(creAnims[number]==NULL)
|
||||
@ -518,7 +599,6 @@ void CBattleInterface::bSurrenderf()
|
||||
|
||||
void CBattleInterface::bFleef()
|
||||
{
|
||||
|
||||
CFunctionList<void()> ony = boost::bind(&CBattleInterface::activate,this);
|
||||
ony += boost::bind(&CBattleInterface::reallyFlee,this);
|
||||
LOCPLINT->showYesNoDialog(CGI->generaltexth->allTexts[28],std::vector<SComponent*>(), ony, boost::bind(&CBattleInterface::activate,this), true, false);
|
||||
@ -951,6 +1031,16 @@ void CBattleInterface::giveCommand(ui8 action, ui16 tile, ui32 stack, si32 addit
|
||||
activeStack = -1;
|
||||
}
|
||||
|
||||
bool CBattleInterface::isTileAttackable(int number)
|
||||
{
|
||||
for(int b=0; b<shadedHexes.size(); ++b)
|
||||
{
|
||||
if(BattleInfo::mutualPosition(shadedHexes[b], number) != -1 || shadedHexes[b] == number)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void CBattleInterface::hexLclicked(int whichOne)
|
||||
{
|
||||
if((whichOne%17)!=0 && (whichOne%17)!=16) //if player is trying to attack enemey unit or move creature stack
|
||||
@ -972,15 +1062,36 @@ void CBattleInterface::hexLclicked(int whichOne)
|
||||
}
|
||||
else if(dest->owner != attackingHeroInstance->tempOwner) //attacking
|
||||
{
|
||||
std::vector<int> n = BattleInfo::neighbouringTiles(whichOne);
|
||||
for(int i=0;i<n.size();i++)
|
||||
//std::vector<int> n = BattleInfo::neighbouringTiles(whichOne);
|
||||
//for(int i=0;i<n.size();i++)
|
||||
//{
|
||||
// //TODO: now we are using first available tile, but in the future we should add possibility of choosing from which tile we want to attack
|
||||
// if(vstd::contains(shadedHexes,n[i]))
|
||||
// {
|
||||
// giveCommand(6,n[i],activeStack,whichOne);
|
||||
// return;
|
||||
// }
|
||||
//}
|
||||
switch(CGI->curh->number)
|
||||
{
|
||||
//TODO: now we are using first available tile, but in the future we should add possibility of choosing from which tile we want to attack
|
||||
if(vstd::contains(shadedHexes,n[i]))
|
||||
{
|
||||
giveCommand(6,n[i],activeStack,whichOne);
|
||||
return;
|
||||
}
|
||||
case 12:
|
||||
giveCommand(6,whichOne + ( (whichOne/17)%2 ? 17 : 18 ),activeStack,whichOne);
|
||||
break;
|
||||
case 7:
|
||||
giveCommand(6,whichOne + ( (whichOne/17)%2 ? 16 : 17 ),activeStack,whichOne);
|
||||
break;
|
||||
case 8:
|
||||
giveCommand(6,whichOne - 1,activeStack,whichOne);
|
||||
break;
|
||||
case 9:
|
||||
giveCommand(6,whichOne - ( (whichOne/17)%2 ? 18 : 17 ),activeStack,whichOne);
|
||||
break;
|
||||
case 10:
|
||||
giveCommand(6,whichOne - ( (whichOne/17)%2 ? 17 : 16 ),activeStack,whichOne);
|
||||
break;
|
||||
case 11:
|
||||
giveCommand(6,whichOne + 1,activeStack,whichOne);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1089,6 +1200,8 @@ float CBattleInterface::getAnimSpeedMultiplier() const
|
||||
return 2.2f;
|
||||
case 4:
|
||||
return 1.0f;
|
||||
default:
|
||||
return 0.0f;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1415,7 +1528,7 @@ void CBattleHero::clickLeft(boost::logic::tribool down)
|
||||
}
|
||||
}
|
||||
|
||||
CBattleHero::CBattleHero(std::string defName, int phaseG, int imageG, bool flipG, unsigned char player, const CGHeroInstance * hero): phase(phaseG), image(imageG), flip(flipG), flagAnim(0), myHero(hero)
|
||||
CBattleHero::CBattleHero(const std::string & defName, int phaseG, int imageG, bool flipG, unsigned char player, const CGHeroInstance * hero): phase(phaseG), image(imageG), flip(flipG), flagAnim(0), myHero(hero)
|
||||
{
|
||||
dh = CDefHandler::giveDef( defName );
|
||||
for(int i=0; i<dh->ourImages.size(); ++i) //transforming images
|
||||
@ -1508,7 +1621,7 @@ CBattleHex::CBattleHex() : myNumber(-1), accesible(true), hovered(false), strict
|
||||
{
|
||||
}
|
||||
|
||||
void CBattleHex::mouseMoved(SDL_MouseMotionEvent &sEvent)
|
||||
void CBattleHex::mouseMoved(const SDL_MouseMotionEvent &sEvent)
|
||||
{
|
||||
if(myInterface->cellShade)
|
||||
{
|
||||
@ -1519,31 +1632,6 @@ void CBattleHex::mouseMoved(SDL_MouseMotionEvent &sEvent)
|
||||
else //hovered pixel is inside hex
|
||||
{
|
||||
strictHovered = true;
|
||||
if(myInterface->activeStack>=0)
|
||||
{
|
||||
if(std::find(myInterface->shadedHexes.begin(),myInterface->shadedHexes.end(),myNumber) == myInterface->shadedHexes.end())
|
||||
{
|
||||
CStack *shere = LOCPLINT->cb->battleGetStackByPos(myNumber);
|
||||
if(shere)
|
||||
{
|
||||
if(shere->owner == LOCPLINT->playerID) //our stack
|
||||
CGI->curh->changeGraphic(1,5);
|
||||
else if(LOCPLINT->cb->battleGetStackByID(myInterface->activeStack)->creature->isShooting()) //we can shoot enemy
|
||||
CGI->curh->changeGraphic(1,3);
|
||||
else //unavailable enemy
|
||||
CGI->curh->changeGraphic(1,0);
|
||||
}
|
||||
else //empty unavailable tile
|
||||
CGI->curh->changeGraphic(1,0);
|
||||
}
|
||||
else //available tile
|
||||
{
|
||||
if(LOCPLINT->cb->battleGetStackByID(myInterface->activeStack)->creature->isFlying())
|
||||
CGI->curh->changeGraphic(1,2);
|
||||
else
|
||||
CGI->curh->changeGraphic(1,1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1555,7 +1643,7 @@ void CBattleHex::mouseMoved(SDL_MouseMotionEvent &sEvent)
|
||||
{
|
||||
char tabh[160];
|
||||
CStack attackedStack = *LOCPLINT->cb->battleGetStackByPos(myNumber);
|
||||
std::string attackedName = attackedStack.amount == 1 ? attackedStack.creature->nameSing : attackedStack.creature->namePl;
|
||||
const std::string & attackedName = attackedStack.amount == 1 ? attackedStack.creature->nameSing : attackedStack.creature->namePl;
|
||||
sprintf(tabh, CGI->generaltexth->allTexts[220].c_str(), attackedName.c_str());
|
||||
myInterface->console->alterTxt = std::string(tabh);
|
||||
setAlterText = true;
|
||||
@ -1632,7 +1720,7 @@ void CBattleConsole::show(SDL_Surface * to)
|
||||
}
|
||||
}
|
||||
|
||||
bool CBattleConsole::addText(std::string text)
|
||||
bool CBattleConsole::addText(const std::string & text)
|
||||
{
|
||||
if(text.size()>70)
|
||||
return false; //text too long!
|
||||
@ -1661,7 +1749,7 @@ void CBattleConsole::eraseText(unsigned int pos)
|
||||
}
|
||||
}
|
||||
|
||||
void CBattleConsole::changeTextAt(std::string text, unsigned int pos)
|
||||
void CBattleConsole::changeTextAt(const std::string & text, unsigned int pos)
|
||||
{
|
||||
if(pos >= texts.size()) //no such pos
|
||||
return;
|
||||
|
@ -27,7 +27,7 @@ public:
|
||||
void activate();
|
||||
void deactivate();
|
||||
void clickLeft(boost::logic::tribool down);
|
||||
CBattleHero(std::string defName, int phaseG, int imageG, bool filpG, unsigned char player, const CGHeroInstance * hero); //c-tor
|
||||
CBattleHero(const std::string & defName, int phaseG, int imageG, bool filpG, unsigned char player, const CGHeroInstance * hero); //c-tor
|
||||
~CBattleHero(); //d-tor
|
||||
};
|
||||
|
||||
@ -48,7 +48,7 @@ public:
|
||||
void hover (bool on);
|
||||
void activate();
|
||||
void deactivate();
|
||||
void mouseMoved (SDL_MouseMotionEvent & sEvent);
|
||||
void mouseMoved (const SDL_MouseMotionEvent & sEvent);
|
||||
void clickLeft(boost::logic::tribool down);
|
||||
void clickRight(boost::logic::tribool down);
|
||||
CBattleHex();
|
||||
@ -69,9 +69,9 @@ public:
|
||||
CBattleConsole(); //c-tor
|
||||
~CBattleConsole(); //d-tor
|
||||
void show(SDL_Surface * to = 0);
|
||||
bool addText(std::string text); //adds text at the last position; returns false if failed (e.g. text longer than 70 characters)
|
||||
bool addText(const std::string & text); //adds text at the last position; returns false if failed (e.g. text longer than 70 characters)
|
||||
void eraseText(unsigned int pos); //erases added text at position pos
|
||||
void changeTextAt(std::string text, unsigned int pos); //if we have more than pos texts, pos-th is changed to given one
|
||||
void changeTextAt(const std::string & text, unsigned int pos); //if we have more than pos texts, pos-th is changed to given one
|
||||
void scrollUp(unsigned int by = 1); //scrolls console up by 'by' positions
|
||||
void scrollDown(unsigned int by = 1); //scrolls console up by 'by' positions
|
||||
};
|
||||
@ -112,7 +112,7 @@ public:
|
||||
void show(SDL_Surface * to = 0);
|
||||
};
|
||||
|
||||
class CBattleInterface : public CMainInterface
|
||||
class CBattleInterface : public CMainInterface, public MotionInterested
|
||||
{
|
||||
private:
|
||||
SDL_Surface * background, * menu, * amountBasic, * amountNormal, * cellBorders, * backgroundWithHexes;
|
||||
@ -160,6 +160,7 @@ private:
|
||||
std::list<SProjectileInfo> projectiles;
|
||||
void projectileShowHelper(SDL_Surface * to=NULL); //prints projectiles present on the battlefield
|
||||
void giveCommand(ui8 action, ui16 tile, ui32 stack, si32 additional=-1);
|
||||
bool isTileAttackable(int number); //returns true if tile 'number' is neighbouring any tile from active stack's range or is one of these tiles
|
||||
public:
|
||||
CBattleInterface(CCreatureSet * army1, CCreatureSet * army2, CGHeroInstance *hero1, CGHeroInstance *hero2); //c-tor
|
||||
~CBattleInterface(); //d-tor
|
||||
@ -198,6 +199,7 @@ public:
|
||||
void activate();
|
||||
void deactivate();
|
||||
void show(SDL_Surface * to = NULL);
|
||||
void mouseMoved(const SDL_MouseMotionEvent &sEvent);
|
||||
bool reverseCreature(int number, int hex, bool wideTrick = false); //reverses animation of given creature playing animation of reversing
|
||||
|
||||
//call-ins
|
||||
|
@ -143,7 +143,7 @@ void CBuildingRect::clickRight (tribool down)
|
||||
}
|
||||
}
|
||||
|
||||
void CBuildingRect::mouseMoved (SDL_MouseMotionEvent & sEvent)
|
||||
void CBuildingRect::mouseMoved (const SDL_MouseMotionEvent & sEvent)
|
||||
{
|
||||
if(area)
|
||||
{
|
||||
|
@ -26,7 +26,7 @@ public:
|
||||
void hover(bool on);
|
||||
void clickLeft (tribool down);
|
||||
void clickRight (tribool down);
|
||||
void mouseMoved (SDL_MouseMotionEvent & sEvent);
|
||||
void mouseMoved (const SDL_MouseMotionEvent & sEvent);
|
||||
};
|
||||
class CHeroGSlot : public ClickableL, public ClickableR, public Hoverable
|
||||
{
|
||||
|
@ -18,13 +18,13 @@ void CCursorHandler::initCursor()
|
||||
SDL_ShowCursor(SDL_DISABLE);
|
||||
}
|
||||
|
||||
void CCursorHandler::changeGraphic(int type, int no)
|
||||
void CCursorHandler::changeGraphic(const int & type, const int & no)
|
||||
{
|
||||
mode = type;
|
||||
number = no;
|
||||
}
|
||||
|
||||
void CCursorHandler::cursorMove(int x, int y)
|
||||
void CCursorHandler::cursorMove(const int & x, const int & y)
|
||||
{
|
||||
xpos = x;
|
||||
ypos = y;
|
||||
|
@ -16,8 +16,8 @@ public:
|
||||
std::vector<CDefHandler*> cursors;
|
||||
int xpos, ypos; //position of cursor
|
||||
void initCursor(); //inits cursorHandler
|
||||
void cursorMove(int x, int y); //change cursor's positions to (x, y)
|
||||
void changeGraphic(int type, int no); //changes cursor graphic for type type (0 - adventure, 1 - combat, 2 - default, 3 - spellbook) and frame no (not used for type 3)
|
||||
void cursorMove(const int & x, const int & y); //change cursor's positions to (x, y)
|
||||
void changeGraphic(const int & type, const int & no); //changes cursor graphic for type type (0 - adventure, 1 - combat, 2 - default, 3 - spellbook) and frame no (not used for type 3)
|
||||
void draw1();
|
||||
void draw2();
|
||||
void hide(){Show=0;};
|
||||
|
@ -2269,7 +2269,7 @@ void CStatusBar::clear()
|
||||
SDL_Rect pom = genRect(pos.h,pos.w,pos.x,pos.y);
|
||||
SDL_BlitSurface(bg,&genRect(pos.h,pos.w,0,0),screen,&pom);
|
||||
}
|
||||
void CStatusBar::print(std::string text)
|
||||
void CStatusBar::print(const std::string & text)
|
||||
{
|
||||
current=text;
|
||||
SDL_Rect pom = genRect(pos.h,pos.w,pos.x,pos.y);
|
||||
@ -2432,7 +2432,7 @@ void CHeroList::clickLeft(tribool down)
|
||||
|
||||
}
|
||||
}
|
||||
void CHeroList::mouseMoved (SDL_MouseMotionEvent & sEvent)
|
||||
void CHeroList::mouseMoved (const SDL_MouseMotionEvent & sEvent)
|
||||
{
|
||||
if(isItIn(&arrupp,LOCPLINT->current->motion.x,LOCPLINT->current->motion.y))
|
||||
{
|
||||
@ -2502,7 +2502,7 @@ void CHeroList::clickRight(tribool down)
|
||||
void CHeroList::hover (bool on)
|
||||
{
|
||||
}
|
||||
void CHeroList::keyPressed (SDL_KeyboardEvent & key)
|
||||
void CHeroList::keyPressed (const SDL_KeyboardEvent & key)
|
||||
{
|
||||
}
|
||||
void CHeroList::updateHList()
|
||||
@ -2617,7 +2617,7 @@ void CTownList::select(int which)
|
||||
fun();
|
||||
}
|
||||
|
||||
void CTownList::mouseMoved (SDL_MouseMotionEvent & sEvent)
|
||||
void CTownList::mouseMoved (const SDL_MouseMotionEvent & sEvent)
|
||||
{
|
||||
if(isItIn(&arrupp,LOCPLINT->current->motion.x,LOCPLINT->current->motion.y))
|
||||
{
|
||||
@ -2749,7 +2749,7 @@ void CTownList::hover (bool on)
|
||||
{
|
||||
}
|
||||
|
||||
void CTownList::keyPressed (SDL_KeyboardEvent & key)
|
||||
void CTownList::keyPressed (const SDL_KeyboardEvent & key)
|
||||
{
|
||||
}
|
||||
|
||||
@ -3070,7 +3070,7 @@ void CSplitWindow::show(SDL_Surface * to)
|
||||
anim->blitPic(screen,pos.x+20,pos.y+54,false);
|
||||
anim->blitPic(screen,pos.x+177,pos.y+54,false);
|
||||
}
|
||||
void CSplitWindow::keyPressed (SDL_KeyboardEvent & key)
|
||||
void CSplitWindow::keyPressed (const SDL_KeyboardEvent & key)
|
||||
{
|
||||
//TODO: make manual typing possible
|
||||
}
|
||||
@ -3287,7 +3287,7 @@ void CCreInfoWindow::dismissF()
|
||||
dsm();
|
||||
close();
|
||||
}
|
||||
void CCreInfoWindow::keyPressed (SDL_KeyboardEvent & key)
|
||||
void CCreInfoWindow::keyPressed (const SDL_KeyboardEvent & key)
|
||||
{
|
||||
}
|
||||
void CCreInfoWindow::deactivate()
|
||||
@ -3732,4 +3732,88 @@ void CMarketplaceWindow::selectionChanged(bool side)
|
||||
rSubs[i] = oss.str();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
CSystemOptionsWindow::CSystemOptionsWindow(const SDL_Rect &pos)
|
||||
{
|
||||
this->pos = pos;
|
||||
background = BitmapHandler::loadBitmap("SysOpbck.bmp", true);
|
||||
graphics->blueToPlayersAdv(background, LOCPLINT->playerID);
|
||||
|
||||
//printing texts
|
||||
CSDL_Ext::printAtMiddle(CGI->generaltexth->allTexts[568], 240, 32, GEOR16, tytulowy, background); //window title
|
||||
CSDL_Ext::printAtMiddle(CGI->generaltexth->allTexts[569], 122, 65, GEOR16, tytulowy, background); //hero speed
|
||||
CSDL_Ext::printAtMiddle(CGI->generaltexth->allTexts[570], 122, 131, GEOR16, tytulowy, background); //enemy speed
|
||||
CSDL_Ext::printAtMiddle(CGI->generaltexth->allTexts[571], 122, 197, GEOR16, tytulowy, background); //map scroll speed
|
||||
CSDL_Ext::printAtMiddle(CGI->generaltexth->allTexts[20], 122, 263, GEOR16, tytulowy, background); //video quality
|
||||
CSDL_Ext::printAtMiddle(CGI->generaltexth->allTexts[394], 122, 348, GEOR16, tytulowy, background); //music volume
|
||||
CSDL_Ext::printAtMiddle(CGI->generaltexth->allTexts[395], 122, 414, GEOR16, tytulowy, background); //effects volume
|
||||
|
||||
CSDL_Ext::printAt(CGI->generaltexth->allTexts[572], 283, 57, GEOR16, zwykly, background); //show move path
|
||||
CSDL_Ext::printAt(CGI->generaltexth->allTexts[573], 283, 89, GEOR16, zwykly, background); //show hero reminder
|
||||
CSDL_Ext::printAt(CGI->generaltexth->allTexts[574], 283, 121, GEOR16, zwykly, background); //quick combat
|
||||
CSDL_Ext::printAt(CGI->generaltexth->allTexts[575], 283, 153, GEOR16, zwykly, background); //video subtitles
|
||||
CSDL_Ext::printAt(CGI->generaltexth->allTexts[576], 283, 185, GEOR16, zwykly, background); //town building outlines
|
||||
CSDL_Ext::printAt(CGI->generaltexth->allTexts[577], 283, 217, GEOR16, zwykly, background); //spell book animation
|
||||
|
||||
//setting up buttons
|
||||
quitGame = new AdventureMapButton (CGI->preth->zelp[324].first, CGI->preth->zelp[324].second, boost::bind(&CSystemOptionsWindow::bquitf, this), 405, 471, "soquit.def", false, NULL, false);
|
||||
std::swap(quitGame->imgs[0][0], quitGame->imgs[0][1]);
|
||||
backToMap = new AdventureMapButton (CGI->preth->zelp[325].first, CGI->preth->zelp[325].second, boost::bind(&CSystemOptionsWindow::breturnf, this), 516, 471, "soretrn.def", false, NULL, false);
|
||||
std::swap(backToMap->imgs[0][0], backToMap->imgs[0][1]);
|
||||
}
|
||||
|
||||
CSystemOptionsWindow::~CSystemOptionsWindow()
|
||||
{
|
||||
SDL_FreeSurface(background);
|
||||
|
||||
delete quitGame;
|
||||
delete backToMap;
|
||||
}
|
||||
|
||||
void CSystemOptionsWindow::bquitf()
|
||||
{
|
||||
this->deactivate();
|
||||
LOCPLINT->showYesNoDialog(CGI->generaltexth->allTexts[578], std::vector<SComponent*>(), boost::bind(exit, 0), boost::bind(&CSystemOptionsWindow::activate, this), false, false);
|
||||
}
|
||||
|
||||
void CSystemOptionsWindow::breturnf()
|
||||
{
|
||||
deactivate();
|
||||
|
||||
for(int g=0; g<LOCPLINT->objsToBlit.size(); ++g)
|
||||
{
|
||||
if(dynamic_cast<CSystemOptionsWindow*>(LOCPLINT->objsToBlit[g]))
|
||||
{
|
||||
LOCPLINT->objsToBlit.erase(LOCPLINT->objsToBlit.begin()+g);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
delete this;
|
||||
LOCPLINT->curint->activate();
|
||||
}
|
||||
|
||||
void CSystemOptionsWindow::activate()
|
||||
{
|
||||
quitGame->activate();
|
||||
backToMap->activate();
|
||||
}
|
||||
|
||||
void CSystemOptionsWindow::deactivate()
|
||||
{
|
||||
quitGame->deactivate();
|
||||
backToMap->deactivate();
|
||||
}
|
||||
|
||||
void CSystemOptionsWindow::show(SDL_Surface *to)
|
||||
{
|
||||
//evaluating to
|
||||
if(!to)
|
||||
to = screen;
|
||||
|
||||
SDL_BlitSurface(background, NULL, to, &pos);
|
||||
|
||||
quitGame->show(to);
|
||||
backToMap->show(to);
|
||||
}
|
||||
|
@ -44,7 +44,7 @@ class IStatusBar
|
||||
{
|
||||
public:
|
||||
virtual ~IStatusBar(){}; //d-tor
|
||||
virtual void print(std::string text)=0; //prints text and refreshes statusbar
|
||||
virtual void print(const std::string & text)=0; //prints text and refreshes statusbar
|
||||
virtual void clear()=0;//clears statusbar and refreshes
|
||||
virtual void show()=0; //shows statusbar (with current text)
|
||||
virtual std::string getCurrent()=0;
|
||||
@ -134,7 +134,7 @@ class KeyInterested : public virtual CIntObject
|
||||
{
|
||||
public:
|
||||
virtual ~KeyInterested(){};
|
||||
virtual void keyPressed (SDL_KeyboardEvent & key)=0;
|
||||
virtual void keyPressed (const SDL_KeyboardEvent & key)=0;
|
||||
virtual void activate()=0;
|
||||
virtual void deactivate()=0;
|
||||
};
|
||||
@ -144,7 +144,7 @@ public:
|
||||
bool strongInterest; //if true - report all mouse movements, if not - only when hovered
|
||||
MotionInterested(){strongInterest=false;};
|
||||
virtual ~MotionInterested(){};
|
||||
virtual void mouseMoved (SDL_MouseMotionEvent & sEvent)=0;
|
||||
virtual void mouseMoved (const SDL_MouseMotionEvent & sEvent)=0;
|
||||
virtual void activate()=0;
|
||||
virtual void deactivate()=0;
|
||||
};
|
||||
@ -400,7 +400,7 @@ public:
|
||||
|
||||
CStatusBar(int x, int y, std::string name="ADROLLVR.bmp", int maxw=-1); //c-tor
|
||||
~CStatusBar(); //d-tor
|
||||
void print(std::string text); //prints text and refreshes statusbar
|
||||
void print(const std::string & text); //prints text and refreshes statusbar
|
||||
void clear();//clears statusbar and refreshes
|
||||
void show(); //shows statusbar (with current text)
|
||||
std::string getCurrent();
|
||||
@ -424,7 +424,7 @@ public:
|
||||
void clickLeft(boost::logic::tribool down);
|
||||
void activate();
|
||||
void deactivate();
|
||||
virtual void mouseMoved (SDL_MouseMotionEvent & sEvent)=0;
|
||||
virtual void mouseMoved (const SDL_MouseMotionEvent & sEvent)=0;
|
||||
virtual void genList()=0;
|
||||
virtual void select(int which)=0;
|
||||
virtual void draw()=0;
|
||||
@ -441,11 +441,11 @@ public:
|
||||
int getPosOfHero(const CArmedInstance* h);
|
||||
void genList();
|
||||
void select(int which);
|
||||
void mouseMoved (SDL_MouseMotionEvent & sEvent);
|
||||
void mouseMoved (const SDL_MouseMotionEvent & sEvent);
|
||||
void clickLeft(boost::logic::tribool down);
|
||||
void clickRight(boost::logic::tribool down);
|
||||
void hover (bool on);
|
||||
void keyPressed (SDL_KeyboardEvent & key);
|
||||
void keyPressed (const SDL_KeyboardEvent & key);
|
||||
void updateHList();
|
||||
void updateMove(const CGHeroInstance* which); //draws move points bar
|
||||
void redrawAllOne(int which);
|
||||
@ -465,11 +465,11 @@ public:
|
||||
~CTownList();
|
||||
void genList();
|
||||
void select(int which);
|
||||
void mouseMoved (SDL_MouseMotionEvent & sEvent);
|
||||
void mouseMoved (const SDL_MouseMotionEvent & sEvent);
|
||||
void clickLeft(boost::logic::tribool down);
|
||||
void clickRight(boost::logic::tribool down);
|
||||
void hover (bool on);
|
||||
void keyPressed (SDL_KeyboardEvent & key);
|
||||
void keyPressed (const SDL_KeyboardEvent & key);
|
||||
void draw();
|
||||
};
|
||||
|
||||
@ -534,7 +534,7 @@ public:
|
||||
void close();
|
||||
void deactivate();
|
||||
void show(SDL_Surface * to = NULL);
|
||||
void keyPressed (SDL_KeyboardEvent & key);
|
||||
void keyPressed (const SDL_KeyboardEvent & key);
|
||||
void sliderMoved(int to);
|
||||
};
|
||||
|
||||
@ -560,7 +560,7 @@ public:
|
||||
void close();
|
||||
void clickRight(boost::logic::tribool down);
|
||||
void dismissF();
|
||||
void keyPressed (SDL_KeyboardEvent & key);
|
||||
void keyPressed (const SDL_KeyboardEvent & key);
|
||||
void deactivate();
|
||||
void show(SDL_Surface * to = NULL);
|
||||
void onUpgradeYes();
|
||||
@ -636,6 +636,24 @@ public:
|
||||
void clear();
|
||||
};
|
||||
|
||||
class CSystemOptionsWindow : public IShowActivable, public CIntObject
|
||||
{
|
||||
private:
|
||||
SDL_Surface * background; //background of window
|
||||
AdventureMapButton * quitGame, * backToMap;
|
||||
public:
|
||||
CSystemOptionsWindow(const SDL_Rect & pos); //c-tor
|
||||
~CSystemOptionsWindow(); //d-tor
|
||||
|
||||
//functions for butons
|
||||
void bquitf(); //quit game
|
||||
void breturnf(); //return to game
|
||||
|
||||
void activate();
|
||||
void deactivate();
|
||||
void show(SDL_Surface * to = NULL);
|
||||
};
|
||||
|
||||
extern CPlayerInterface * LOCPLINT;
|
||||
|
||||
#endif //CPLAYERINTERFACE_H
|
||||
|
@ -69,7 +69,7 @@ void updateRect (SDL_Rect * rect, SDL_Surface * scr)
|
||||
{
|
||||
SDL_UpdateRect(scr,rect->x,rect->y,rect->w,rect->h);
|
||||
}
|
||||
void CSDL_Ext::printAtMiddleWB(std::string text, int x, int y, TTF_Font * font, int charpr, SDL_Color kolor, SDL_Surface * dst)
|
||||
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);
|
||||
std::vector<SDL_Surface*> wesu;
|
||||
@ -97,7 +97,7 @@ void CSDL_Ext::printAtMiddleWB(std::string text, int x, int y, TTF_Font * font,
|
||||
SDL_FreeSurface(wesu[i]);
|
||||
delete ws;
|
||||
}
|
||||
void CSDL_Ext::printAtWB(std::string text, int x, int y, TTF_Font * font, int charpr, SDL_Color kolor, SDL_Surface * dst)
|
||||
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);
|
||||
std::vector<SDL_Surface*> wesu;
|
||||
@ -116,7 +116,7 @@ void CSDL_Ext::printAtWB(std::string text, int x, int y, TTF_Font * font, int ch
|
||||
SDL_FreeSurface(wesu[i]);
|
||||
delete ws;
|
||||
}
|
||||
void CSDL_Ext::printAtMiddle(std::string text, int x, int y, TTF_Font * font, SDL_Color kolor, SDL_Surface * dst, unsigned char quality, bool refresh)
|
||||
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;
|
||||
SDL_Surface * temp;
|
||||
@ -145,7 +145,7 @@ void CSDL_Ext::printAtMiddle(std::string text, int x, int y, TTF_Font * font, SD
|
||||
SDL_UpdateRect(dst,x-(temp->w/2),y-(temp->h/2),temp->w,temp->h);
|
||||
SDL_FreeSurface(temp);
|
||||
}
|
||||
void CSDL_Ext::printAt(std::string text, int x, int y, TTF_Font * font, SDL_Color kolor, SDL_Surface * dst, unsigned char quality)
|
||||
void CSDL_Ext::printAt(const std::string & text, int x, int y, TTF_Font * font, SDL_Color kolor, SDL_Surface * dst, unsigned char quality)
|
||||
{
|
||||
if (text.length()==0)
|
||||
return;
|
||||
@ -174,7 +174,7 @@ void CSDL_Ext::printAt(std::string text, int x, int y, TTF_Font * font, SDL_Colo
|
||||
SDL_UpdateRect(dst,x,y,temp->w,temp->h);
|
||||
SDL_FreeSurface(temp);
|
||||
}
|
||||
void CSDL_Ext::printTo(std::string text, int x, int y, TTF_Font * font, SDL_Color kolor, SDL_Surface * dst, unsigned char quality)
|
||||
void CSDL_Ext::printTo(const std::string & text, int x, int y, TTF_Font * font, SDL_Color kolor, SDL_Surface * dst, unsigned char quality)
|
||||
{
|
||||
if (text.length()==0)
|
||||
return;
|
||||
@ -204,7 +204,7 @@ void CSDL_Ext::printTo(std::string text, int x, int y, TTF_Font * font, SDL_Colo
|
||||
SDL_FreeSurface(temp);
|
||||
}
|
||||
|
||||
void CSDL_Ext::printToWR(std::string text, int x, int y, TTF_Font * font, SDL_Color kolor, SDL_Surface * dst, unsigned char quality)
|
||||
void CSDL_Ext::printToWR(const std::string & text, int x, int y, TTF_Font * font, SDL_Color kolor, SDL_Surface * dst, unsigned char quality)
|
||||
{
|
||||
if (text.length()==0)
|
||||
return;
|
||||
|
@ -36,12 +36,12 @@ namespace CSDL_Ext
|
||||
SDL_Surface * alphaTransform(SDL_Surface * src); //adds transparency and shadows (partial handling only; see examples of using for details)
|
||||
int blit8bppAlphaTo24bpp(SDL_Surface * src, SDL_Rect * srcRect, SDL_Surface * dst, SDL_Rect * dstRect); //blits 8 bpp surface with alpha channel to 24 bpp surface
|
||||
Uint32 colorToUint32(const SDL_Color * color); //little endian only
|
||||
void printTo(std::string text, int x, int y, TTF_Font * font, SDL_Color kolor=tytulowy, SDL_Surface * dst=screen, unsigned char quality = 2);// quality: 0 - lowest, 1 - medium, 2 - highest; prints at right bottom corner of specific area. position of corner indicated by (x, y)
|
||||
void printToWR(std::string text, int x, int y, TTF_Font * font, SDL_Color kolor=tytulowy, SDL_Surface * dst=screen, unsigned char quality = 2);// quality: 0 - lowest, 1 - medium, 2 - highest; prints at right bottom corner of specific area. position of corner indicated by (x, y)
|
||||
void printAtMiddle(std::string text, int x, int y, TTF_Font * font, SDL_Color kolor=tytulowy, SDL_Surface * dst=screen, unsigned char quality = 2, bool refresh = false); // quality: 0 - lowest, 1 - medium, 2 - highest
|
||||
void printAtMiddleWB(std::string text, int x, int y, TTF_Font * font, int charpr, SDL_Color kolor=tytulowy, SDL_Surface * dst=screen);
|
||||
void printAtWB(std::string text, int x, int y, TTF_Font * font, int charpr, SDL_Color kolor=tytulowy, SDL_Surface * dst=screen);
|
||||
void printAt(std::string text, int x, int y, TTF_Font * font, SDL_Color kolor=tytulowy, SDL_Surface * dst=screen, unsigned char quality = 2); // quality: 0 - lowest, 1 - medium, 2 - highest
|
||||
void printTo(const std::string & text, int x, int y, TTF_Font * font, SDL_Color kolor=tytulowy, SDL_Surface * dst=screen, unsigned char quality = 2);// quality: 0 - lowest, 1 - medium, 2 - highest; prints at right bottom corner of specific area. position of corner indicated by (x, y)
|
||||
void printToWR(const std::string & text, int x, int y, TTF_Font * font, SDL_Color kolor=tytulowy, SDL_Surface * dst=screen, unsigned char quality = 2);// quality: 0 - lowest, 1 - medium, 2 - highest; prints at right bottom corner of specific area. position of corner indicated by (x, y)
|
||||
void printAtMiddle(const std::string & text, int x, int y, TTF_Font * font, SDL_Color kolor=tytulowy, SDL_Surface * dst=screen, unsigned char quality = 2, bool refresh = false); // quality: 0 - lowest, 1 - medium, 2 - highest
|
||||
void printAtMiddleWB(const std::string & text, int x, int y, TTF_Font * font, int charpr, SDL_Color kolor=tytulowy, SDL_Surface * dst=screen);
|
||||
void printAtWB(const std::string & text, int x, int y, TTF_Font * font, int charpr, SDL_Color kolor=tytulowy, SDL_Surface * dst=screen);
|
||||
void printAt(const std::string & text, int x, int y, TTF_Font * font, SDL_Color kolor=tytulowy, SDL_Surface * dst=screen, unsigned char quality = 2); // quality: 0 - lowest, 1 - medium, 2 - highest
|
||||
void update(SDL_Surface * what = screen); //updates whole surface (default - main screen)
|
||||
void drawBorder(SDL_Surface * sur, int x, int y, int w, int h, int3 color);
|
||||
void setPlayerColor(SDL_Surface * sur, unsigned char player); //sets correct color of flags; -1 for neutral
|
||||
|
@ -16,7 +16,7 @@ extern SDL_Surface * screen;
|
||||
extern SDL_Color tytulowy, zwykly ;
|
||||
extern TTF_Font *GEOR16;
|
||||
|
||||
SpellbookInteractiveArea::SpellbookInteractiveArea(SDL_Rect & myRect, boost::function<void()> funcL, std::string textR, boost::function<void()> funcHon, boost::function<void()> funcHoff)
|
||||
SpellbookInteractiveArea::SpellbookInteractiveArea(const SDL_Rect & myRect, boost::function<void()> funcL, const std::string & textR, boost::function<void()> funcHon, boost::function<void()> funcHoff)
|
||||
{
|
||||
pos = myRect;
|
||||
onLeft = funcL;
|
||||
|
@ -21,7 +21,7 @@ public:
|
||||
void activate();
|
||||
void deactivate();
|
||||
|
||||
SpellbookInteractiveArea(SDL_Rect & myRect, boost::function<void()> funcL, std::string textR, boost::function<void()> funcHon, boost::function<void()> funcHoff);//c-tor
|
||||
SpellbookInteractiveArea(const SDL_Rect & myRect, boost::function<void()> funcL, const std::string & textR, boost::function<void()> funcHon, boost::function<void()> funcHoff);//c-tor
|
||||
};
|
||||
|
||||
class CSpellWindow : public IShowActivable, public CIntObject
|
||||
|
Loading…
Reference in New Issue
Block a user