src/GameState.cc
author terom
Mon, 22 Dec 2008 02:36:57 +0000
changeset 385 e56af22c04dd
parent 282 e0e4dfc3e528
child 393 5dd4d782cf3a
permissions -rw-r--r--
better error reporting of NetworkSocket bind/connect failures

#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)
{ 

}

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);
}

void GameState::removePlayer (Player *player) { 
    if (player == local_player)
        local_player = NULL;

    player_list.remove(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);
    }
}