1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-01-12 02:28:11 +02:00

Zrobione przyciski menu głównego, ich podświetlanie i naciskanie.

Aby zamknąć menu naciśnij 'q'.
This commit is contained in:
Michał W. Urbańczyk 2007-06-11 01:38:07 +00:00
parent 6ed3c85f72
commit fd1e65d940
3 changed files with 291 additions and 18 deletions

View File

@ -225,9 +225,9 @@ int _tmain(int argc, _TCHAR* argv[])
// def(zr,ko,i);
// fclose(ko);fclose(zr);
//}
SDL_WM_SetCaption(NAME,"");
SDL_WM_SetCaption(NAME,""); //set window title
CPreGame * cpg = new CPreGame();
//cpg->runLoop();
cpg->runLoop();
THC timeHandler tmh;
CGameInfo * cgi = new CGameInfo;
CGameInfo::mainObj = cgi;

View File

@ -1,7 +1,13 @@
#include "stdafx.h"
#include "CPreGame.h"
#include "SDL.h";
#include "SDL.h"
extern SDL_Surface * ekran;
bool isItIn(const SDL_Rect * rect, int x, int y)
{
if ((x>rect->x && x<rect->x+rect->w) && (y>rect->y && y<rect->y+rect->h))
return true;
else return false;
}
CPreGame::CPreGame()
{
initMainMenu();
@ -13,7 +19,39 @@ void CPreGame::initMainMenu()
ourMainMenu->background = SDL_LoadBMP("h3bitmap.lod\\ZPIC1005.bmp");
CSemiLodHandler * slh = new CSemiLodHandler();
slh->openLod("H3sprite.lod");
//loading menu buttons
ourMainMenu->newGame = slh->giveDef("ZMENUNG.DEF");
ourMainMenu->loadGame = slh->giveDef("ZMENULG.DEF");
ourMainMenu->highScores = slh->giveDef("ZMENUHS.DEF");
ourMainMenu->credits = slh->giveDef("ZMENUCR.DEF");
ourMainMenu->quit = slh->giveDef("ZMENUQT.DEF");
// new game button location
ourMainMenu->lNewGame.h=ourMainMenu->newGame->ourImages[0].bitmap->h;
ourMainMenu->lNewGame.w=ourMainMenu->newGame->ourImages[0].bitmap->w;
ourMainMenu->lNewGame.x=540;
ourMainMenu->lNewGame.y=10;
//load game location
ourMainMenu->lLoadGame.h=ourMainMenu->loadGame->ourImages[0].bitmap->h;
ourMainMenu->lLoadGame.w=ourMainMenu->loadGame->ourImages[0].bitmap->w;
ourMainMenu->lLoadGame.x=532;
ourMainMenu->lLoadGame.y=132;
//high scores
ourMainMenu->lHighScores.h=ourMainMenu->highScores->ourImages[0].bitmap->h;
ourMainMenu->lHighScores.w=ourMainMenu->highScores->ourImages[0].bitmap->w;
ourMainMenu->lHighScores.x=524;
ourMainMenu->lHighScores.y=251;
//credits
ourMainMenu->lCredits.h=ourMainMenu->credits->ourImages[0].bitmap->h;
ourMainMenu->lCredits.w=ourMainMenu->credits->ourImages[0].bitmap->w;
ourMainMenu->lCredits.x=557;
ourMainMenu->lCredits.y=359;
//quit
ourMainMenu->lQuit.h=ourMainMenu->quit->ourImages[0].bitmap->h;
ourMainMenu->lQuit.w=ourMainMenu->quit->ourImages[0].bitmap->w;
ourMainMenu->lQuit.x=586;
ourMainMenu->lQuit.y=469;
ourMainMenu->highlighted=0;
handledLods.push_back(slh);
delete slh;
}
@ -21,8 +59,241 @@ void CPreGame::showMainMenu()
{
SDL_BlitSurface(ourMainMenu->background,NULL,ekran,NULL);
SDL_Flip(ekran);
SDL_BlitSurface(ourMainMenu->newGame->ourImages[0].bitmap,NULL,ekran,NULL);
SDL_BlitSurface(ourMainMenu->newGame->ourImages[0].bitmap,NULL,ekran,&ourMainMenu->lNewGame);
SDL_BlitSurface(ourMainMenu->loadGame->ourImages[0].bitmap,NULL,ekran,&ourMainMenu->lLoadGame);
SDL_BlitSurface(ourMainMenu->highScores->ourImages[0].bitmap,NULL,ekran,&ourMainMenu->lHighScores);
SDL_BlitSurface(ourMainMenu->credits->ourImages[0].bitmap,NULL,ekran,&ourMainMenu->lCredits);
SDL_BlitSurface(ourMainMenu->quit->ourImages[0].bitmap,NULL,ekran,&ourMainMenu->lQuit);
SDL_Flip(ekran);
}
void CPreGame::highlightButton(int which, int on)
{
switch (which)
{
case 1:
{
SDL_BlitSurface(ourMainMenu->newGame->ourImages[on].bitmap,NULL,ekran,&ourMainMenu->lNewGame);
break;
}
case 2:
{
SDL_BlitSurface(ourMainMenu->loadGame->ourImages[on].bitmap,NULL,ekran,&ourMainMenu->lLoadGame);
break;
}
case 3:
{
SDL_BlitSurface(ourMainMenu->highScores->ourImages[on].bitmap,NULL,ekran,&ourMainMenu->lHighScores);
break;
}
case 4:
{
SDL_BlitSurface(ourMainMenu->credits->ourImages[on].bitmap,NULL,ekran,&ourMainMenu->lCredits);
break;
}
case 5:
{
SDL_BlitSurface(ourMainMenu->quit->ourImages[on].bitmap,NULL,ekran,&ourMainMenu->lQuit);
break;
}
}
SDL_Flip(ekran);
}
void CPreGame::runLoop()
{}
{
SDL_Event sEvent;
while(true)
{
try
{
if(SDL_PollEvent(&sEvent)) //wait for event...
{
if(sEvent.type==SDL_QUIT)
return ;
else if (sEvent.type==SDL_MOUSEMOTION)
{
if (ourMainMenu->highlighted)
{
switch (ourMainMenu->highlighted)
{
case 1:
{
if(isItIn(&ourMainMenu->lNewGame,sEvent.motion.x,sEvent.motion.y))
continue;
else
{
ourMainMenu->highlighted=0;
highlightButton(1,0);
}
break;
}
case 2:
{
if(isItIn(&ourMainMenu->lLoadGame,sEvent.motion.x,sEvent.motion.y))
continue;
else
{
ourMainMenu->highlighted=0;
highlightButton(2,0);
}
break;
}
case 3:
{
if(isItIn(&ourMainMenu->lHighScores,sEvent.motion.x,sEvent.motion.y))
continue;
else
{
ourMainMenu->highlighted=0;
highlightButton(3,0);
}
break;
}
case 4:
{
if(isItIn(&ourMainMenu->lCredits,sEvent.motion.x,sEvent.motion.y))
continue;
else
{
ourMainMenu->highlighted=0;
highlightButton(4,0);
}
break;
}
case 5:
{
if(isItIn(&ourMainMenu->lQuit,sEvent.motion.x,sEvent.motion.y))
continue;
else
{
ourMainMenu->highlighted=0;
highlightButton(5,0);
}
break;
}
} //switch (ourMainMenu->highlighted)
} // if (ourMainMenu->highlighted)
if (isItIn(&ourMainMenu->lNewGame,sEvent.motion.x,sEvent.motion.y))
{
highlightButton(1,2);
ourMainMenu->highlighted=1;
}
else if (isItIn(&ourMainMenu->lLoadGame,sEvent.motion.x,sEvent.motion.y))
{
highlightButton(2,2);
ourMainMenu->highlighted=2;
}
else if (isItIn(&ourMainMenu->lHighScores,sEvent.motion.x,sEvent.motion.y))
{
highlightButton(3,2);
ourMainMenu->highlighted=3;
}
else if (isItIn(&ourMainMenu->lCredits,sEvent.motion.x,sEvent.motion.y))
{
highlightButton(4,2);
ourMainMenu->highlighted=4;
}
else if (isItIn(&ourMainMenu->lQuit,sEvent.motion.x,sEvent.motion.y))
{
highlightButton(5,2);
ourMainMenu->highlighted=5;
}
}
else if ((sEvent.type==SDL_MOUSEBUTTONDOWN) && SDL_BUTTON(1))
{
if (isItIn(&ourMainMenu->lNewGame,sEvent.motion.x,sEvent.motion.y))
{
highlightButton(1,1);
ourMainMenu->highlighted=1;
}
else if (isItIn(&ourMainMenu->lLoadGame,sEvent.motion.x,sEvent.motion.y))
{
highlightButton(2,1);
ourMainMenu->highlighted=2;
}
else if (isItIn(&ourMainMenu->lHighScores,sEvent.motion.x,sEvent.motion.y))
{
highlightButton(3,1);
ourMainMenu->highlighted=3;
}
else if (isItIn(&ourMainMenu->lCredits,sEvent.motion.x,sEvent.motion.y))
{
highlightButton(4,1);
ourMainMenu->highlighted=4;
}
else if (isItIn(&ourMainMenu->lQuit,sEvent.motion.x,sEvent.motion.y))
{
highlightButton(5,1);
ourMainMenu->highlighted=5;
}
}
else if ((sEvent.type==SDL_MOUSEBUTTONUP) && SDL_BUTTON(1))
{
if (isItIn(&ourMainMenu->lNewGame,sEvent.motion.x,sEvent.motion.y))
{
highlightButton(1,2);
ourMainMenu->highlighted=1;
}
else if (isItIn(&ourMainMenu->lLoadGame,sEvent.motion.x,sEvent.motion.y))
{
highlightButton(2,2);
ourMainMenu->highlighted=2;
}
else if (isItIn(&ourMainMenu->lHighScores,sEvent.motion.x,sEvent.motion.y))
{
highlightButton(3,2);
ourMainMenu->highlighted=3;
}
else if (isItIn(&ourMainMenu->lCredits,sEvent.motion.x,sEvent.motion.y))
{
highlightButton(4,2);
ourMainMenu->highlighted=4;
}
else if (isItIn(&ourMainMenu->lQuit,sEvent.motion.x,sEvent.motion.y))
{
highlightButton(5,2);
ourMainMenu->highlighted=5;
}
}
else if (sEvent.type==SDL_KEYDOWN)
{
switch (sEvent.key.keysym.sym)
{
//case SDLK_LEFT:
// {
// if(ourMainMenu->lQuit.x>0)
// ourMainMenu->lQuit.x--;
// break;
// }
//case (SDLK_RIGHT):
// {
// ourMainMenu->lQuit.x++;
// break;
// }
//case (SDLK_UP):
// {
// if(ourMainMenu->lQuit.y>0)
// ourMainMenu->lQuit.y--;
// break;
// }
//case (SDLK_DOWN):
// {
// ourMainMenu->lQuit.y++;
// break;
// }
case (SDLK_q):
{
return ;
break;
}
}
showMainMenu();
}
}
}
catch(...)
{ continue; }
SDL_Delay(30); //give time for other apps
}
}

View File

@ -1,18 +1,18 @@
#include "SDL.h"
#include "CSemiDefHandler.h"
#include "CSemiLodHandler.h"
struct AnimatedPic
{
std::vector<SDL_Surface*> frames;
~AnimatedPic()
{
for (int i=0;i<frames.size();i++)
{
SDL_FreeSurface(frames[i]);
delete frames[i];
}
}
};
//struct AnimatedPic
//{
// std::vector<SDL_Surface*> frames;
// ~AnimatedPic()
// {
// for (int i=0;i<frames.size();i++)
// {
// SDL_FreeSurface(frames[i]);
// delete frames[i];
// }
// }
//};
class CPreGame
{
public:
@ -23,11 +23,13 @@ public:
SDL_Surface * background;
CSemiDefHandler *newGame, *loadGame, *highScores,*credits, *quit;
SDL_Rect lNewGame, lLoadGame, lHighScores, lCredits, lQuit;
} * ourMainMenu;
int highlighted;//0=none; 1=new game; 2=load game; 3=high score; 4=credits; 5=quit
} * ourMainMenu, * newGameManu;
std::string map; //selected map
std::vector<CSemiLodHandler *> handledLods;
CPreGame(); //c-tor
void showMainMenu();
void runLoop(); // runs mainloop of PreGame
void initMainMenu(); //loads components for main menu
void highlightButton(int which, int on);
};