Folded sdlrenderer code into Game(), since we'll be doing rendering on a per-state basis

This commit is contained in:
2011-06-27 22:35:52 -04:00
parent 5522cbc64c
commit 2bddf92001
7 changed files with 97 additions and 84 deletions

View File

@ -1,13 +1,22 @@
#include "game.h"
#include "mathutils.h"
#include "drawutils.h"
#include "debug.h"
#include <SDL.h>
int Game::NODE_RADIUS = 12;
Game::Game(SDL_Surface* display)
: GameState(display)
{
background = NULL;
}
Game::~Game()
{
renderer.cleanup();
SDL_FreeSurface(background);
}
@ -16,13 +25,71 @@ void Game::execute(stack<GameState*> &state_stack) throw(StateExit)
SDL_Event event;
while(SDL_PollEvent(&event))
handle_event(&event);
renderer.render(data);
render();
}
bool Game::init()
{
return renderer.init();
background = DrawUtils::load("background.bmp");
if (background == NULL)
{
#ifdef DEBUG
std::cerr << "debug: Game::init(): error: Couldn't load background image\n";
#endif
return false;
}
return true;
}
void Game::render()
{
int range = data.get_range();
int range_colour = 0x888888;
switch(data.get_mode())
{
case MODE_MOVE:
range_colour = 0x0000ff;
break;
case MODE_ATTACK:
range_colour = 0xff0000;
break;
}
// Background image first
DrawUtils::draw(display, background, 0, 0);
list<Vertex*> vertices = data.get_vertices();
// Now paint on the targeting circle
if (data.get_current_vertex() != NULL)
{
Vertex* v = data.get_current_vertex();
DrawUtils::draw_circle_filled(display, v->x, v->y, range,
range_colour);
}
// Now paint each vertex, and any edges that it needs
for (list<Vertex*>::iterator cursor = vertices.begin();
cursor != vertices.end(); cursor++)
{
Vertex* v = *cursor;
DrawUtils::draw_circle_filled(display, v->x, v->y, v->r,
v->colour);
for (list<Vertex*>::iterator subcursor = v->neighbors.begin();
subcursor != v->neighbors.end(); subcursor++)
{
Vertex* v1 = *subcursor;
DrawUtils::draw_line(display, v->x, v->y, v1->x, v1->y, 2,
v->colour);
}
}
SDL_Flip(display);
}