diff --git a/Save/save b/Save/save
index 60af4dd..f7492c8 100644
--- a/Save/save
+++ b/Save/save
@@ -2,6 +2,6 @@
Allanis
120
- 144
+ 180
diff --git a/Win32/Unuk/LibUnuk/LibUnuk.vcproj b/Win32/Unuk/LibUnuk/LibUnuk.vcproj
index baaf054..f03682c 100644
--- a/Win32/Unuk/LibUnuk/LibUnuk.vcproj
+++ b/Win32/Unuk/LibUnuk/LibUnuk.vcproj
@@ -169,6 +169,14 @@
RelativePath="..\..\..\src\libUnuk\Button.h"
>
+
+
+
+
diff --git a/src/libUnuk/Button.cpp b/src/libUnuk/Button.cpp
index d94e0c7..2c0bc20 100644
--- a/src/libUnuk/Button.cpp
+++ b/src/libUnuk/Button.cpp
@@ -6,7 +6,6 @@ Button::Button(void) {
}
Button::~Button(void) {
-
}
void Button::SetOutRGB(Uint8 r, Uint8 g, Uint8 b) {
diff --git a/src/libUnuk/IngameMenu.cpp b/src/libUnuk/IngameMenu.cpp
index 57dc6ec..c67b91a 100644
--- a/src/libUnuk/IngameMenu.cpp
+++ b/src/libUnuk/IngameMenu.cpp
@@ -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();
+}
\ No newline at end of file
diff --git a/src/libUnuk/IngameMenu.h b/src/libUnuk/IngameMenu.h
index ef0ddeb..d6f36c5 100644
--- a/src/libUnuk/IngameMenu.h
+++ b/src/libUnuk/IngameMenu.h
@@ -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
diff --git a/src/libUnuk/MainMenu.cpp b/src/libUnuk/MainMenu.cpp
index 95f06d0..3b75bcf 100644
--- a/src/libUnuk/MainMenu.cpp
+++ b/src/libUnuk/MainMenu.cpp
@@ -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();
}
diff --git a/src/libUnuk/MainMenu.h b/src/libUnuk/MainMenu.h
index 44209e3..91fd175 100644
--- a/src/libUnuk/MainMenu.h
+++ b/src/libUnuk/MainMenu.h
@@ -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
diff --git a/src/libUnuk/Makefile b/src/libUnuk/Makefile
index a6711e0..d21a69e 100644
--- a/src/libUnuk/Makefile
+++ b/src/libUnuk/Makefile
@@ -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 \