Code Search for Developers
 
 
  

firecolumnclient.cpp from FreePop at Krugle


Show firecolumnclient.cpp syntax highlighted

/***************************************************************************
                           firecolumnclient.cpp
                           -------------------
    begin                : Mon Jun 14 2004
    copyright            : (C) 2004 by Brendon Higgins
    email                : freepop-devel@lists.sourceforge.net
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 ***************************************************************************/

#include <client.h>
#include <entity.h>
#include <firecolumn.h>
#include <firecolumnclient.h>
#include <maptilepos.h>
#include <worldpos.h>
#include <worldclient.h>

#include <ClanLib/display.h>

/**
 * Class used to display the firecolumn ending animation.
 */
class FireColumnEndSprite: public Paintable {
private:
    /**
     * Our position.
     */
    WorldPos pos;

    /**
     * Our sprite.
     */
    CL_Sprite* sprite;

public:
    /**
     * Constructor.
     */
    FireColumnEndSprite(WorldClient* w, const WorldPos& p);

    /**
     * Destructor.
     */
    virtual ~FireColumnEndSprite();
    
    virtual bool drawUpdate(const WorldClient* w, unsigned int d);
    virtual void draw(const WorldClient* w) const;
    virtual int drawSortIndex(const WorldClient* w) const;
};


CL_Sprite* FireColumnClient::fireSpriteCache = 0;
CL_Sprite* FireColumnClient::fireSpriteBeginCache = 0;
CL_Sprite* FireColumnClient::fireSpriteEndCache = 0;
    
FireColumnClient::FireColumnClient(WorldClient* w, const Identity& ident,
                                   CL_NetPacket &p, int reason):
    EntityClient(ident),
    fireSprite(0) {
    onFullUpdate(w, p);
    if (reason != Entity::Create::NO_REASON) {
        fireSprite = new CL_Sprite(*fireSpriteCache);
    } else {
        fireSprite = new CL_Sprite(*fireSpriteBeginCache);
    }
}

FireColumnClient::~FireColumnClient() {
    delete fireSprite;
}

WorldPos FireColumnClient::getPos() const {
    return pos;
}

void FireColumnClient::draw(const WorldClient* w) const {
    CL_Point gp = w->getMap()->findPos(pos);
    fireSprite->draw(gp.x, gp.y);
}

bool FireColumnClient::drawUpdate(const WorldClient* w, unsigned int d) {
    fireSprite->update(d / 1000.0f);
    if (fireSprite->is_finished()) {
        delete fireSprite;
        fireSprite = new CL_Sprite(*fireSpriteCache);
    }
    return true;
}

void FireColumnClient::predict(const WorldClient* w, unsigned int d) {
    pos += direction * d / 1000;
}

void FireColumnClient::onFullUpdate(WorldClient* w, CL_NetPacket& p) {
    pos = WorldPos::extract(p.input);
    direction = WorldPos::extract(p.input);
}

void FireColumnClient::onDestroy(WorldClient* w, int reason) {
    if (reason == FireColumn::Destroy::FIZZLE) {
        // Paintable hands its this pointer to the client,
        // and it'll delete itself once it's done.
        new FireColumnEndSprite(w, pos);
    }
}

void FireColumnClient::loadSprites() {
    fireSpriteCache = new CL_Sprite("effects/firecolumn/normal", app.getResources());
    fireSpriteBeginCache = new CL_Sprite("effects/firecolumn/begin", app.getResources());
    fireSpriteEndCache = new CL_Sprite("effects/firecolumn/end", app.getResources());
}

void FireColumnClient::freeSprites() {
    delete fireSpriteCache;
    delete fireSpriteBeginCache;
    delete fireSpriteEndCache;
}


FireColumnEndSprite::FireColumnEndSprite(WorldClient* w, const WorldPos& p):
    pos(p),
    sprite(new CL_Sprite(*FireColumnClient::fireSpriteEndCache)) {
    w->paintablesAdd(this);
}

FireColumnEndSprite::~FireColumnEndSprite() {
}

bool FireColumnEndSprite::drawUpdate(const WorldClient* w, unsigned int d) {
    sprite->update(d / 1000.0f);
    if (sprite->is_finished()) {
        return false;
    }
    return true;
}

void FireColumnEndSprite::draw(const WorldClient* w) const {
    CL_Point gp = w->getMap()->findPos(pos);
    sprite->draw(gp.x, gp.y);
}

int FireColumnEndSprite::drawSortIndex(const WorldClient* w) const {
    return w->getMap()->findPos(pos).y;
}




See more files for this project here

FreePop

FreePop is a multi-platform tile-based game based on the great old game Populous 2 by Bullfrog Productions Ltd., but much improved.

Project homepage: http://sourceforge.net/projects/freepop
Programming language(s): C++
License: other

  Makefile.am
  client.cpp
  client.h
  clientmisc.cpp
  clientmisc.h
  clientstate.cpp
  clientstate.h
  connectstate.cpp
  connectstate.h
  cropsclient.cpp
  cropsclient.h
  entityclient.cpp
  entityclient.h
  entityclientfactory.cpp
  entityclientfactory.h
  firecolumnclient.cpp
  firecolumnclient.h
  gamestate.cpp
  gamestate.h
  loadstate.cpp
  loadstate.h
  mapclient.cpp
  mapclient.h
  maptileclient.cpp
  maptileclient.h
  messagebox.cpp
  messagebox.h
  oversprite.cpp
  oversprite.h
  paintable.cpp
  paintable.h
  pausefader.cpp
  pausefader.h
  peepclient.cpp
  peepclient.h
  peepmagnetclient.cpp
  peepmagnetclient.h
  playerclient.cpp
  playerclient.h
  playeroptionsdialog.cpp
  playeroptionsdialog.h
  rockclient.cpp
  rockclient.h
  swampclient.cpp
  swampclient.h
  townclient.cpp
  townclient.h
  treeclient.cpp
  treeclient.h
  worldclient.cpp
  worldclient.h