mirror of
https://github.com/vcmi/vcmi.git
synced 2025-07-17 01:32:21 +02:00
Changes in CPreGame
* replaced tamplates callbacks with boost-function * updates settings when selecting new map after changing sorting criteria * if sorting not by name, name will be used as a secondary criteria * when filter is applied a first available map is selected automatically
This commit is contained in:
165
CPreGame.cpp
165
CPreGame.cpp
@ -30,6 +30,21 @@ bool isItIn(const SDL_Rect * rect, int x, int y);
|
|||||||
namespace fs = boost::filesystem;
|
namespace fs = boost::filesystem;
|
||||||
namespace s = CSDL_Ext;
|
namespace s = CSDL_Ext;
|
||||||
|
|
||||||
|
HighButton::HighButton( SDL_Rect Pos, CDefHandler* Imgs, bool Sel, int id)
|
||||||
|
{
|
||||||
|
type=0;
|
||||||
|
imgs=Imgs;
|
||||||
|
selectable=Sel;
|
||||||
|
selected=false;
|
||||||
|
state=0;
|
||||||
|
pos=Pos;
|
||||||
|
ID=id;
|
||||||
|
highlightable=false;
|
||||||
|
};
|
||||||
|
HighButton::HighButton()
|
||||||
|
{
|
||||||
|
state=0;
|
||||||
|
}
|
||||||
void HighButton::show()
|
void HighButton::show()
|
||||||
{
|
{
|
||||||
blitAt(imgs->ourImages[state].bitmap,pos.x,pos.y);
|
blitAt(imgs->ourImages[state].bitmap,pos.x,pos.y);
|
||||||
@ -44,8 +59,25 @@ void HighButton::press(bool down)
|
|||||||
SDL_BlitSurface(imgs->ourImages[i].bitmap,NULL,screen,&pos);
|
SDL_BlitSurface(imgs->ourImages[i].bitmap,NULL,screen,&pos);
|
||||||
updateRect(&pos);
|
updateRect(&pos);
|
||||||
}
|
}
|
||||||
|
Button::Button( SDL_Rect Pos, boost::function<void()> Fun,CDefHandler* Imgs, bool Sel, CGroup* gr, int id)
|
||||||
|
:HighButton(Pos,Imgs,Sel,id),ourGroup(gr),fun(Fun)
|
||||||
|
{
|
||||||
|
type=1;
|
||||||
|
};
|
||||||
|
Button::Button()
|
||||||
|
{
|
||||||
|
ourGroup=NULL;type=1;
|
||||||
|
};
|
||||||
|
|
||||||
template <class T> void SetrButton<T>::press(bool down)
|
SetrButton::SetrButton()
|
||||||
|
{
|
||||||
|
type=1;
|
||||||
|
selectable=false;
|
||||||
|
selected=false;
|
||||||
|
state=0;
|
||||||
|
highlightable=false;
|
||||||
|
}
|
||||||
|
void SetrButton::press(bool down)
|
||||||
{
|
{
|
||||||
#ifndef __GNUC__
|
#ifndef __GNUC__
|
||||||
if (!down && state==1)
|
if (!down && state==1)
|
||||||
@ -70,11 +102,11 @@ void HighButton::hover(bool on)
|
|||||||
SDL_BlitSurface(imgs->ourImages[i].bitmap,NULL,screen,&pos);
|
SDL_BlitSurface(imgs->ourImages[i].bitmap,NULL,screen,&pos);
|
||||||
updateRect(&pos);
|
updateRect(&pos);
|
||||||
}
|
}
|
||||||
template <class T> void Button<T>::hover(bool on)
|
void Button::hover(bool on)
|
||||||
{
|
{
|
||||||
HighButton::hover(on);
|
HighButton::hover(on);
|
||||||
}
|
}
|
||||||
template <class T> void Button<T>::select(bool on)
|
void Button::select(bool on)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
if (on) state=i=3;
|
if (on) state=i=3;
|
||||||
@ -89,11 +121,7 @@ template <class T> void Button<T>::select(bool on)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//void Slider::clickDown(int x, int y, bool bzgl=true);
|
void Slider::updateSlid()
|
||||||
//void Slider::clickUp(int x, int y, bool bzgl=true);
|
|
||||||
//void Slider::mMove(int x, int y, bool bzgl=true);
|
|
||||||
|
|
||||||
template <> void Slider<CPreGame>::updateSlid()
|
|
||||||
{
|
{
|
||||||
float perc = ((float)whereAreWe)/((float)positionsAmnt-capacity);
|
float perc = ((float)whereAreWe)/((float)positionsAmnt-capacity);
|
||||||
float myh;
|
float myh;
|
||||||
@ -114,20 +142,19 @@ template <> void Slider<CPreGame>::updateSlid()
|
|||||||
updateRect(&pos);
|
updateRect(&pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<> void Slider<CPreGame>::moveDown()
|
void Slider::moveDown()
|
||||||
{
|
{
|
||||||
if (whereAreWe<positionsAmnt-capacity)
|
if (whereAreWe<positionsAmnt-capacity)
|
||||||
(CPG->*fun)(++whereAreWe);
|
fun(++whereAreWe);
|
||||||
updateSlid();
|
updateSlid();
|
||||||
}
|
}
|
||||||
template<> void Slider<CPreGame>::moveUp()
|
void Slider::moveUp()
|
||||||
{
|
{
|
||||||
if (whereAreWe>0)
|
if (whereAreWe>0)
|
||||||
(CPG->*fun)(--whereAreWe);
|
fun(--whereAreWe);
|
||||||
updateSlid();
|
updateSlid();
|
||||||
}
|
}
|
||||||
//void Slider::moveByOne(bool up);
|
Slider::Slider(int x, int y, int h, int amnt, int cap, bool ver)
|
||||||
template<> Slider<CPreGame>::Slider(int x, int y, int h, int amnt, int cap, bool ver)
|
|
||||||
{
|
{
|
||||||
vertical=ver;
|
vertical=ver;
|
||||||
positionsAmnt = amnt;
|
positionsAmnt = amnt;
|
||||||
@ -135,26 +162,26 @@ template<> Slider<CPreGame>::Slider(int x, int y, int h, int amnt, int cap, bool
|
|||||||
if (ver)
|
if (ver)
|
||||||
{
|
{
|
||||||
pos = genRect(h,16,x,y);
|
pos = genRect(h,16,x,y);
|
||||||
down = Button<void(Slider::*)()>(genRect(16,16,x,y+h-16),&Slider::moveDown,CGI->spriteh->giveDef("SCNRBDN.DEF"),false);
|
down = Button(genRect(16,16,x,y+h-16),boost::bind(&Slider::moveDown,this),CGI->spriteh->giveDef("SCNRBDN.DEF"),false);
|
||||||
up = Button<void(Slider::*)()>(genRect(16,16,x,y),&Slider::moveUp,CGI->spriteh->giveDef("SCNRBUP.DEF"),false);
|
up = Button(genRect(16,16,x,y),boost::bind(&Slider::moveUp,this),CGI->spriteh->giveDef("SCNRBUP.DEF"),false);
|
||||||
slider = Button<void(Slider::*)()>(genRect(16,16,x,y+16),NULL,CGI->spriteh->giveDef("SCNRBSL.DEF"),false);
|
slider = Button(genRect(16,16,x,y+16),boost::function<void()>(),CGI->spriteh->giveDef("SCNRBSL.DEF"),false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pos = genRect(16,h,x,y);
|
pos = genRect(16,h,x,y);
|
||||||
down = Button<void(Slider::*)()>(genRect(16,16,x+h-16,y),&Slider::moveDown,CGI->spriteh->giveDef("SCNRBRT.DEF"),false);
|
down = Button(genRect(16,16,x+h-16,y),boost::bind(&Slider::moveDown,this),CGI->spriteh->giveDef("SCNRBRT.DEF"),false);
|
||||||
up = Button<void(Slider::*)()>(genRect(16,16,x,y),&Slider::moveUp,CGI->spriteh->giveDef("SCNRBLF.DEF"),false);
|
up = Button(genRect(16,16,x,y),boost::bind(&Slider::moveUp,this),CGI->spriteh->giveDef("SCNRBLF.DEF"),false);
|
||||||
slider = Button<void(Slider::*)()>(genRect(16,16,x+16,y),NULL,CGI->spriteh->giveDef("SCNRBSL.DEF"),false);
|
slider = Button(genRect(16,16,x+16,y),boost::function<void()>(),CGI->spriteh->giveDef("SCNRBSL.DEF"),false);
|
||||||
}
|
}
|
||||||
moving = false;
|
moving = false;
|
||||||
whereAreWe=0;
|
whereAreWe=0;
|
||||||
}
|
}
|
||||||
template<>void Slider<CPreGame>::deactivate()
|
void Slider::deactivate()
|
||||||
{
|
{
|
||||||
CPG->interested.erase(std::find(CPG->interested.begin(),CPG->interested.end(),this));
|
CPG->interested.erase(std::find(CPG->interested.begin(),CPG->interested.end(),this));
|
||||||
}
|
}
|
||||||
|
|
||||||
template<>void Slider<CPreGame>::activate()
|
void Slider::activate()
|
||||||
{
|
{
|
||||||
SDL_FillRect(screen,&pos,0);
|
SDL_FillRect(screen,&pos,0);
|
||||||
up.show();
|
up.show();
|
||||||
@ -165,7 +192,7 @@ template<>void Slider<CPreGame>::activate()
|
|||||||
CPG->interested.push_back(this);
|
CPG->interested.push_back(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<>void Slider<CPreGame>::handleIt(SDL_Event sEvent)
|
void Slider::handleIt(SDL_Event sEvent)
|
||||||
{
|
{
|
||||||
if ((sEvent.type==SDL_MOUSEBUTTONDOWN) && (sEvent.button.button == SDL_BUTTON_LEFT))
|
if ((sEvent.type==SDL_MOUSEBUTTONDOWN) && (sEvent.button.button == SDL_BUTTON_LEFT))
|
||||||
{
|
{
|
||||||
@ -203,7 +230,7 @@ template<>void Slider<CPreGame>::handleIt(SDL_Event sEvent)
|
|||||||
whereAreWe = pe*(positionsAmnt-capacity);
|
whereAreWe = pe*(positionsAmnt-capacity);
|
||||||
if (whereAreWe<0)whereAreWe=0;
|
if (whereAreWe<0)whereAreWe=0;
|
||||||
updateSlid();
|
updateSlid();
|
||||||
(CPG->*fun)(whereAreWe);
|
fun(whereAreWe);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ((sEvent.type==SDL_MOUSEBUTTONUP) && (sEvent.button.button == SDL_BUTTON_LEFT))
|
else if ((sEvent.type==SDL_MOUSEBUTTONUP) && (sEvent.button.button == SDL_BUTTON_LEFT))
|
||||||
@ -211,11 +238,11 @@ template<>void Slider<CPreGame>::handleIt(SDL_Event sEvent)
|
|||||||
|
|
||||||
if ((down.state==1) && isItIn(&down.pos,sEvent.motion.x,sEvent.motion.y))
|
if ((down.state==1) && isItIn(&down.pos,sEvent.motion.x,sEvent.motion.y))
|
||||||
{
|
{
|
||||||
(this->*down.fun)();
|
this->down.fun();
|
||||||
}
|
}
|
||||||
if ((up.state==1) && isItIn(&up.pos,sEvent.motion.x,sEvent.motion.y))
|
if ((up.state==1) && isItIn(&up.pos,sEvent.motion.x,sEvent.motion.y))
|
||||||
{
|
{
|
||||||
(this->*up.fun)();
|
this->up.fun();
|
||||||
}
|
}
|
||||||
if (down.state==1) down.press(false);
|
if (down.state==1) down.press(false);
|
||||||
if (up.state==1) up.press(false);
|
if (up.state==1) up.press(false);
|
||||||
@ -266,7 +293,7 @@ template<>void Slider<CPreGame>::handleIt(SDL_Event sEvent)
|
|||||||
whereAreWe=ktory;
|
whereAreWe=ktory;
|
||||||
updateSlid();
|
updateSlid();
|
||||||
}
|
}
|
||||||
(CPG->*fun)(whereAreWe);
|
fun(whereAreWe);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -305,6 +332,31 @@ template<>void Slider<CPreGame>::handleIt(SDL_Event sEvent)
|
|||||||
|
|
||||||
}*/
|
}*/
|
||||||
}
|
}
|
||||||
|
IntBut::IntBut()
|
||||||
|
{
|
||||||
|
type=2;
|
||||||
|
fun=NULL;
|
||||||
|
highlightable=false;
|
||||||
|
}
|
||||||
|
void IntBut::set()
|
||||||
|
{
|
||||||
|
*what=key;
|
||||||
|
}
|
||||||
|
void CPoinGroup::setYour(IntSelBut * your)
|
||||||
|
{
|
||||||
|
*gdzie=your->key;
|
||||||
|
};
|
||||||
|
IntSelBut::IntSelBut( SDL_Rect Pos, boost::function<void()> Fun,CDefHandler* Imgs, bool Sel, CPoinGroup* gr, int My)
|
||||||
|
: Button(Pos,Fun,Imgs,Sel,gr),key(My)
|
||||||
|
{
|
||||||
|
ourPoinGroup=gr;
|
||||||
|
};
|
||||||
|
void IntSelBut::select(bool on)
|
||||||
|
{
|
||||||
|
Button::select(on);
|
||||||
|
ourPoinGroup->setYour(this);
|
||||||
|
CPG->printRating();
|
||||||
|
}
|
||||||
/********************************************************************************************/
|
/********************************************************************************************/
|
||||||
void PreGameTab::show()
|
void PreGameTab::show()
|
||||||
{
|
{
|
||||||
@ -621,8 +673,8 @@ void Options::init()
|
|||||||
rCastle = CGI->bitmaph->loadBitmap("HPSRAND0.bmp");
|
rCastle = CGI->bitmaph->loadBitmap("HPSRAND0.bmp");
|
||||||
nHero = CGI->bitmaph->loadBitmap("HPSRAND6.bmp");
|
nHero = CGI->bitmaph->loadBitmap("HPSRAND6.bmp");
|
||||||
nCastle = CGI->bitmaph->loadBitmap("HPSRAND5.bmp");
|
nCastle = CGI->bitmaph->loadBitmap("HPSRAND5.bmp");
|
||||||
turnLength = new Slider<>(57,557,195,11,1,false);
|
turnLength = new Slider(57,557,195,11,1,false);
|
||||||
turnLength->fun=&CPreGame::setTurnLength;
|
turnLength->fun=boost::bind(&CPreGame::setTurnLength,CPG,_1);
|
||||||
|
|
||||||
flags.push_back(CGI->spriteh->giveDef("AOFLGBR.DEF"));
|
flags.push_back(CGI->spriteh->giveDef("AOFLGBR.DEF"));
|
||||||
flags.push_back(CGI->spriteh->giveDef("AOFLGBB.DEF"));
|
flags.push_back(CGI->spriteh->giveDef("AOFLGBB.DEF"));
|
||||||
@ -977,7 +1029,7 @@ void MapSel::init()
|
|||||||
loscon.key=_loscon;
|
loscon.key=_loscon;
|
||||||
|
|
||||||
nrplayer.poin=mapsize.poin=type.poin=name.poin=viccon.poin=loscon.poin=(int*)(&sortBy);
|
nrplayer.poin=mapsize.poin=type.poin=name.poin=viccon.poin=loscon.poin=(int*)(&sortBy);
|
||||||
nrplayer.fun=mapsize.fun=type.fun=name.fun=viccon.fun=loscon.fun=&CPreGame::sortMaps;
|
nrplayer.fun=mapsize.fun=type.fun=name.fun=viccon.fun=loscon.fun=boost::bind(&CPreGame::sortMaps,CPG);
|
||||||
|
|
||||||
Dtypes = CGI->spriteh->giveDef("SCSELC.DEF");
|
Dtypes = CGI->spriteh->giveDef("SCSELC.DEF");
|
||||||
Dvic = CGI->spriteh->giveDef("SCNRVICT.DEF");
|
Dvic = CGI->spriteh->giveDef("SCNRVICT.DEF");
|
||||||
@ -1023,8 +1075,8 @@ void MapSel::init()
|
|||||||
delete[] file2;
|
delete[] file2;
|
||||||
}
|
}
|
||||||
std::sort(ourMaps.begin(),ourMaps.end(),mapSorter(_name));
|
std::sort(ourMaps.begin(),ourMaps.end(),mapSorter(_name));
|
||||||
slid = new Slider<>(375,92,480,ourMaps.size(),18,true);
|
slid = new Slider(375,92,480,ourMaps.size(),18,true);
|
||||||
slid->fun = &CPreGame::printMapsFrom;
|
slid->fun = boost::bind(&CPreGame::printMapsFrom,CPG,_1);
|
||||||
}
|
}
|
||||||
void MapSel::moveByOne(bool up)
|
void MapSel::moveByOne(bool up)
|
||||||
{
|
{
|
||||||
@ -1049,9 +1101,9 @@ void MapSel::moveByOne(bool up)
|
|||||||
select(help);
|
select(help);
|
||||||
slid->updateSlid();
|
slid->updateSlid();
|
||||||
}
|
}
|
||||||
void MapSel::select(int which, bool updateMapsList)
|
void MapSel::select(int which, bool updateMapsList, bool forceSettingsUpdate)
|
||||||
{
|
{
|
||||||
bool dontSaveSettings = ((selected!=which) || (CPG->ret.playerInfos.size()==0));
|
bool dontSaveSettings = ((selected!=which) || (CPG->ret.playerInfos.size()==0) || forceSettingsUpdate);
|
||||||
selected = which;
|
selected = which;
|
||||||
if(updateMapsList)
|
if(updateMapsList)
|
||||||
printMaps(slid->whereAreWe,18,0,true);
|
printMaps(slid->whereAreWe,18,0,true);
|
||||||
@ -1346,26 +1398,26 @@ void CPreGame::initScenSel()
|
|||||||
SDL_SetColorKey(ourScenSel->randMap,SDL_SRCCOLORKEY,SDL_MapRGB(ourScenSel->randMap->format,0,255,255));
|
SDL_SetColorKey(ourScenSel->randMap,SDL_SRCCOLORKEY,SDL_MapRGB(ourScenSel->randMap->format,0,255,255));
|
||||||
SDL_SetColorKey(ourScenSel->options,SDL_SRCCOLORKEY,SDL_MapRGB(ourScenSel->options->format,0,255,255));
|
SDL_SetColorKey(ourScenSel->options,SDL_SRCCOLORKEY,SDL_MapRGB(ourScenSel->options->format,0,255,255));
|
||||||
|
|
||||||
ourScenSel->difficulty = new CPoinGroup<>();
|
ourScenSel->difficulty = new CPoinGroup();
|
||||||
ourScenSel->difficulty->type=1;
|
ourScenSel->difficulty->type=1;
|
||||||
ourScenSel->selectedDiff=-77;
|
ourScenSel->selectedDiff=-77;
|
||||||
ourScenSel->difficulty->gdzie = &ourScenSel->selectedDiff;
|
ourScenSel->difficulty->gdzie = &ourScenSel->selectedDiff;
|
||||||
ourScenSel->bEasy = IntSelBut<>(genRect(0,0,506,456),NULL,CGI->spriteh->giveDef("GSPBUT3.DEF"),true,ourScenSel->difficulty,0);
|
ourScenSel->bEasy = IntSelBut(genRect(0,0,506,456),NULL,CGI->spriteh->giveDef("GSPBUT3.DEF"),true,ourScenSel->difficulty,0);
|
||||||
ourScenSel->bNormal = IntSelBut<>(genRect(0,0,538,456),NULL,CGI->spriteh->giveDef("GSPBUT4.DEF"),true,ourScenSel->difficulty,1);
|
ourScenSel->bNormal = IntSelBut(genRect(0,0,538,456),NULL,CGI->spriteh->giveDef("GSPBUT4.DEF"),true,ourScenSel->difficulty,1);
|
||||||
ourScenSel->bHard = IntSelBut<>(genRect(0,0,570,456),NULL,CGI->spriteh->giveDef("GSPBUT5.DEF"),true,ourScenSel->difficulty,2);
|
ourScenSel->bHard = IntSelBut(genRect(0,0,570,456),NULL,CGI->spriteh->giveDef("GSPBUT5.DEF"),true,ourScenSel->difficulty,2);
|
||||||
ourScenSel->bExpert = IntSelBut<>(genRect(0,0,602,456),NULL,CGI->spriteh->giveDef("GSPBUT6.DEF"),true,ourScenSel->difficulty,3);
|
ourScenSel->bExpert = IntSelBut(genRect(0,0,602,456),NULL,CGI->spriteh->giveDef("GSPBUT6.DEF"),true,ourScenSel->difficulty,3);
|
||||||
ourScenSel->bImpossible = IntSelBut<>(genRect(0,0,634,456),NULL,CGI->spriteh->giveDef("GSPBUT7.DEF"),true,ourScenSel->difficulty,4);
|
ourScenSel->bImpossible = IntSelBut(genRect(0,0,634,456),NULL,CGI->spriteh->giveDef("GSPBUT7.DEF"),true,ourScenSel->difficulty,4);
|
||||||
|
|
||||||
ourScenSel->bBack = Button<>(genRect(0,0,584,535),&CPreGame::showNewMenu,CGI->spriteh->giveDef("SCNRBACK.DEF"));
|
ourScenSel->bBack = Button(genRect(0,0,584,535),boost::bind(&CPreGame::showNewMenu,this),CGI->spriteh->giveDef("SCNRBACK.DEF"));
|
||||||
ourScenSel->bBegin = Button<>(genRect(0,0,414,535),&CPreGame::begin,CGI->spriteh->giveDef("SCNRBEG.DEF"));
|
ourScenSel->bBegin = Button(genRect(0,0,414,535),boost::bind(&CPreGame::begin,this),CGI->spriteh->giveDef("SCNRBEG.DEF"));
|
||||||
|
|
||||||
ourScenSel->bScens = Button<>(genRect(0,0,414,81),&CPreGame::showScenList,CGI->spriteh->giveDef("GSPBUTT.DEF"));
|
ourScenSel->bScens = Button(genRect(0,0,414,81),boost::bind(&CPreGame::showScenList,this),CGI->spriteh->giveDef("GSPBUTT.DEF"));
|
||||||
for (int i=0; i<ourScenSel->bScens.imgs->ourImages.size(); i++)
|
for (int i=0; i<ourScenSel->bScens.imgs->ourImages.size(); i++)
|
||||||
CSDL_Ext::printAt(CGI->generaltexth->allTexts[500],25+i,2+i,GEOR13,zwykly,ourScenSel->bScens.imgs->ourImages[i].bitmap); //"Show Available Scenarios"
|
CSDL_Ext::printAt(CGI->generaltexth->allTexts[500],25+i,2+i,GEOR13,zwykly,ourScenSel->bScens.imgs->ourImages[i].bitmap); //"Show Available Scenarios"
|
||||||
ourScenSel->bRandom = Button<>(genRect(0,0,414,105),&CPreGame::showScenList,CGI->spriteh->giveDef("GSPBUTT.DEF"));
|
ourScenSel->bRandom = Button(genRect(0,0,414,105),boost::bind(&CPreGame::showScenList,this),CGI->spriteh->giveDef("GSPBUTT.DEF"));
|
||||||
for (int i=0; i<ourScenSel->bRandom.imgs->ourImages.size(); i++)
|
for (int i=0; i<ourScenSel->bRandom.imgs->ourImages.size(); i++)
|
||||||
CSDL_Ext::printAt(CGI->generaltexth->allTexts[740],25+i,2+i,GEOR13,zwykly,ourScenSel->bRandom.imgs->ourImages[i].bitmap);
|
CSDL_Ext::printAt(CGI->generaltexth->allTexts[740],25+i,2+i,GEOR13,zwykly,ourScenSel->bRandom.imgs->ourImages[i].bitmap);
|
||||||
ourScenSel->bOptions = Button<>(genRect(0,0,414,509),&CPreGame::showOptions,CGI->spriteh->giveDef("GSPBUTT.DEF"));
|
ourScenSel->bOptions = Button(genRect(0,0,414,509),boost::bind(&CPreGame::showOptions,this),CGI->spriteh->giveDef("GSPBUTT.DEF"));
|
||||||
for (int i=0; i<ourScenSel->bOptions.imgs->ourImages.size(); i++)
|
for (int i=0; i<ourScenSel->bOptions.imgs->ourImages.size(); i++)
|
||||||
CSDL_Ext::printAt(CGI->generaltexth->allTexts[501],25+i,2+i,GEOR13,zwykly,ourScenSel->bOptions.imgs->ourImages[i].bitmap); //"Show Advanced Options"
|
CSDL_Ext::printAt(CGI->generaltexth->allTexts[501],25+i,2+i,GEOR13,zwykly,ourScenSel->bOptions.imgs->ourImages[i].bitmap); //"Show Advanced Options"
|
||||||
|
|
||||||
@ -1640,8 +1692,8 @@ void CPreGame::showAskBox (std::string data, void(*f1)(),void(*f2)())
|
|||||||
(*btnspos)[0].y+=pos.y;
|
(*btnspos)[0].y+=pos.y;
|
||||||
(*btnspos)[1].x+=pos.x;
|
(*btnspos)[1].x+=pos.x;
|
||||||
(*btnspos)[1].y+=pos.y;
|
(*btnspos)[1].y+=pos.y;
|
||||||
btns.push_back(new Button<>((*btnspos)[0],&CPreGame::quit,ok,false, NULL,2));
|
btns.push_back(new Button((*btnspos)[0],boost::bind(&CPreGame::quit,this),ok,false, NULL,2));
|
||||||
btns.push_back(new Button<>((*btnspos)[1],(&CPreGame::hideBox),cancel,false, NULL,2));
|
btns.push_back(new Button((*btnspos)[1],boost::bind(&CPreGame::hideBox,this),cancel,false, NULL,2));
|
||||||
delete cmh;
|
delete cmh;
|
||||||
delete przyciski;
|
delete przyciski;
|
||||||
delete btnspos;
|
delete btnspos;
|
||||||
@ -1693,7 +1745,7 @@ void CPreGame::scenHandleEv(SDL_Event& sEvent)
|
|||||||
if (isItIn(&btns[i]->pos,sEvent.motion.x,sEvent.motion.y))
|
if (isItIn(&btns[i]->pos,sEvent.motion.x,sEvent.motion.y))
|
||||||
{
|
{
|
||||||
btns[i]->press(true);
|
btns[i]->press(true);
|
||||||
ourScenSel->pressed=(Button<>*)btns[i];
|
ourScenSel->pressed=(Button*)btns[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ((currentTab==&ourScenSel->mapsel) && (sEvent.button.y>121) &&(sEvent.button.y<570)
|
if ((currentTab==&ourScenSel->mapsel) && (sEvent.button.y>121) &&(sEvent.button.y<570)
|
||||||
@ -1706,7 +1758,7 @@ void CPreGame::scenHandleEv(SDL_Event& sEvent)
|
|||||||
}
|
}
|
||||||
else if ((sEvent.type==SDL_MOUSEBUTTONUP) && (sEvent.button.button == SDL_BUTTON_LEFT))
|
else if ((sEvent.type==SDL_MOUSEBUTTONUP) && (sEvent.button.button == SDL_BUTTON_LEFT))
|
||||||
{
|
{
|
||||||
Button<> * prnr=ourScenSel->pressed;
|
Button * prnr=ourScenSel->pressed;
|
||||||
if (ourScenSel->pressed && ourScenSel->pressed->state==1)
|
if (ourScenSel->pressed && ourScenSel->pressed->state==1)
|
||||||
{
|
{
|
||||||
ourScenSel->pressed->press(false);
|
ourScenSel->pressed->press(false);
|
||||||
@ -1718,17 +1770,18 @@ void CPreGame::scenHandleEv(SDL_Event& sEvent)
|
|||||||
{
|
{
|
||||||
if (btns[i]->selectable)
|
if (btns[i]->selectable)
|
||||||
btns[i]->select(true);
|
btns[i]->select(true);
|
||||||
if (btns[i]->type==1 && ((Button<>*)btns[i])->fun)
|
if (btns[i]->type==1 && ((Button*)btns[i])->fun)
|
||||||
(this->*(((Button<>*)btns[i])->fun))();
|
((Button*)btns[i])->fun();
|
||||||
int zz = btns.size();
|
int zz = btns.size();
|
||||||
if (i>=zz)
|
if (i>=zz)
|
||||||
break;
|
break;
|
||||||
if (btns[i]==prnr && btns[i]->type==2)
|
if (btns[i]==prnr && btns[i]->type==2)
|
||||||
{
|
{
|
||||||
((IntBut<> *)(btns[i]))->set();
|
((IntBut*)(btns[i]))->set();
|
||||||
ourScenSel->mapsel.slid->whereAreWe=0;
|
ourScenSel->mapsel.slid->whereAreWe=0;
|
||||||
ourScenSel->mapsel.slid->updateSlid();
|
ourScenSel->mapsel.slid->updateSlid();
|
||||||
ourScenSel->mapsel.slid->positionsAmnt=ourScenSel->mapsel.countWL();
|
ourScenSel->mapsel.slid->positionsAmnt=ourScenSel->mapsel.countWL();
|
||||||
|
ourScenSel->mapsel.select(ourScenSel->mapsel.whichWL(0));
|
||||||
ourScenSel->mapsel.printMaps(0);
|
ourScenSel->mapsel.printMaps(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1954,7 +2007,7 @@ StartInfo CPreGame::runLoop()
|
|||||||
for (int i=0;i<btns.size(); i++)
|
for (int i=0;i<btns.size(); i++)
|
||||||
{
|
{
|
||||||
if (isItIn(&btns[i]->pos,sEvent.motion.x,sEvent.motion.y))
|
if (isItIn(&btns[i]->pos,sEvent.motion.x,sEvent.motion.y))
|
||||||
(this->*(((Button<>*)btns[i])->fun))();
|
((Button*)btns[i])->fun();
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
btns[i]->press(false);
|
btns[i]->press(false);
|
||||||
@ -2070,8 +2123,10 @@ void CPreGame::quitAskBox()
|
|||||||
}
|
}
|
||||||
void CPreGame::sortMaps()
|
void CPreGame::sortMaps()
|
||||||
{
|
{
|
||||||
std::sort(ourScenSel->mapsel.ourMaps.begin(),ourScenSel->mapsel.ourMaps.end(),mapSorter(ourScenSel->mapsel.sortBy));
|
std::sort(ourScenSel->mapsel.ourMaps.begin(),ourScenSel->mapsel.ourMaps.end(),mapSorter(_name));
|
||||||
ourScenSel->mapsel.select(0);
|
if(ourScenSel->mapsel.sortBy != _name)
|
||||||
|
std::stable_sort(ourScenSel->mapsel.ourMaps.begin(),ourScenSel->mapsel.ourMaps.end(),mapSorter(ourScenSel->mapsel.sortBy));
|
||||||
|
ourScenSel->mapsel.select(ourScenSel->mapsel.whichWL(0),false,true);
|
||||||
printMapsFrom(0);
|
printMapsFrom(0);
|
||||||
}
|
}
|
||||||
void CPreGame::setTurnLength(int on)
|
void CPreGame::setTurnLength(int on)
|
||||||
|
112
CPreGame.h
112
CPreGame.h
@ -10,14 +10,15 @@
|
|||||||
#include "CMessage.h"
|
#include "CMessage.h"
|
||||||
#include "map.h"
|
#include "map.h"
|
||||||
#include "hch/CMusicHandler.h"
|
#include "hch/CMusicHandler.h"
|
||||||
|
#include <boost/function.hpp>
|
||||||
|
#include <boost/bind.hpp>
|
||||||
class CPreGame;
|
class CPreGame;
|
||||||
extern class CPreGame *CPG;
|
extern class CPreGame *CPG;
|
||||||
|
|
||||||
typedef void(CPreGame::*ttt)();
|
typedef void(CPreGame::*ttt)();
|
||||||
template <class T=ttt> class CGroup;
|
class CGroup;
|
||||||
template <class T=ttt> class CPoinGroup ;
|
class CPoinGroup ;
|
||||||
|
class IntSelBut;
|
||||||
|
|
||||||
struct HighButton
|
struct HighButton
|
||||||
{
|
{
|
||||||
@ -26,9 +27,8 @@ struct HighButton
|
|||||||
SDL_Rect pos;
|
SDL_Rect pos;
|
||||||
CDefHandler* imgs;
|
CDefHandler* imgs;
|
||||||
int state;
|
int state;
|
||||||
HighButton( SDL_Rect Pos, CDefHandler* Imgs, bool Sel=false, int id=-1)
|
HighButton( SDL_Rect Pos, CDefHandler* Imgs, bool Sel=false, int id=-1);
|
||||||
{type=0;imgs=Imgs;selectable=Sel;selected=false;state=0;pos=Pos;ID=id;highlightable=false;};
|
HighButton();
|
||||||
HighButton(){state=0;}
|
|
||||||
bool selectable, selected;
|
bool selectable, selected;
|
||||||
bool highlightable, highlighted;
|
bool highlightable, highlighted;
|
||||||
virtual void show();
|
virtual void show();
|
||||||
@ -36,33 +36,33 @@ struct HighButton
|
|||||||
virtual void hover(bool on=true)=0;
|
virtual void hover(bool on=true)=0;
|
||||||
virtual void select(bool on=true)=0;
|
virtual void select(bool on=true)=0;
|
||||||
};
|
};
|
||||||
template <class T=ttt> struct Button: public HighButton
|
struct Button: public HighButton
|
||||||
{
|
{
|
||||||
CGroup<T> * ourGroup;
|
CGroup *ourGroup;
|
||||||
Button( SDL_Rect Pos, T Fun,CDefHandler* Imgs, bool Sel=false, CGroup<T>* gr=NULL, int id=-1)
|
Button( SDL_Rect Pos, boost::function<void()> Fun,CDefHandler* Imgs, bool Sel=false, CGroup* gr=NULL, int id=-1);
|
||||||
:HighButton(Pos,Imgs,Sel,id),ourGroup(gr),fun(Fun){type=1;};
|
Button();
|
||||||
Button(){ourGroup=NULL;type=1;};
|
boost::function<void()> fun;
|
||||||
T fun;
|
|
||||||
virtual void hover(bool on=true);
|
virtual void hover(bool on=true);
|
||||||
virtual void select(bool on=true);
|
virtual void select(bool on=true);
|
||||||
};
|
};
|
||||||
template <class T=ttt> struct SetrButton: public Button<T>
|
struct SetrButton: public Button
|
||||||
{
|
{
|
||||||
int key, * poin;
|
int key, * poin;
|
||||||
virtual void press(bool down=true);
|
virtual void press(bool down=true);
|
||||||
SetrButton(){int type=1;bool selectable=false;bool selected=false;int state=0;bool highlightable=false;}
|
SetrButton();
|
||||||
};
|
};
|
||||||
template<class T=CPreGame> class Slider
|
|
||||||
{ //
|
class Slider
|
||||||
|
{
|
||||||
public:
|
public:
|
||||||
bool vertical; // false means horizontal
|
bool vertical; // false means horizontal
|
||||||
SDL_Rect pos; // position
|
SDL_Rect pos; // position
|
||||||
Button<void(Slider::*)()> up, down, //or left/right
|
Button up, down, //or left/right
|
||||||
slider;
|
slider;
|
||||||
int positionsAmnt, capacity;// capacity - amount of positions dispplayed at once
|
int positionsAmnt, capacity;// capacity - amount of positions dispplayed at once
|
||||||
int whereAreWe; // first displayed thing
|
int whereAreWe; // first displayed thing
|
||||||
bool moving;
|
bool moving;
|
||||||
void(T::*fun)(int);
|
boost::function<void(int)> fun;
|
||||||
void clickDown(int x, int y, bool bzgl=true);
|
void clickDown(int x, int y, bool bzgl=true);
|
||||||
void clickUp(int x, int y, bool bzgl=true);
|
void clickUp(int x, int y, bool bzgl=true);
|
||||||
void mMove(int x, int y, bool bzgl=true);
|
void mMove(int x, int y, bool bzgl=true);
|
||||||
@ -73,47 +73,39 @@ public:
|
|||||||
Slider(int x, int y, int h, int amnt, int cap, bool ver);
|
Slider(int x, int y, int h, int amnt, int cap, bool ver);
|
||||||
void updateSlid();
|
void updateSlid();
|
||||||
void handleIt(SDL_Event sev);
|
void handleIt(SDL_Event sev);
|
||||||
|
|
||||||
};
|
};
|
||||||
//template<class T=void(CPreGame::*)(int)>
|
|
||||||
template<class T=ttt> struct IntBut: public Button<T>
|
struct IntBut: public Button
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
int key;
|
int key;
|
||||||
int * what;
|
int * what;
|
||||||
IntBut(){int type=2;int fun=NULL;bool highlightable=false;};
|
IntBut();
|
||||||
void set(){*what=key;};
|
void set();
|
||||||
};
|
};
|
||||||
template<class T=ttt> struct IntSelBut: public Button<T>
|
class CGroup
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CPoinGroup<T> * ourPoinGroup;
|
Button * selected;
|
||||||
int key;
|
|
||||||
IntSelBut(){};
|
|
||||||
IntSelBut( SDL_Rect Pos, T Fun,CDefHandler* Imgs, bool Sel=false, CPoinGroup<T>* gr=NULL, int My=-1)
|
|
||||||
: Button<T>(Pos,Fun,Imgs,Sel,gr),key(My){ourPoinGroup=gr;};
|
|
||||||
void select(bool on=true) {(*this).Button<T>::select(on);ourPoinGroup->setYour(this);
|
|
||||||
#if !defined(__amigaos4__) && !defined(__unix__)
|
|
||||||
CPG->printRating();
|
|
||||||
#else
|
|
||||||
#warning not compile here
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
};
|
|
||||||
template <class T> class CPoinGroup :public CGroup<T>
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
int * gdzie; //where (po polsku, bo by by�o s�owo kluczowe :/)
|
|
||||||
void setYour(IntSelBut<T> * your){*gdzie=your->key;};
|
|
||||||
};
|
|
||||||
template <class T> class CGroup
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
Button<T> * selected;
|
|
||||||
int type; // 1=sinsel
|
int type; // 1=sinsel
|
||||||
CGroup():selected(NULL),type(0){};
|
CGroup():selected(NULL),type(0){};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class CPoinGroup :public CGroup
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
int * gdzie; //where (po polsku, bo by by�o s�owo kluczowe :/)
|
||||||
|
void setYour(IntSelBut * your);
|
||||||
|
};
|
||||||
|
struct IntSelBut: public Button
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CPoinGroup * ourPoinGroup;
|
||||||
|
int key;
|
||||||
|
IntSelBut(){};
|
||||||
|
IntSelBut( SDL_Rect Pos, boost::function<void()> Fun,CDefHandler* Imgs, bool Sel=false, CPoinGroup* gr=NULL, int My=-1);
|
||||||
|
void select(bool on=true);
|
||||||
|
};
|
||||||
class PreGameTab
|
class PreGameTab
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -125,9 +117,9 @@ public:
|
|||||||
};
|
};
|
||||||
class RanSel : public PreGameTab
|
class RanSel : public PreGameTab
|
||||||
{
|
{
|
||||||
Button<> horcpl[9], horcte[9], conpl[9], conte[8], water[4], monster[4], //last is random
|
Button horcpl[9], horcte[9], conpl[9], conte[8], water[4], monster[4], //last is random
|
||||||
size[4], twoLevel, showRand;
|
size[4], twoLevel, showRand;
|
||||||
CGroup<> *Ghorcpl, *Ghorcte, *Gconpl, *Gconte, *Gwater, *Gmonster, *Gsize;
|
CGroup *Ghorcpl, *Ghorcte, *Gconpl, *Gconte, *Gwater, *Gmonster, *Gsize;
|
||||||
};
|
};
|
||||||
class Options : public PreGameTab
|
class Options : public PreGameTab
|
||||||
{
|
{
|
||||||
@ -166,7 +158,7 @@ class Options : public PreGameTab
|
|||||||
};
|
};
|
||||||
public:
|
public:
|
||||||
std::set<int> usedHeroes;
|
std::set<int> usedHeroes;
|
||||||
Slider<> * turnLength;
|
Slider * turnLength;
|
||||||
SDL_Surface * bg,
|
SDL_Surface * bg,
|
||||||
* rHero, * rCastle, * nHero, * nCastle;
|
* rHero, * rCastle, * nHero, * nCastle;
|
||||||
std::vector<SDL_Surface*> bgs;
|
std::vector<SDL_Surface*> bgs;
|
||||||
@ -197,9 +189,9 @@ public:
|
|||||||
std::vector<SDL_Surface*> scenImgs;
|
std::vector<SDL_Surface*> scenImgs;
|
||||||
//int current;
|
//int current;
|
||||||
std::vector<CMapInfo> ourMaps;
|
std::vector<CMapInfo> ourMaps;
|
||||||
IntBut<> small, medium, large, xlarge, all;
|
IntBut small, medium, large, xlarge, all;
|
||||||
SetrButton<> nrplayer, mapsize, type, name, viccon, loscon;
|
SetrButton nrplayer, mapsize, type, name, viccon, loscon;
|
||||||
Slider<> *slid, *descslid;
|
Slider *slid, *descslid;
|
||||||
int sizeFilter;
|
int sizeFilter;
|
||||||
int whichWL(int nr);
|
int whichWL(int nr);
|
||||||
int countWL();
|
int countWL();
|
||||||
@ -208,7 +200,7 @@ public:
|
|||||||
void init();
|
void init();
|
||||||
std::string gdiff(std::string ss);
|
std::string gdiff(std::string ss);
|
||||||
void printMaps(int from,int to=18, int at=0, bool abs=false);
|
void printMaps(int from,int to=18, int at=0, bool abs=false);
|
||||||
void select(int which, bool updateMapsList=true);
|
void select(int which, bool updateMapsList=true, bool forceSettingsUpdate=false);
|
||||||
void moveByOne(bool up);
|
void moveByOne(bool up);
|
||||||
void printSelectedInfo();
|
void printSelectedInfo();
|
||||||
void printFlags();
|
void printFlags();
|
||||||
@ -222,10 +214,10 @@ public:
|
|||||||
//RanSel ransel;
|
//RanSel ransel;
|
||||||
MapSel mapsel;
|
MapSel mapsel;
|
||||||
SDL_Surface * background, *scenInf, *scenList, *randMap, *options ;
|
SDL_Surface * background, *scenInf, *scenList, *randMap, *options ;
|
||||||
Button<> bScens, bOptions, bRandom, bBegin, bBack;
|
Button bScens, bOptions, bRandom, bBegin, bBack;
|
||||||
IntSelBut<> bEasy, bNormal, bHard, bExpert, bImpossible;
|
IntSelBut bEasy, bNormal, bHard, bExpert, bImpossible;
|
||||||
Button<> * pressed;
|
Button * pressed;
|
||||||
CPoinGroup<> * difficulty;
|
CPoinGroup * difficulty;
|
||||||
std::vector<Mapa> maps;
|
std::vector<Mapa> maps;
|
||||||
int selectedDiff;
|
int selectedDiff;
|
||||||
void initRanSel();
|
void initRanSel();
|
||||||
@ -244,7 +236,7 @@ public:
|
|||||||
StartInfo ret;
|
StartInfo ret;
|
||||||
bool run;
|
bool run;
|
||||||
bool first; //hasn't we showed the scensel
|
bool first; //hasn't we showed the scensel
|
||||||
std::vector<Slider<> *> interested;
|
std::vector<Slider *> interested;
|
||||||
CMusicHandler * mush;
|
CMusicHandler * mush;
|
||||||
std::vector<HighButton *> btns;
|
std::vector<HighButton *> btns;
|
||||||
CPreGameTextHandler * preth ;
|
CPreGameTextHandler * preth ;
|
||||||
|
Reference in New Issue
Block a user