Hosting courtesy of Sourceforge

SourceForge Logo
Main Page   Namespace List   Class Hierarchy   Compound List   File List   Namespace Members   Compound Members   File Members  

Flame.cpp

Go to the documentation of this file.
00001 //
00002 //                                 Flame.cpp
00003 //                             -------------------
00004 //    begin                : Fri Feb 22 2002
00005 //    copyright            : (C) 2002 by Rob Renaud
00006 //    email                : rrenaud@eden.rutgers.edu
00007 //
00008 //   This program is free software; you can redistribute it and/or modify
00009 //   it under the terms of the GNU General Public License as published by
00010 //   the Free Software Foundation; either version 2 of the License, or
00011 //   (at your option) any later version.
00012 //
00013 
00014 #include "Flame.h"
00015 
00016 using namespace Game;
00017 
00018 FlameImageManager* FlameImageManager::instance = NULL;
00019 
00020 Flame::Flame() :
00021 maxSparkDuration(0),
00022 sparkList()
00023 {       
00024 
00025 }
00026 
00027 Flame::~Flame() {
00028         Util::freeDynamicContainer(sparkList);
00029 }
00030 
00031 bool Flame::isOnFire() {
00032         return maxSparkDuration > 0;
00033 }
00034 
00035 void Flame::drawAt(SDL_Surface* surf, SDL_Rect* loc) {
00036         if (maxSparkDuration > 0)  {
00037                 // iterate through list and draw each spark, whilst decreasing the duration of each
00038                 maxSparkDuration--;
00039                 for (std::list<Spark*>::iterator i = sparkList.begin(); i != sparkList.end(); i++) {
00040                         FlameImageManager::getInstance()->getImage((*i)->spark)->drawAt(surf, loc);
00041                         (*i)->duration--;
00042                         if ((*i)->duration <= 0) {
00043                                 delete *i;
00044                                 if (Util::safeIteratorRemove<Spark*>(sparkList, i) == Util::LIST_END) break;
00045                         }
00046                 }
00047         }
00048 }
00049 
00050 void Flame::addSpark(FlameType spark, int duration) {
00051         if (duration > maxSparkDuration) {
00052                 maxSparkDuration = duration;
00053         }
00054         sparkList.push_back(new Spark(spark, duration));
00055 }               
00056         
00057 Flame::Spark::Spark(FlameType f, int dur) :
00058 spark(f),
00059 duration(dur)
00060 { }
00061 
00062 FlameImageManager::FlameImageManager() {
00063         typedef Graphics::SingleFrameImage SFI;
00064     flames.resize(7);
00065 
00066 
00067         flames[FLAME_HORIZ_CONNECTOR]   = new SFI("GameData/Flame/uglyHorizFlameConnector.bmp");
00068         flames[FLAME_VERT_CONNECTOR]    = new SFI("GameData/Flame/uglyVertFlameConnector.bmp");
00069         flames[FLAME_MIDDLE_CONNECTOR]  = new SFI("GameData/Flame/uglyMiddleFlameConnector.bmp");
00070         flames[FLAME_LEFT_END]                  = new SFI("GameData/Flame/uglyHorizFlameLeftEnd.bmp");
00071         flames[FLAME_RIGHT_END]                 = new SFI("GameData/Flame/uglyHorizFlameRightEnd.bmp");
00072         flames[FLAME_DOWN_END]                  = new SFI("GameData/Flame/uglyVertFlameDownEnd.bmp");
00073         flames[FLAME_UP_END]                    = new SFI("GameData/Flame/uglyVertFlameUpEnd.bmp");
00074 
00075         for (size_t j = 0; j < 7; j++) {
00076 //              flames[j] = new Graphics::SingleFrameImage("GameData/Flame/flame2.bmp");
00077                 flames[j]->setTransparency(SDL_SRCCOLORKEY);
00078         }
00079 }
00080 
00081 Graphics::DrawableAt* FlameImageManager::getImage(FlameType t) {
00082         return flames[t];
00083 }
00084 
00085 FlameImageManager::~FlameImageManager() {
00086         Util::freeDynamicContainer(flames);
00087 }
00088 
00089 FlameImageManager* FlameImageManager::getInstance() {
00090         if (instance == NULL) {
00091                 instance = new FlameImageManager();
00092         }
00093         return instance;
00094 }
00095 
00096 void FlameImageManager::destroy() {
00097         delete instance;
00098         instance = NULL;
00099 }

Generated on Tue May 21 07:26:51 2002 for BomberLAN by doxygen1.2.12 written by Dimitri van Heesch, © 1997-2001