#include "GameState.hh"
#include "Engine.hh"
#include "Config.hh"
GameState::GameState (void) :
world(Vector(0, MAP_GRAVITY), Vector(MAP_WIDTH, MAP_HEIGHT)), local_player(NULL), event_handler(NULL)
{
}
void GameState::setEventHandler (GameStateEventHandler *handler) {
if (handler && event_handler != NULL)
throw Error("event_handler already set");
event_handler = handler;
}
void GameState::addProjectile (Projectile *projectile) {
projectiles.push_back(projectile);
}
LocalPlayer *GameState::getLocalPlayer (void) {
return local_player;
}
void GameState::setLocalPlayer (LocalPlayer *player) {
if (local_player)
throw std::logic_error("newLocalPlayer called even though we already have a local player");
local_player = player;
}
void GameState::addPlayer (Player *player) {
player_list.push_back(player);
if (event_handler)
event_handler->on_player_joined(player);
}
void GameState::removePlayer (Player *player) {
if (player == local_player)
local_player = NULL;
player_list.remove(player);
if (event_handler)
event_handler->on_player_left(player);
}
void GameState::draw(Graphics *g, PixelCoordinate camera, bool displayWeapon) {
// Draw world/terrain
world.draw(g, camera);
// Draw players
for (std::list<Player*>::iterator it = player_list.begin(); it != player_list.end(); it++) {
Player *p = *it;
// our LocalPlayer has it's own draw method
if (p == local_player)
local_player->draw(g, displayWeapon, camera);
else
p->draw(g, camera);
}
// Draw projectiles
for (std::list<Projectile*>::iterator it = projectiles.begin(); it != projectiles.end(); it++) {
(*it)->draw(g, camera);
}
}