[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> <save>
<name>Allanis</name> <name>Allanis</name>
<x>120</x> <x>120</x>
<y>144</y> <y>180</y>
<map>map</map> <map>map</map>
</save> </save>

View File

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

View File

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

View File

@ -2,70 +2,75 @@
IngameMenu::IngameMenu(void) { IngameMenu::IngameMenu(void) {
_active = false; _active = false;
_highlightedButton = 0;
btnResume.SetOutRGB(200, 200, 200); Button* btnResume = new Button();
btnResume.SetOverRGB(255, 255, 255); btnResume->SetOutRGB(200, 200, 200);
btnResume.SetTextRGB(0, 0, 0); btnResume->SetOverRGB(255, 255, 255);
btnResume.SetText("Resume Game"); btnResume->SetTextRGB(0, 0, 0);
btnResume.SetHighlightRGB(255, 128, 0); btnResume->SetText("Resume Game");
btnResume.SetHighlighted(true); btnResume->SetHighlightRGB(255, 128, 0);
btnResume.SetXY(SCREEN_WIDTH / 2 - btnResume.GetWidth() / 2, 50); btnResume->SetHighlighted(false);
btnResume->SetXY(SCREEN_WIDTH / 2 - btnResume->GetWidth() / 2, 50);
btnSaveGame.SetOutRGB(200, 200, 200); Button* btnSaveGame = new Button();
btnSaveGame.SetOverRGB(255, 255, 255); btnSaveGame->SetOutRGB(200, 200, 200);
btnSaveGame.SetTextRGB(0, 0, 0); btnSaveGame->SetOverRGB(255, 255, 255);
btnSaveGame.SetText("SaveGame"); btnSaveGame->SetTextRGB(0, 0, 0);
btnSaveGame.SetHighlightRGB(255, 128, 0); btnSaveGame->SetText("SaveGame");
btnSaveGame.SetHighlighted(false); btnSaveGame->SetHighlightRGB(255, 128, 0);
btnSaveGame.SetXY(SCREEN_WIDTH / 2 - btnSaveGame.GetWidth() / 2, 100); btnSaveGame->SetHighlighted(false);
btnSaveGame->SetXY(SCREEN_WIDTH / 2 - btnSaveGame->GetWidth() / 2, 100);
btnLoadGame.SetOutRGB(200, 200, 200); Button* btnLoadGame = new Button();
btnLoadGame.SetOverRGB(255, 255, 255); btnLoadGame->SetOutRGB(200, 200, 200);
btnLoadGame.SetTextRGB(0, 0, 0); btnLoadGame->SetOverRGB(255, 255, 255);
btnLoadGame.SetText("LoadGame"); btnLoadGame->SetTextRGB(0, 0, 0);
btnLoadGame.SetHighlightRGB(255, 128, 0); btnLoadGame->SetText("LoadGame");
btnLoadGame.SetHighlighted(false); btnLoadGame->SetHighlightRGB(255, 128, 0);
btnLoadGame.SetXY(SCREEN_WIDTH / 2 - btnLoadGame.GetWidth() / 2, 150); btnLoadGame->SetHighlighted(false);
btnLoadGame->SetXY(SCREEN_WIDTH / 2 - btnLoadGame->GetWidth() / 2, 150);
btnOptions.SetOutRGB(200, 200, 200); Button* btnOptions = new Button();
btnOptions.SetOverRGB(255, 255, 255); btnOptions->SetOutRGB(200, 200, 200);
btnOptions.SetTextRGB(0, 0, 0); btnOptions->SetOverRGB(255, 255, 255);
btnOptions.SetText("Options"); btnOptions->SetTextRGB(0, 0, 0);
btnOptions.SetHighlightRGB(255, 128, 0); btnOptions->SetText("Options");
btnOptions.SetHighlighted(false); btnOptions->SetHighlightRGB(255, 128, 0);
btnOptions.SetXY(SCREEN_WIDTH / 2 - btnOptions.GetWidth() / 2, 200); btnOptions->SetHighlighted(false);
btnOptions->SetXY(SCREEN_WIDTH / 2 - btnOptions->GetWidth() / 2, 200);
btnExitToMenu.SetOutRGB(200, 200, 200); Button* btnExitToMenu = new Button();
btnExitToMenu.SetOverRGB(255, 255, 255); btnExitToMenu->SetOutRGB(200, 200, 200);
btnExitToMenu.SetTextRGB(0, 0, 0); btnExitToMenu->SetOverRGB(255, 255, 255);
btnExitToMenu.SetText("Exit To Main Menu"); btnExitToMenu->SetTextRGB(0, 0, 0);
btnExitToMenu.SetHighlightRGB(255, 128, 0); btnExitToMenu->SetText("Exit To Main Menu");
btnExitToMenu.SetHighlighted(false); btnExitToMenu->SetHighlightRGB(255, 128, 0);
btnExitToMenu.SetXY(SCREEN_WIDTH / 2 - btnExitToMenu.GetWidth() / 2, 250); 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) { IngameMenu::~IngameMenu(void) {
} }
ingameMenuNavVal_t IngameMenu::HandleInput(void) { ingameMenuNavVal_t IngameMenu::HandleInput(void) {
while(SDL_PollEvent(&event)) { while(SDL_PollEvent(&event)) {
btnResume.CheckMouseOver(); _buttons.CheckMouseOverDummy();
btnSaveGame.CheckMouseOver();
btnLoadGame.CheckMouseOver();
btnOptions.CheckMouseOver();
btnExitToMenu.CheckMouseOver();
if(event.key.type == SDL_KEYDOWN) { if(event.key.type == SDL_KEYDOWN) {
if(event.key.keysym.sym == SDLK_ESCAPE) { if(event.key.keysym.sym == SDLK_ESCAPE) {
return ingameMenuResume; return ingameMenuResume;
} else if(event.key.keysym.sym == SDLK_DOWN) { } else if(event.key.keysym.sym == SDLK_DOWN) {
HighlightNewSelection(_highlightedButton + 1); _buttons.SelectNext();
} else if(event.key.keysym.sym == SDLK_UP) { } else if(event.key.keysym.sym == SDLK_UP) {
HighlightNewSelection(_highlightedButton - 1); _buttons.SelectPrevious();
} else if(event.key.keysym.sym == SDLK_RETURN) { } else if(event.key.keysym.sym == SDLK_RETURN) {
switch(_highlightedButton) { switch(_buttons.GetSelectedButton()) {
case 0: return ingameMenuResume; case 0: return ingameMenuResume;
case 1: return ingameMenuSaveGame; case 1: return ingameMenuSaveGame;
case 2: return ingameMenuLoadGame; case 2: return ingameMenuLoadGame;
@ -76,16 +81,13 @@ ingameMenuNavVal_t IngameMenu::HandleInput(void) {
} }
else if(event.type == SDL_MOUSEBUTTONUP) { else if(event.type == SDL_MOUSEBUTTONUP) {
if(event.button.button == SDL_BUTTON_LEFT) { if(event.button.button == SDL_BUTTON_LEFT) {
if(btnResume.CheckMouseOver()) switch(_buttons.CheckMouseOver()) {
return ingameMenuResume; case 0: return ingameMenuResume;
else if(btnSaveGame.CheckMouseOver()) case 1: return ingameMenuSaveGame;
return ingameMenuSaveGame; case 2: return ingameMenuLoadGame;
else if(btnLoadGame.CheckMouseOver()) case 3: return ingameMenuOptions;
return ingameMenuLoadGame; case 4: return ingameMenuMainMenu;
else if(btnOptions.CheckMouseOver()) }
return ingameMenuOptions;
else if(btnExitToMenu.CheckMouseOver())
return ingameMenuMainMenu;
} }
} }
} }
@ -93,39 +95,5 @@ ingameMenuNavVal_t IngameMenu::HandleInput(void) {
} }
void IngameMenu::Render(void) { void IngameMenu::Render(void) {
btnResume.RenderLiteral(); _buttons.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;
}
}

View File

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

View File

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

View File

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

View File

@ -1,7 +1,7 @@
CC = g++ CC = g++
CFLAGS = -ansi -Wall -g CFLAGS = -ansi -Wall -g
LDADD = -lGL -lGLU -lSDL -lSDL_ttf -lSDL_gfx -lSDL_image -ltinyxml 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 \ 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 \ Map.o MapElement.o MapEntities.o MemManager.o NPC.o ParticleEmitter.o \
Rect.o Text.o Texture.o TextureManager.o Timer.o \ Rect.o Text.o Texture.o TextureManager.o Timer.o \