src/GameState.cc
author terom
Sun, 07 Dec 2008 21:10:04 +0000
changeset 263 8c999cf4c182
parent 257 549783d71e51
child 266 ad72d0a0cc02
permissions -rw-r--r--
weapon projectile radiuses and fix network play (local_player == NULL, Rope releasing upon being hit

#include "GameState.hh"
#include "Engine.hh"
#include "Config.hh"

GameState::GameState (void) : 
    local_player(NULL), world(Vector(0, MAP_GRAVITY), Vector(MAP_WIDTH, MAP_HEIGHT)) 
{ 

}

void GameState::addProjectile (Projectile *projectile) {
    projectiles.push_back(projectile);
}

LocalPlayer *GameState::getLocalPlayer (void) {
    return local_player;
}

void GameState::newLocalPlayer (LocalPlayer *player) {
    if (local_player)
        throw std::logic_error("newLocalPlayer called even though we already have a local player");
    
    newPlayer(player);
    
    local_player = player;
}
    
void GameState::newPlayer (Player *player) {
    player_list.push_back(player);
}

void GameState::removePlayer (Player *player) { 
    player_list.remove(player);
}
    
void GameState::draw(Graphics *g, bool displayWeapon) {
    PixelCoordinate camera(0, 0);

    if (local_player)
        camera = local_player->getCoordinate() - world.getDimensions() / 2;

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