C:/Documents and Settings/mtauraso/Desktop/proj3/projectX/ShowOneSprite.cpp

Go to the documentation of this file.
00001 #include "ShowOneSprite.h"
00002 
00003 using namespace std;
00004 
00005 ShowOneSprite::ShowOneSprite( std::string filename, List *spriteInfo )
00006 :_index(0)
00007 {
00008         _filename = filename;
00009 
00010         while(!spriteInfo->empty()) {
00011                 List *nextSprite = spriteInfo->firstList();
00012 
00013                 if(nextSprite->firstString() == "sprite") {
00014                         List *spriteParams = nextSprite->rest();
00015                         Sprite *sprite;
00016 
00017                         while(!spriteParams->empty()) {
00018                                 if(spriteParams->firstList()->firstString() == "filename") {
00019                                         sprite = Sprite::loadSprite(spriteParams->firstList()->rest()->firstString());
00020                                 }
00021                                 spriteParams = spriteParams->rest();
00022                         }
00023 
00024                         _sprites.push_back(sprite);
00025                 }
00026 
00027                 spriteInfo = spriteInfo->rest();
00028         }
00029 
00030         if(_sprites.size() > 0) {
00031                 _rect = _sprites[0]->rect();
00032                 for(size_t i = 1; i < _sprites.size(); i++) {
00033                         if(_sprites[i]->rect().h != _rect.h || _sprites[i]->rect().w != _rect.w) {
00034                                 cerr << "Showone sprite not of consistent size: " << _sprites[i]->filename()
00035                                         << " conflicts in " << _filename << endl;
00036                         }
00037                 }
00038         }
00039         else {
00040                 cerr << "Malformed showone sprite file: " << _filename << endl;
00041         }
00042 }
00043 
00044 ShowOneSprite::~ShowOneSprite()
00045 {
00046         for(size_t i = 0; i < _createdSprites.size(); i++)
00047                 delete _createdSprites[i];
00048 }
00049 
00050 ShowOneSprite::ShowOneSprite(ShowOneSprite *sprite)
00051 :Sprite(sprite),_index(0)
00052 {
00053         _sprites = sprite->_sprites;
00054 }
00055 
00056 void ShowOneSprite::draw(int x, int y, bool origin)
00057 {
00058         xDirection tempDir = _sprites[_index]->getDirection();
00059         SDL_Rect tempRect = _sprites[ _index ]->rect();
00060         _sprites[_index]->setDirection(_direction);
00061         _sprites[_index]->setRect( _rect );
00062         _sprites[_index]->draw(x, y, origin);
00063         _sprites[_index]->setDirection(tempDir);
00064         _sprites[_index]->setRect( tempRect );
00065 }
00066 
00067 Sprite *ShowOneSprite::instance()
00068 {
00069         Sprite *sprite = new ShowOneSprite(this);
00070         _createdSprites.push_back(sprite);
00071         return sprite;
00072 }
00073 
00074 void ShowOneSprite::reset()
00075 {
00076         for(size_t i = 0; i < _sprites.size(); i++)
00077                 _sprites[i]->reset();
00078 }

Generated on Sat Apr 22 15:05:20 2006 for ProjectX by  doxygen 1.4.6-NO