Show treeclient.cpp syntax highlighted
/***************************************************************************
tree.cpp - description
-------------------
begin : Fri Nov 15 2002
copyright : (C) 2002 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 <maptilepos.h>
#include <rules.h>
#include <tree.h>
#include <treeclient.h>
#include <worldclient.h>
#include <worldpos.h>
#include <ClanLib/display.h>
CL_Sprite* TreeClient::deadSprite[4] = {0, 0, 0, 0};
CL_Sprite* TreeClient::normalSprite[4] = {0, 0, 0, 0};
CL_Sprite* TreeClient::burningSprite[4] = {0, 0, 0, 0};
TreeClient::TreeClient(WorldClient* w, const Identity& ident, CL_NetPacket &p,
int reason):
EntityClient(ident),
sprite(0) {
onFullUpdate(w, p);
}
TreeClient::~TreeClient() {
delete sprite;
}
WorldPos TreeClient::getPos() const {
return pos + MapTilePos(0.5f, 0.5f);
}
bool TreeClient::drawUpdate(const WorldClient* w, unsigned int d) {
sprite->update(d / 1000.0f);
return true;
}
void TreeClient::draw(const WorldClient* w) const {
CL_Point gp = w->getMap()->findPos(getPos());
sprite->draw(gp.x, gp.y);
}
void TreeClient::displayRotationChange(WorldClient* w, const Rotation& r) {
setSpriteState(w);
}
void TreeClient::onFullUpdate(WorldClient* w, CL_NetPacket& p) {
pos = MapPos::extract(p.input);
strength = p.input.read_float32();
state = p.input.read_int32();
setSpriteState(w);
}
void TreeClient::onMessage(WorldClient* w, int m, CL_NetPacket& p) {
if (m == Tree::Message::STRENGTH) onStrength(p);
if (m == Tree::Message::STATE) onState(w, p);
}
void TreeClient::onStrength(CL_NetPacket& p) {
strength = p.input.read_float32();
}
void TreeClient::onState(WorldClient* w, CL_NetPacket& p) {
state = p.input.read_int32();
setSpriteState(w);
}
void TreeClient::setSpriteState(const WorldClient* w) {
if (state == Tree::State::BURNING) {
int frame = sprite->get_current_frame();
delete sprite;
sprite = new CL_Sprite(*burningSprite[
w->getDisplayRotation().getClock()]);
sprite->set_frame(frame);
} else if (state == Tree::State::DEAD) {
delete sprite;
sprite = new CL_Sprite(*deadSprite[
w->getDisplayRotation().getClock()]);
} else {
delete sprite;
sprite = new CL_Sprite(*normalSprite[
w->getDisplayRotation().getClock()]);
}
}
void TreeClient::loadSprites(Rules* r) {
deadSprite[0] = new CL_Sprite("entities/trees/" + r->theater
+ "/1/dead/dir0", app.getResources());
deadSprite[1] = new CL_Sprite("entities/trees/" + r->theater
+ "/1/dead/dir1", app.getResources());
deadSprite[2] = new CL_Sprite("entities/trees/" + r->theater
+ "/1/dead/dir2", app.getResources());
deadSprite[3] = new CL_Sprite("entities/trees/" + r->theater
+ "/1/dead/dir3", app.getResources());
normalSprite[0] = new CL_Sprite("entities/trees/" + r->theater
+ "/1/normal/dir0", app.getResources());
normalSprite[1] = new CL_Sprite("entities/trees/" + r->theater
+ "/1/normal/dir1", app.getResources());
normalSprite[2] = new CL_Sprite("entities/trees/" + r->theater
+ "/1/normal/dir2", app.getResources());
normalSprite[3] = new CL_Sprite("entities/trees/" + r->theater
+ "/1/normal/dir3", app.getResources());
burningSprite[0] = new CL_Sprite("entities/trees/" + r->theater
+ "/1/burning/dir0", app.getResources());
burningSprite[1] = new CL_Sprite("entities/trees/" + r->theater
+ "/1/burning/dir1", app.getResources());
burningSprite[2] = new CL_Sprite("entities/trees/" + r->theater
+ "/1/burning/dir2", app.getResources());
burningSprite[3] = new CL_Sprite("entities/trees/" + r->theater
+ "/1/burning/dir3", app.getResources());
}
void TreeClient::freeSprites() {
for (int i = 0; i < 4; i++) {
delete deadSprite[i];
delete normalSprite[i];
delete burningSprite[i];
}
}
See more files for this project here