Added rudimentary menu buttons, not yet connected to anything... it feels a bit hackish, to be honest, but I don't think we'll ever have too many to worry about, and if so, we can think about refactoring then
This commit is contained in:
parent
c1ea399448
commit
d04cde49c8
1
Makefile
1
Makefile
|
@ -8,6 +8,7 @@ OBJECTS=\
|
|||
main.o \
|
||||
drawutils.o mathutils.o timer.o itos.o \
|
||||
graph.o gamedata.o player.o \
|
||||
menubutton.o \
|
||||
mainevent.o gamestate.o game.o titlescreen.o
|
||||
|
||||
all: $(PROJECT)
|
||||
|
|
43
game.cpp
43
game.cpp
|
@ -41,6 +41,13 @@ bool Game::init()
|
|||
return false;
|
||||
}
|
||||
|
||||
move_button = MenuButton("Move", font, 155, display->h - 95, BUTTON_MOVE);
|
||||
attack_button = MenuButton("Attack", font, 260, display->h - 95,
|
||||
BUTTON_ATTACK);
|
||||
build_button = MenuButton("Build", font, 155, display->h - 50,
|
||||
BUTTON_BUILD);
|
||||
|
||||
|
||||
return GameState::init();
|
||||
}
|
||||
|
||||
|
@ -112,15 +119,43 @@ void Game::render()
|
|||
}
|
||||
|
||||
// draw the rest of the bottom menu
|
||||
|
||||
// horizontal line across the whole thing
|
||||
DrawUtils::draw_line(display, 0, display->h - 100,
|
||||
display->w, display->h - 100, 2, 0x000000);
|
||||
|
||||
// vertical line to separate info pane from button pane
|
||||
DrawUtils::draw_line(display, 150, display->h - 100, 150, display->h, 2,
|
||||
0x000000);
|
||||
|
||||
if (data.get_current_vertex() != NULL)
|
||||
{
|
||||
draw_button(&move_button);
|
||||
draw_button(&build_button);
|
||||
draw_button(&attack_button);
|
||||
}
|
||||
|
||||
SDL_Flip(display);
|
||||
}
|
||||
|
||||
|
||||
void Game::draw_button(MenuButton* button)
|
||||
{
|
||||
int colour = 0x000000;
|
||||
ButtonAction action = button->get_action();
|
||||
Mode mode = data.get_mode();
|
||||
|
||||
// fixme - there's really got to be a better way...
|
||||
if ((action == BUTTON_BUILD && mode == MODE_BUILD) ||
|
||||
(action == BUTTON_ATTACK && mode == MODE_ATTACK) ||
|
||||
(action == BUTTON_MOVE && mode == MODE_MOVE))
|
||||
colour = 0x0000ff;
|
||||
else if (button->is_at(cursor_x, cursor_y)) colour = 0xff0000;
|
||||
|
||||
button->draw(display, colour);
|
||||
}
|
||||
|
||||
|
||||
void Game::draw_stats(Vertex* v)
|
||||
{
|
||||
int num_lines = 4;
|
||||
|
@ -171,6 +206,14 @@ void Game::on_key_down(SDLKey sym, SDLMod mod, Uint16 unicode)
|
|||
#endif
|
||||
}
|
||||
|
||||
|
||||
void Game::on_mouse_move(int mX, int mY, int relX, int relY, bool left, bool right, bool middle)
|
||||
{
|
||||
cursor_x = mX;
|
||||
cursor_y = mY;
|
||||
}
|
||||
|
||||
|
||||
#ifdef DEBUG
|
||||
void Game::print_debug_info()
|
||||
{
|
||||
|
|
16
game.h
16
game.h
|
@ -9,6 +9,7 @@
|
|||
|
||||
#include "gamedata.h"
|
||||
#include "gamestate.h"
|
||||
#include "menubutton.h"
|
||||
#include <stack>
|
||||
#include <SDL_ttf.h>
|
||||
|
||||
|
@ -31,19 +32,30 @@ class Game : public GameState
|
|||
void on_lbutton_down(int x, int y);
|
||||
void on_rbutton_down(int mX, int mY);
|
||||
void on_key_down(SDLKey sym, SDLMod mod, Uint16 unicode);
|
||||
void on_mouse_move(int mX, int mY, int relX, int relY, bool left,
|
||||
bool right, bool middle);
|
||||
|
||||
private:
|
||||
void draw_stats(Vertex* v);
|
||||
void draw_button(MenuButton* button);
|
||||
|
||||
// data
|
||||
GameData data;
|
||||
|
||||
static int NODE_RADIUS;
|
||||
// the x,y position of the mouse cursor
|
||||
int cursor_x;
|
||||
int cursor_y;
|
||||
|
||||
// surfaces containing textures to draw
|
||||
SDL_Surface* background;
|
||||
TTF_Font* font;
|
||||
|
||||
// menu buttons
|
||||
MenuButton move_button;
|
||||
MenuButton build_button;
|
||||
MenuButton attack_button;
|
||||
|
||||
static int NODE_RADIUS;
|
||||
|
||||
#ifdef DEBUG
|
||||
void print_debug_info();
|
||||
#endif
|
||||
|
|
39
menubutton.cpp
Normal file
39
menubutton.cpp
Normal file
|
@ -0,0 +1,39 @@
|
|||
#include "menubutton.h"
|
||||
#include "drawutils.h"
|
||||
|
||||
|
||||
MenuButton::MenuButton(string text, TTF_Font* font, int x, int y,
|
||||
ButtonAction action)
|
||||
{
|
||||
this->text = text;
|
||||
this->x = x;
|
||||
this->y = y;
|
||||
this->font = font;
|
||||
this->action = action;
|
||||
|
||||
hover = false;
|
||||
}
|
||||
|
||||
|
||||
void MenuButton::set_hover(bool is_hovering)
|
||||
{
|
||||
hover = is_hovering;
|
||||
}
|
||||
|
||||
|
||||
void MenuButton::draw(SDL_Surface* display, int colour, int background_colour)
|
||||
{
|
||||
SDL_Rect pen = {x, y, 100, 40};
|
||||
|
||||
SDL_FillRect(display, &pen, background_colour);
|
||||
|
||||
int temp_colour = 0x000000;
|
||||
|
||||
DrawUtils::draw_text(display, text, x + 50, y + 20, font, colour, 1, 1);
|
||||
}
|
||||
|
||||
|
||||
bool MenuButton::is_at(int test_x, int test_y)
|
||||
{
|
||||
return test_x >= x && test_y >= y && test_x <= x + 100 && test_y <= y + 40;
|
||||
}
|
47
menubutton.h
Normal file
47
menubutton.h
Normal file
|
@ -0,0 +1,47 @@
|
|||
/* A clickable button widget
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _MENUBUTTON_H_
|
||||
#define _MENUBUTTON_H_
|
||||
|
||||
#include <SDL.h>
|
||||
#include <SDL_ttf.h>
|
||||
#include <string>
|
||||
|
||||
using std::string;
|
||||
|
||||
// fixme: there's probably a better way to do this, but SDL's event model
|
||||
// has me hard-pressed to figure out what it is.
|
||||
enum ButtonAction {BUTTON_BUILD, BUTTON_ATTACK, BUTTON_MOVE,
|
||||
BUTTON_BUILD_ATTACKER, BUTTON_BUILD_DEFENDER,
|
||||
BUTTON_BUILD_PRODUCER};
|
||||
|
||||
class MenuButton
|
||||
{
|
||||
public:
|
||||
MenuButton(string text = "", TTF_Font* font = NULL, int x = 0, int y = 0,
|
||||
ButtonAction action = BUTTON_BUILD);
|
||||
|
||||
// Selectable buttons change colour for the duration they are selected,
|
||||
// and should ignore clicks while selected
|
||||
void set_hover(bool is_hovering);
|
||||
void draw(SDL_Surface* display, int colour = 0x000000,
|
||||
int background_colour = 0x888888);
|
||||
|
||||
bool is_at(int test_x, int test_y);
|
||||
ButtonAction get_action() const { return action; }
|
||||
|
||||
private:
|
||||
string text;
|
||||
int x;
|
||||
int y;
|
||||
|
||||
bool hover;
|
||||
|
||||
TTF_Font* font;
|
||||
|
||||
ButtonAction action;
|
||||
};
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user