terom@185: terom@185: #include "GameState.hh" terom@185: #include "Engine.hh" terom@185: #include "Config.hh" terom@185: terom@408: GameState::GameState (Terrain &terrain) : terom@408: world(Vector(0, MAP_GRAVITY), Vector(terrain.getWidth(), terrain.getHeight()), terrain), terom@408: terrain(terrain), terom@408: local_player(NULL), event_handler(NULL) terom@255: { terom@255: terom@255: } terom@393: terom@393: void GameState::setEventHandler (GameStateEventHandler *handler) { terom@393: if (handler && event_handler != NULL) terom@393: throw Error("event_handler already set"); terom@393: terom@393: event_handler = handler; terom@393: } saiam@199: ekku@222: void GameState::addProjectile (Projectile *projectile) { ekku@222: projectiles.push_back(projectile); ekku@222: } ekku@222: saiam@199: LocalPlayer *GameState::getLocalPlayer (void) { saiam@199: return local_player; terom@185: } terom@185: terom@274: void GameState::setLocalPlayer (LocalPlayer *player) { saiam@199: if (local_player) saiam@199: throw std::logic_error("newLocalPlayer called even though we already have a local player"); saiam@199: saiam@199: local_player = player; saiam@199: } terom@200: terom@274: void GameState::addPlayer (Player *player) { saiam@199: player_list.push_back(player); terom@393: terom@393: if (event_handler) terom@393: event_handler->on_player_joined(player); saiam@199: } terom@185: saiam@199: void GameState::removePlayer (Player *player) { terom@274: if (player == local_player) terom@274: local_player = NULL; terom@274: saiam@199: player_list.remove(player); terom@393: terom@393: if (event_handler) terom@393: event_handler->on_player_left(player); saiam@199: } ekku@222: terom@412: void GameState::draw (graphics::Display &display, PixelCoordinate camera, bool displayWeapon) { terom@408: // Draw terrain terom@412: terrain.draw(display, camera); terom@185: ekku@222: // Draw players ekku@222: for (std::list::iterator it = player_list.begin(); it != player_list.end(); it++) { terom@233: Player *p = *it; terom@233: terom@233: // our LocalPlayer has it's own draw method terom@233: if (p == local_player) terom@412: local_player->draw(display, displayWeapon, camera); terom@233: else terom@412: p->draw(display, camera); ekku@222: } terom@233: ekku@222: // Draw projectiles ekku@222: for (std::list::iterator it = projectiles.begin(); it != projectiles.end(); it++) { terom@412: (*it)->draw(display, camera); ekku@225: } ekku@222: } ekku@222: