[Add] Buttons groups.

[Add] Main menu arrow navigation.
This commit is contained in:
Tamir Atias 2012-01-10 06:32:05 +02:00
parent 57d51f6a99
commit 3b54b1d28d
8 changed files with 185 additions and 178 deletions

View File

@ -2,6 +2,6 @@
<save>
<name>Allanis</name>
<x>120</x>
<y>144</y>
<y>180</y>
<map>map</map>
</save>

View File

@ -169,6 +169,14 @@
RelativePath="..\..\..\src\libUnuk\Button.h"
>
</File>
<File
RelativePath="..\..\..\src\libUnuk\ButtonGroup.cpp"
>
</File>
<File
RelativePath="..\..\..\src\libUnuk\ButtonGroup.h"
>
</File>
<File
RelativePath="..\..\..\src\libUnuk\ButtonToggle.cpp"
>

View File

@ -6,7 +6,6 @@ Button::Button(void) {
}
Button::~Button(void) {
}
void Button::SetOutRGB(Uint8 r, Uint8 g, Uint8 b) {

View File

@ -2,70 +2,75 @@
IngameMenu::IngameMenu(void) {
_active = false;
_highlightedButton = 0;
btnResume.SetOutRGB(200, 200, 200);
btnResume.SetOverRGB(255, 255, 255);
btnResume.SetTextRGB(0, 0, 0);
btnResume.SetText("Resume Game");
btnResume.SetHighlightRGB(255, 128, 0);
btnResume.SetHighlighted(true);
btnResume.SetXY(SCREEN_WIDTH / 2 - btnResume.GetWidth() / 2, 50);
Button* btnResume = new Button();
btnResume->SetOutRGB(200, 200, 200);
btnResume->SetOverRGB(255, 255, 255);
btnResume->SetTextRGB(0, 0, 0);
btnResume->SetText("Resume Game");
btnResume->SetHighlightRGB(255, 128, 0);
btnResume->SetHighlighted(false);
btnResume->SetXY(SCREEN_WIDTH / 2 - btnResume->GetWidth() / 2, 50);
btnSaveGame.SetOutRGB(200, 200, 200);
btnSaveGame.SetOverRGB(255, 255, 255);
btnSaveGame.SetTextRGB(0, 0, 0);
btnSaveGame.SetText("SaveGame");
btnSaveGame.SetHighlightRGB(255, 128, 0);
btnSaveGame.SetHighlighted(false);
btnSaveGame.SetXY(SCREEN_WIDTH / 2 - btnSaveGame.GetWidth() / 2, 100);
Button* btnSaveGame = new Button();
btnSaveGame->SetOutRGB(200, 200, 200);
btnSaveGame->SetOverRGB(255, 255, 255);
btnSaveGame->SetTextRGB(0, 0, 0);
btnSaveGame->SetText("SaveGame");
btnSaveGame->SetHighlightRGB(255, 128, 0);
btnSaveGame->SetHighlighted(false);
btnSaveGame->SetXY(SCREEN_WIDTH / 2 - btnSaveGame->GetWidth() / 2, 100);
btnLoadGame.SetOutRGB(200, 200, 200);
btnLoadGame.SetOverRGB(255, 255, 255);
btnLoadGame.SetTextRGB(0, 0, 0);
btnLoadGame.SetText("LoadGame");
btnLoadGame.SetHighlightRGB(255, 128, 0);
btnLoadGame.SetHighlighted(false);
btnLoadGame.SetXY(SCREEN_WIDTH / 2 - btnLoadGame.GetWidth() / 2, 150);
Button* btnLoadGame = new Button();
btnLoadGame->SetOutRGB(200, 200, 200);
btnLoadGame->SetOverRGB(255, 255, 255);
btnLoadGame->SetTextRGB(0, 0, 0);
btnLoadGame->SetText("LoadGame");
btnLoadGame->SetHighlightRGB(255, 128, 0);
btnLoadGame->SetHighlighted(false);
btnLoadGame->SetXY(SCREEN_WIDTH / 2 - btnLoadGame->GetWidth() / 2, 150);
btnOptions.SetOutRGB(200, 200, 200);
btnOptions.SetOverRGB(255, 255, 255);
btnOptions.SetTextRGB(0, 0, 0);
btnOptions.SetText("Options");
btnOptions.SetHighlightRGB(255, 128, 0);
btnOptions.SetHighlighted(false);
btnOptions.SetXY(SCREEN_WIDTH / 2 - btnOptions.GetWidth() / 2, 200);
Button* btnOptions = new Button();
btnOptions->SetOutRGB(200, 200, 200);
btnOptions->SetOverRGB(255, 255, 255);
btnOptions->SetTextRGB(0, 0, 0);
btnOptions->SetText("Options");
btnOptions->SetHighlightRGB(255, 128, 0);
btnOptions->SetHighlighted(false);
btnOptions->SetXY(SCREEN_WIDTH / 2 - btnOptions->GetWidth() / 2, 200);
btnExitToMenu.SetOutRGB(200, 200, 200);
btnExitToMenu.SetOverRGB(255, 255, 255);
btnExitToMenu.SetTextRGB(0, 0, 0);
btnExitToMenu.SetText("Exit To Main Menu");
btnExitToMenu.SetHighlightRGB(255, 128, 0);
btnExitToMenu.SetHighlighted(false);
btnExitToMenu.SetXY(SCREEN_WIDTH / 2 - btnExitToMenu.GetWidth() / 2, 250);
Button* btnExitToMenu = new Button();
btnExitToMenu->SetOutRGB(200, 200, 200);
btnExitToMenu->SetOverRGB(255, 255, 255);
btnExitToMenu->SetTextRGB(0, 0, 0);
btnExitToMenu->SetText("Exit To Main Menu");
btnExitToMenu->SetHighlightRGB(255, 128, 0);
btnExitToMenu->SetHighlighted(false);
btnExitToMenu->SetXY(SCREEN_WIDTH / 2 - btnExitToMenu->GetWidth() / 2, 250);
_buttons.AddButton(btnResume);
_buttons.AddButton(btnSaveGame);
_buttons.AddButton(btnLoadGame);
_buttons.AddButton(btnOptions);
_buttons.AddButton(btnExitToMenu);
}
IngameMenu::~IngameMenu(void) {
}
ingameMenuNavVal_t IngameMenu::HandleInput(void) {
while(SDL_PollEvent(&event)) {
btnResume.CheckMouseOver();
btnSaveGame.CheckMouseOver();
btnLoadGame.CheckMouseOver();
btnOptions.CheckMouseOver();
btnExitToMenu.CheckMouseOver();
_buttons.CheckMouseOverDummy();
if(event.key.type == SDL_KEYDOWN) {
if(event.key.keysym.sym == SDLK_ESCAPE) {
return ingameMenuResume;
} else if(event.key.keysym.sym == SDLK_DOWN) {
HighlightNewSelection(_highlightedButton + 1);
_buttons.SelectNext();
} else if(event.key.keysym.sym == SDLK_UP) {
HighlightNewSelection(_highlightedButton - 1);
_buttons.SelectPrevious();
} else if(event.key.keysym.sym == SDLK_RETURN) {
switch(_highlightedButton) {
switch(_buttons.GetSelectedButton()) {
case 0: return ingameMenuResume;
case 1: return ingameMenuSaveGame;
case 2: return ingameMenuLoadGame;
@ -76,16 +81,13 @@ ingameMenuNavVal_t IngameMenu::HandleInput(void) {
}
else if(event.type == SDL_MOUSEBUTTONUP) {
if(event.button.button == SDL_BUTTON_LEFT) {
if(btnResume.CheckMouseOver())
return ingameMenuResume;
else if(btnSaveGame.CheckMouseOver())
return ingameMenuSaveGame;
else if(btnLoadGame.CheckMouseOver())
return ingameMenuLoadGame;
else if(btnOptions.CheckMouseOver())
return ingameMenuOptions;
else if(btnExitToMenu.CheckMouseOver())
return ingameMenuMainMenu;
switch(_buttons.CheckMouseOver()) {
case 0: return ingameMenuResume;
case 1: return ingameMenuSaveGame;
case 2: return ingameMenuLoadGame;
case 3: return ingameMenuOptions;
case 4: return ingameMenuMainMenu;
}
}
}
}
@ -93,39 +95,5 @@ ingameMenuNavVal_t IngameMenu::HandleInput(void) {
}
void IngameMenu::Render(void) {
btnResume.RenderLiteral();
btnSaveGame.RenderLiteral();
btnLoadGame.RenderLiteral();
btnOptions.RenderLiteral();
btnExitToMenu.RenderLiteral();
}
void IngameMenu::HighlightNewSelection(int newButton) {
// Turn of highlight for currently highlighted button
switch(_highlightedButton) {
case 0: btnResume.SetHighlighted(false); break;
case 1: btnSaveGame.SetHighlighted(false); break;
case 2: btnLoadGame.SetHighlighted(false); break;
case 3: btnOptions.SetHighlighted(false); break;
case 4: btnExitToMenu.SetHighlighted(false); break;
}
_highlightedButton = newButton;
// If < 0 then up was pressed when first index was selected
// If > 0 then down was pressed when last index was selected
if(_highlightedButton < 0) {
_highlightedButton = 4;
} else if(_highlightedButton > 4) {
_highlightedButton = 0;
}
// Highlight new selection
switch(_highlightedButton) {
case 0: btnResume.SetHighlighted(true); break;
case 1: btnSaveGame.SetHighlighted(true); break;
case 2: btnLoadGame.SetHighlighted(true); break;
case 3: btnOptions.SetHighlighted(true); break;
case 4: btnExitToMenu.SetHighlighted(true); break;
}
}
_buttons.RenderLiteral();
}

View File

@ -3,7 +3,7 @@
#include "../Unuk/Globals.h"
#include "../Unuk/Constants.h"
#include "Button.h"
#include "ButtonGroup.h"
#include "ButtonToggle.h"
enum ingameMenuNavVal_t {
@ -27,17 +27,9 @@ public:
bool GetStatus(void) { return _active; }
private:
void HighlightNewSelection(int newButton);
bool _active;
Button btnResume;
Button btnSaveGame;
Button btnLoadGame;
Button btnOptions;
Button btnExitToMenu;
int _highlightedButton;
ButtonGroup _buttons;
};
#endif

View File

@ -1,11 +1,46 @@
#include "MainMenu.h"
MainMenu::MainMenu(void) {
btnNewGame.SetOutRGB(200, 200, 200);
btnNewGame.SetOverRGB(255, 255, 255);
btnNewGame.SetTextRGB(0, 0, 0);
btnNewGame.SetText("New Game");
btnNewGame.SetXY(100, 150);
Button* btnNewGame = new Button();
btnNewGame->SetOutRGB(200, 200, 200);
btnNewGame->SetOverRGB(255, 255, 255);
btnNewGame->SetTextRGB(0, 0, 0);
btnNewGame->SetText("New Game");
btnNewGame->SetXY(100, 150);
btnNewGame->SetHighlightRGB(255, 128, 0);
btnNewGame->SetHighlighted(false);
Button* btnLoadGame = new Button();
btnLoadGame->SetOutRGB(200, 200, 200);
btnLoadGame->SetOverRGB(255, 255, 255);
btnLoadGame->SetTextRGB(0, 0, 0);
btnLoadGame->SetText("Load Game");
btnLoadGame->SetHighlightRGB(255, 128, 0);
btnLoadGame->SetHighlighted(false);
btnLoadGame->SetXY(100, 200);
Button* btnOptions = new Button();
btnOptions->SetOutRGB(200, 200, 200);
btnOptions->SetOverRGB(255, 255, 255);
btnOptions->SetTextRGB(0, 0, 0);
btnOptions->SetText("Options");
btnOptions->SetHighlightRGB(255, 128, 0);
btnOptions->SetHighlighted(false);
btnOptions->SetXY(100, 250);
Button* btnExit = new Button();
btnExit->SetOutRGB(200, 200, 200);
btnExit->SetOverRGB(255, 255, 255);
btnExit->SetTextRGB(0, 0, 0);
btnExit->SetText("Exit");
btnExit->SetHighlightRGB(255, 128, 0);
btnExit->SetHighlighted(false);
btnExit->SetXY(100, 300);
grpMain.AddButton(btnNewGame);
grpMain.AddButton(btnLoadGame);
grpMain.AddButton(btnOptions);
grpMain.AddButton(btnExit);
btnNewGameActive = false;
@ -16,39 +51,30 @@ MainMenu::MainMenu(void) {
rectNewGame.SetXY(250, 150);
rectNewGame.SetWidthHeight(lblNewGame.GetWidth() + 50, 90);
btnNewGameYes.SetOutRGB(20, 150, 20);
btnNewGameYes.SetOverRGB(20, 255, 20);
btnNewGameYes.SetTextRGB(0, 0, 0);
btnNewGameYes.SetText("Yes");
btnNewGameYes.SetXY(rectNewGame.GetX() + rectNewGame.GetWidth() / 2 - 40 - btnNewGameYes.GetWidth(), 190);
btnNewGameNo.SetOutRGB(150, 20, 20);
btnNewGameNo.SetOverRGB(255, 20, 20);
btnNewGameNo.SetTextRGB(0, 0, 0);
btnNewGameNo.SetText("No");
btnNewGameNo.SetXY(rectNewGame.GetX() + rectNewGame.GetWidth() / 2 + 40 - btnNewGameNo.GetWidth(), 190);
btnLoadGame.SetOutRGB(200, 200, 200);
btnLoadGame.SetOverRGB(255, 255, 255);
btnLoadGame.SetTextRGB(0, 0, 0);
btnLoadGame.SetText("Load Game");
btnLoadGame.SetXY(100, 200);
btnOptions.SetOutRGB(200, 200, 200);
btnOptions.SetOverRGB(255, 255, 255);
btnOptions.SetTextRGB(0, 0, 0);
btnOptions.SetText("Options");
btnOptions.SetXY(100, 250);
btnExit.SetOutRGB(200, 200, 200);
btnExit.SetOverRGB(255, 255, 255);
btnExit.SetTextRGB(0, 0, 0);
btnExit.SetText("Exit");
btnExit.SetXY(100, 300);
lblMenu.SetXY(100, 75);
lblMenu.SetTextBlended("Unuk", vlarge, 0, 0, 0);
Button* btnNewGameYes = new Button();
btnNewGameYes->SetOutRGB(20, 150, 20);
btnNewGameYes->SetOverRGB(20, 255, 20);
btnNewGameYes->SetTextRGB(0, 0, 0);
btnNewGameYes->SetText("Yes");
btnNewGameYes->SetHighlightRGB(255, 128, 0);
btnNewGameYes->SetHighlighted(false);
btnNewGameYes->SetXY(rectNewGame.GetX() + rectNewGame.GetWidth() / 2 - 40 - btnNewGameYes->GetWidth(), 190);
Button* btnNewGameNo = new Button();
btnNewGameNo->SetOutRGB(150, 20, 20);
btnNewGameNo->SetOverRGB(255, 20, 20);
btnNewGameNo->SetTextRGB(0, 0, 0);
btnNewGameNo->SetText("No");
btnNewGameNo->SetHighlightRGB(255, 128, 0);
btnNewGameNo->SetHighlighted(false);
btnNewGameNo->SetXY(rectNewGame.GetX() + rectNewGame.GetWidth() / 2 + 40 - btnNewGameNo->GetWidth(), 190);
grpNewGame.AddButton(btnNewGameYes);
grpNewGame.AddButton(btnNewGameNo);
//m_background.Load("MainMenu");
camera.x = 0;
@ -68,32 +94,55 @@ mainMenuNavVal_t MainMenu::Run(void) {
SDL_Flip(screen);
while(SDL_PollEvent(&event)) {
btnNewGame.CheckMouseOver();
grpMain.CheckMouseOverDummy();
if(btnNewGameActive) {
btnNewGameYes.CheckMouseOver();
btnNewGameNo.CheckMouseOver();
grpNewGame.CheckMouseOverDummy();
}
btnLoadGame.CheckMouseOver();
btnOptions.CheckMouseOver();
btnExit.CheckMouseOver();
if(event.type == SDL_MOUSEBUTTONUP) {
if(event.key.type == SDL_KEYDOWN) {
if(event.key.keysym.sym == SDLK_DOWN) {
if(btnNewGameActive) {
grpNewGame.SelectNext();
} else {
grpMain.SelectNext();
}
} else if(event.key.keysym.sym == SDLK_UP) {
if(btnNewGameActive) {
grpNewGame.SelectPrevious();
} else {
grpMain.SelectPrevious();
}
} else if(event.key.keysym.sym == SDLK_RETURN) {
if(btnNewGameActive) {
switch(grpNewGame.GetSelectedButton()) {
case 0: return mainMenuNewGame; break;
case 1: btnNewGameActive = false; break;
}
} else {
switch(grpMain.GetSelectedButton()) {
case 0: btnNewGameActive = !btnNewGameActive; break;
case 1: return mainMenuLoadGame;
case 2: return mainMenuOptions;
case 3: return mainMenuExitGame;
}
}
}
}
else if(event.type == SDL_MOUSEBUTTONUP) {
if(event.button.button == SDL_BUTTON_LEFT) {
if(btnNewGame.CheckMouseOver())
btnNewGameActive = !btnNewGameActive;
else if(btnLoadGame.CheckMouseOver())
return mainMenuLoadGame;
else if(btnOptions.CheckMouseOver())
return mainMenuOptions;
else if(btnExit.CheckMouseOver())
return mainMenuExitGame;
switch(grpMain.CheckMouseOver()) {
case 0: btnNewGameActive = !btnNewGameActive; break;
case 1: return mainMenuLoadGame;
case 2: return mainMenuOptions;
case 3: return mainMenuExitGame;
}
if(btnNewGameActive) {
if(btnNewGameYes.CheckMouseOver())
return mainMenuNewGame;
//else if(btnNewGameNo.CheckMouseOver())
//return btnNewGameActive = false;
switch(grpNewGame.CheckMouseOver()) {
case 0: return mainMenuNewGame; break;
case 1: btnNewGameActive = false; break;
}
}
}
}
@ -112,15 +161,11 @@ void MainMenu::Render(void) {
lblMenu.Render();
btnNewGame.Render();
grpMain.RenderLiteral();
if(btnNewGameActive) {
rectNewGame.Draw();
lblNewGame.Render();
btnNewGameYes.Render();
btnNewGameNo.Render();
grpNewGame.RenderLiteral();
}
btnLoadGame.Render();
btnOptions.Render();
btnExit.Render();
}

View File

@ -3,7 +3,7 @@
#include "../Unuk/Constants.h"
#include "FPS.h"
#include "Button.h"
#include "ButtonGroup.h"
#include "Map.h"
#include "Rect.h"
#include "Text.h"
@ -29,17 +29,12 @@ private:
Text lblMenu;
Button btnNewGame;
ButtonGroup grpMain;
bool btnNewGameActive;
Rect rectNewGame;
Text lblNewGame;
Button btnNewGameYes;
Button btnNewGameNo;
Button btnLoadGame;
Button btnOptions;
Button btnExit;
bool btnNewGameActive;
Rect rectNewGame;
Text lblNewGame;
ButtonGroup grpNewGame;
};
#endif

View File

@ -1,7 +1,7 @@
CC = g++
CFLAGS = -ansi -Wall -g
LDADD = -lGL -lGLU -lSDL -lSDL_ttf -lSDL_gfx -lSDL_image -ltinyxml
objects = ApplySurface.o Button.o ButtonToggle.o Character.o Collision.o \
objects = ApplySurface.o Button.o ButtonToggle.o ButtonGroup.o Character.o Collision.o \
Debug.o Font.o FPS.o ImageLoader.o IngameMenu.o Input.o MainMenu.o \
Map.o MapElement.o MapEntities.o MemManager.o NPC.o ParticleEmitter.o \
Rect.o Text.o Texture.o TextureManager.o Timer.o \