Implemented main menu and buttons
This commit is contained in:
@@ -79,6 +79,7 @@ void BaseScene::RunFrame() {
|
|||||||
FrameStart();
|
FrameStart();
|
||||||
HandleEvents();
|
HandleEvents();
|
||||||
Update();
|
Update();
|
||||||
|
SDL_FillRect(screen, 0, 0);
|
||||||
Render(screen);
|
Render(screen);
|
||||||
SDL_Flip(screen);
|
SDL_Flip(screen);
|
||||||
FrameEnd();
|
FrameEnd();
|
||||||
|
|||||||
+3
-3
@@ -41,7 +41,7 @@ Button::Button(Sint16 i, Sint16 j, SDL_Surface* imageSurface, SDL_Surface* fontS
|
|||||||
SetText(s);
|
SetText(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
Button::State Button::MouseMotion(SDL_MouseMotionEvent& motion) {
|
Button::State Button::MouseMotion(SDL_MouseMotionEvent const& motion) {
|
||||||
if (motion.state & SDL_BUTTON_LMASK) {
|
if (motion.state & SDL_BUTTON_LMASK) {
|
||||||
return CalcState(motion.x, motion.y, true);
|
return CalcState(motion.x, motion.y, true);
|
||||||
}
|
}
|
||||||
@@ -51,14 +51,14 @@ Button::State Button::MouseMotion(SDL_MouseMotionEvent& motion) {
|
|||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
||||||
Button::State Button::MouseButtonDown(SDL_MouseButtonEvent& button) {
|
Button::State Button::MouseButtonDown(SDL_MouseButtonEvent const& button) {
|
||||||
if (button.button == SDL_BUTTON_LEFT) {
|
if (button.button == SDL_BUTTON_LEFT) {
|
||||||
return CalcState(button.x, button.y, true);
|
return CalcState(button.x, button.y, true);
|
||||||
}
|
}
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
||||||
Button::State Button::MouseButtonUp(SDL_MouseButtonEvent& button) {
|
Button::State Button::MouseButtonUp(SDL_MouseButtonEvent const& button) {
|
||||||
if (button.button == SDL_BUTTON_LEFT) {
|
if (button.button == SDL_BUTTON_LEFT) {
|
||||||
return CalcState(button.x, button.y, false);
|
return CalcState(button.x, button.y, false);
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-3
@@ -38,9 +38,9 @@ public:
|
|||||||
Button(Sint16 x, Sint16 y, SDL_Surface* imageSurface, SDL_Surface* fontSurface, std::string text = "");
|
Button(Sint16 x, Sint16 y, SDL_Surface* imageSurface, SDL_Surface* fontSurface, std::string text = "");
|
||||||
|
|
||||||
//return the current state
|
//return the current state
|
||||||
State MouseMotion(SDL_MouseMotionEvent&);
|
State MouseMotion(SDL_MouseMotionEvent const&);
|
||||||
State MouseButtonDown(SDL_MouseButtonEvent&);
|
State MouseButtonDown(SDL_MouseButtonEvent const&);
|
||||||
State MouseButtonUp(SDL_MouseButtonEvent&);
|
State MouseButtonUp(SDL_MouseButtonEvent const&);
|
||||||
State GetState() const {
|
State GetState() const {
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|||||||
+25
-5
@@ -49,7 +49,6 @@ void InGame::Update() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void InGame::Render(SDL_Surface* const screen) {
|
void InGame::Render(SDL_Surface* const screen) {
|
||||||
SDL_FillRect(screen, 0, 0);
|
|
||||||
playerMgr.DrawAllTo(screen);
|
playerMgr.DrawAllTo(screen);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -89,16 +88,16 @@ void InGame::KeyDown(SDL_KeyboardEvent const& key) {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case SDLK_1:
|
case SDLK_1:
|
||||||
currentPlayer = 0;
|
SwitchToPlayer(0);
|
||||||
break;
|
break;
|
||||||
case SDLK_2:
|
case SDLK_2:
|
||||||
currentPlayer = 1;
|
SwitchToPlayer(1);
|
||||||
break;
|
break;
|
||||||
case SDLK_3:
|
case SDLK_3:
|
||||||
currentPlayer = 2;
|
SwitchToPlayer(2);
|
||||||
break;
|
break;
|
||||||
case SDLK_4:
|
case SDLK_4:
|
||||||
currentPlayer = 3;
|
SwitchToPlayer(3);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -128,3 +127,24 @@ void InGame::NewPlayer(int index, std::string avatarName, int x, int y) {
|
|||||||
Player* p = playerMgr.New(index, surfaceMgr[avatarName]);
|
Player* p = playerMgr.New(index, surfaceMgr[avatarName]);
|
||||||
p->SetPosition(Vector2(x, y));
|
p->SetPosition(Vector2(x, y));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void InGame::SwitchToPlayer(int index) {
|
||||||
|
//dirty hacks for smooth movement
|
||||||
|
playerMgr[currentPlayer]->SetMotion(Vector2(0,0));
|
||||||
|
currentPlayer = index;
|
||||||
|
|
||||||
|
Uint8* key = SDL_GetKeyState(NULL);
|
||||||
|
|
||||||
|
if (key[SDLK_w]) {
|
||||||
|
playerMgr[currentPlayer]->WalkInDirection(Direction::NORTH);
|
||||||
|
}
|
||||||
|
if (key[SDLK_s]) {
|
||||||
|
playerMgr[currentPlayer]->WalkInDirection(Direction::SOUTH);
|
||||||
|
}
|
||||||
|
if (key[SDLK_a]) {
|
||||||
|
playerMgr[currentPlayer]->WalkInDirection(Direction::WEST);
|
||||||
|
}
|
||||||
|
if (key[SDLK_d]) {
|
||||||
|
playerMgr[currentPlayer]->WalkInDirection(Direction::EAST);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -32,6 +32,7 @@ protected:
|
|||||||
|
|
||||||
//utilities
|
//utilities
|
||||||
void NewPlayer(int index, std::string avatarName, int x, int y);
|
void NewPlayer(int index, std::string avatarName, int x, int y);
|
||||||
|
void SwitchToPlayer(int index);
|
||||||
|
|
||||||
//members
|
//members
|
||||||
Delta delta;
|
Delta delta;
|
||||||
|
|||||||
+34
-4
@@ -12,9 +12,20 @@ MainMenu::MainMenu() {
|
|||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
cout << "entering MainMenu" << endl;
|
cout << "entering MainMenu" << endl;
|
||||||
#endif
|
#endif
|
||||||
|
configUtil = GetSingletonPtr<ConfigUtility>();
|
||||||
|
surfaceMgr = GetSingletonPtr<SurfaceManager>();
|
||||||
|
|
||||||
|
surfaceMgr->Load("button", configUtil->String("interface") + "/button.bmp");
|
||||||
|
|
||||||
|
buttonMap["start"] = new Button(50, 50, surfaceMgr->Get("button"), surfaceMgr->Get("font"), "start");
|
||||||
|
buttonMap["options"] = new Button(50, 100, surfaceMgr->Get("button"), surfaceMgr->Get("font"), "options");
|
||||||
|
buttonMap["quit"] = new Button(50, 150, surfaceMgr->Get("button"), surfaceMgr->Get("font"), "quit");
|
||||||
}
|
}
|
||||||
|
|
||||||
MainMenu::~MainMenu() {
|
MainMenu::~MainMenu() {
|
||||||
|
for (auto it : buttonMap) {
|
||||||
|
delete it.second;
|
||||||
|
}
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
cout << "leaving MainMenu" << endl;
|
cout << "leaving MainMenu" << endl;
|
||||||
#endif
|
#endif
|
||||||
@@ -37,7 +48,9 @@ void MainMenu::Update() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void MainMenu::Render(SDL_Surface* const screen) {
|
void MainMenu::Render(SDL_Surface* const screen) {
|
||||||
//
|
for (auto it : buttonMap) {
|
||||||
|
it.second->DrawTo(screen);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//-------------------------
|
//-------------------------
|
||||||
@@ -45,15 +58,32 @@ void MainMenu::Render(SDL_Surface* const screen) {
|
|||||||
//-------------------------
|
//-------------------------
|
||||||
|
|
||||||
void MainMenu::MouseMotion(SDL_MouseMotionEvent const& motion) {
|
void MainMenu::MouseMotion(SDL_MouseMotionEvent const& motion) {
|
||||||
//
|
for (auto it : buttonMap) {
|
||||||
|
it.second->MouseMotion(motion);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainMenu::MouseButtonDown(SDL_MouseButtonEvent const& button) {
|
void MainMenu::MouseButtonDown(SDL_MouseButtonEvent const& button) {
|
||||||
//
|
for (auto it : buttonMap) {
|
||||||
|
it.second->MouseButtonDown(button);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainMenu::MouseButtonUp(SDL_MouseButtonEvent const& button) {
|
void MainMenu::MouseButtonUp(SDL_MouseButtonEvent const& button) {
|
||||||
//
|
if (buttonMap["start"]->MouseButtonUp(button) == Button::State::HOVER) {
|
||||||
|
//TODO
|
||||||
|
SetNextScene(SceneList::INGAME);
|
||||||
|
cout << "start" << endl;
|
||||||
|
}
|
||||||
|
if (buttonMap["options"]->MouseButtonUp(button) == Button::State::HOVER) {
|
||||||
|
//TODO
|
||||||
|
cout << "options" << endl;
|
||||||
|
}
|
||||||
|
if (buttonMap["quit"]->MouseButtonUp(button) == Button::State::HOVER) {
|
||||||
|
//TODO
|
||||||
|
SetNextScene(SceneList::QUIT);
|
||||||
|
cout << "quit" << endl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainMenu::KeyDown(SDL_KeyboardEvent const& key) {
|
void MainMenu::KeyDown(SDL_KeyboardEvent const& key) {
|
||||||
|
|||||||
+22
-3
@@ -3,25 +3,44 @@
|
|||||||
|
|
||||||
#include "base_scene.hpp"
|
#include "base_scene.hpp"
|
||||||
|
|
||||||
|
#include "singleton.hpp"
|
||||||
|
#include "config_utility.hpp"
|
||||||
|
#include "surface_manager.hpp"
|
||||||
|
|
||||||
|
#include "button.hpp"
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <map>
|
||||||
|
|
||||||
class MainMenu : public BaseScene {
|
class MainMenu : public BaseScene {
|
||||||
public:
|
public:
|
||||||
/* Public access members */
|
//Public access members
|
||||||
MainMenu();
|
MainMenu();
|
||||||
virtual ~MainMenu();
|
virtual ~MainMenu();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/* Frame loop */
|
//Frame loop
|
||||||
virtual void FrameStart();
|
virtual void FrameStart();
|
||||||
virtual void FrameEnd();
|
virtual void FrameEnd();
|
||||||
virtual void Update();
|
virtual void Update();
|
||||||
virtual void Render(SDL_Surface* const);
|
virtual void Render(SDL_Surface* const);
|
||||||
|
|
||||||
/* Event handlers */
|
//Event handlers
|
||||||
virtual void MouseMotion(SDL_MouseMotionEvent const&);
|
virtual void MouseMotion(SDL_MouseMotionEvent const&);
|
||||||
virtual void MouseButtonDown(SDL_MouseButtonEvent const&);
|
virtual void MouseButtonDown(SDL_MouseButtonEvent const&);
|
||||||
virtual void MouseButtonUp(SDL_MouseButtonEvent const&);
|
virtual void MouseButtonUp(SDL_MouseButtonEvent const&);
|
||||||
virtual void KeyDown(SDL_KeyboardEvent const&);
|
virtual void KeyDown(SDL_KeyboardEvent const&);
|
||||||
virtual void KeyUp(SDL_KeyboardEvent const&);
|
virtual void KeyUp(SDL_KeyboardEvent const&);
|
||||||
|
|
||||||
|
//utilities
|
||||||
|
typedef std::map<std::string, Button*> ButtonMap;
|
||||||
|
|
||||||
|
//singletons
|
||||||
|
ConfigUtility* configUtil;
|
||||||
|
SurfaceManager* surfaceMgr;
|
||||||
|
|
||||||
|
//members
|
||||||
|
ButtonMap buttonMap;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -1,8 +1,5 @@
|
|||||||
#include "scene_manager.hpp"
|
#include "scene_manager.hpp"
|
||||||
|
|
||||||
#include "singleton.hpp"
|
|
||||||
#include "config_utility.hpp"
|
|
||||||
|
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
|
|
||||||
//-------------------------
|
//-------------------------
|
||||||
@@ -39,19 +36,16 @@ void SceneManager::Init() {
|
|||||||
if (SDL_Init(SDL_INIT_VIDEO))
|
if (SDL_Init(SDL_INIT_VIDEO))
|
||||||
throw(std::runtime_error("Failed to initialize SDL"));
|
throw(std::runtime_error("Failed to initialize SDL"));
|
||||||
|
|
||||||
GetSingletonPtr<ConfigUtility>()->Load("rsc/config.cfg");
|
configUtil = GetSingletonPtr<ConfigUtility>();
|
||||||
|
|
||||||
|
configUtil->Load("rsc/config.cfg");
|
||||||
|
|
||||||
//set the screen from the config file
|
//set the screen from the config file
|
||||||
int flags = SDL_HWSURFACE|SDL_DOUBLEBUF;
|
int flags = SDL_HWSURFACE|SDL_DOUBLEBUF;
|
||||||
if (GetSingletonPtr<ConfigUtility>()->Boolean("screen.f")) {
|
if (configUtil->Boolean("screen.f")) {
|
||||||
flags |= SDL_FULLSCREEN;
|
flags |= SDL_FULLSCREEN;
|
||||||
}
|
}
|
||||||
BaseScene::SetScreen(
|
BaseScene::SetScreen(configUtil->Integer("screen.w"),configUtil->Integer("screen.h"),0,flags);
|
||||||
GetSingletonPtr<ConfigUtility>()->Integer("screen.w"),
|
|
||||||
GetSingletonPtr<ConfigUtility>()->Integer("screen.h"),
|
|
||||||
0,
|
|
||||||
flags
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SceneManager::Proc() {
|
void SceneManager::Proc() {
|
||||||
|
|||||||
@@ -4,11 +4,14 @@
|
|||||||
#include "scene_list.hpp"
|
#include "scene_list.hpp"
|
||||||
#include "base_scene.hpp"
|
#include "base_scene.hpp"
|
||||||
|
|
||||||
|
#include "singleton.hpp"
|
||||||
|
#include "config_utility.hpp"
|
||||||
|
|
||||||
#include "SDL/SDL.h"
|
#include "SDL/SDL.h"
|
||||||
|
|
||||||
class SceneManager {
|
class SceneManager {
|
||||||
public:
|
public:
|
||||||
/* Public access members */
|
//Public access members
|
||||||
SceneManager();
|
SceneManager();
|
||||||
~SceneManager();
|
~SceneManager();
|
||||||
|
|
||||||
@@ -17,11 +20,13 @@ public:
|
|||||||
void Quit();
|
void Quit();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/* Private access members */
|
//Private access members
|
||||||
void LoadScene(SceneList sceneIndex);
|
void LoadScene(SceneList sceneIndex);
|
||||||
void UnloadScene();
|
void UnloadScene();
|
||||||
|
|
||||||
BaseScene* activeScene;
|
BaseScene* activeScene;
|
||||||
|
|
||||||
|
ConfigUtility* configUtil;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
+6
-3
@@ -30,6 +30,8 @@ Splash::~Splash() {
|
|||||||
|
|
||||||
void Splash::RunFrame() {
|
void Splash::RunFrame() {
|
||||||
//skip any event handling here
|
//skip any event handling here
|
||||||
|
SDL_Event event;
|
||||||
|
while(SDL_PollEvent(&event));
|
||||||
|
|
||||||
//draw the logo in the middle of the screen
|
//draw the logo in the middle of the screen
|
||||||
int x = (GetScreen()->w - logo->GetClipW()) / 2;
|
int x = (GetScreen()->w - logo->GetClipW()) / 2;
|
||||||
@@ -40,15 +42,16 @@ void Splash::RunFrame() {
|
|||||||
|
|
||||||
if (!loaded) {
|
if (!loaded) {
|
||||||
LoadResources();
|
LoadResources();
|
||||||
|
loaded = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (clock() - start > CLOCKS_PER_SEC*3) {
|
if (clock() - start > CLOCKS_PER_SEC*3) {
|
||||||
SetNextScene(SceneList::INGAME);
|
SetNextScene(SceneList::MAINMENU);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Splash::LoadResources() {
|
void Splash::LoadResources() {
|
||||||
//load the resources during the splash screen
|
//load the global resources here
|
||||||
|
surfaceMgr->Load("font", configUtil->String("fonts") + "/pokemon_dark_font.bmp");
|
||||||
//TODO
|
//TODO
|
||||||
loaded = true;
|
|
||||||
}
|
}
|
||||||
@@ -10,6 +10,7 @@ fonts = rsc/graphics/fonts
|
|||||||
logos = rsc/graphics/logos
|
logos = rsc/graphics/logos
|
||||||
sprites = rsc/graphics/sprites
|
sprites = rsc/graphics/sprites
|
||||||
tilesets = rsc/graphics/tilesets
|
tilesets = rsc/graphics/tilesets
|
||||||
|
interface = rsc/graphics/interface
|
||||||
|
|
||||||
#debugging
|
#debugging
|
||||||
debug = true
|
debug = true
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 88 KiB |
Reference in New Issue
Block a user