[Super-tux-commit] supertux/src badguy.cpp,1.77,1.78 badguy.h,1.40,1.41
Brought to you by:
wkendrick
From: Ricardo C. <rm...@us...> - 2004-05-17 09:12:18
|
Update of /cvsroot/super-tux/supertux/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv411/src Modified Files: badguy.cpp badguy.h Log Message: Added a skelaton for the config bad guys code. Just a rip from the Ingo's tiles code. Index: badguy.h =================================================================== RCS file: /cvsroot/super-tux/supertux/src/badguy.h,v retrieving revision 1.40 retrieving revision 1.41 diff -u -d -r1.40 -r1.41 --- badguy.h 13 May 2004 12:44:35 -0000 1.40 +++ badguy.h 17 May 2004 09:11:58 -0000 1.41 @@ -179,6 +179,36 @@ : kind(BAD_SNOWBALL), x(0), y(0), stay_on_platform(false) {} }; +class BadGuyManager +{ + private: + BadGuyManager(); + ~BadGuyManager(); + + std::vector<BadGuy*> badguys; + static BadGuyManager* instance_ ; + + void load_badguys(std::string filename); + + public: + static BadGuyManager* instance() { return instance_ ? instance_ : instance_ = new BadGuyManager(); } + static void destroy_instance() { delete instance_; instance_ = 0; } + + BadGuy* get(unsigned int id) { + if(id < badguys.size()) + { + return badguys[id]; + } + else + { + // Never return 0, but return the 0th tile instead so that + // user code doesn't have to check for NULL pointers all over + // the place + return badguys[0]; + } + } +}; + #endif /*SUPERTUX_BADGUY_H*/ /* Local Variables: */ Index: badguy.cpp =================================================================== RCS file: /cvsroot/super-tux/supertux/src/badguy.cpp,v retrieving revision 1.77 retrieving revision 1.78 diff -u -d -r1.77 -r1.78 --- badguy.cpp 17 May 2004 06:26:41 -0000 1.77 +++ badguy.cpp 17 May 2004 09:11:58 -0000 1.78 @@ -1196,4 +1196,136 @@ { } +//--------------------------------------------------------------------------- + +BadGuyManager::BadGuyManager() +{ + std::string filename = datadir + "/images/tilesets/supertux.stbg"; + load_badguys(filename); +} + +BadGuyManager::~BadGuyManager() +{ + for(std::vector<BadGuy*>::iterator i = badguys.begin(); i != badguys.end(); ++i) { + delete *i; + } +} + +void BadGuyManager::load_badguys(std::string filename) +{ +/* + lisp_object_t* root_obj = lisp_read_from_file(filename); + + if (!root_obj) + st_abort("Couldn't load file", filename); + + if (strcmp(lisp_symbol(lisp_car(root_obj)), "supertux-badguys") == 0) + { + lisp_object_t* cur = lisp_cdr(root_obj); + + while(!lisp_nil_p(cur)) + { + lisp_object_t* element = lisp_car(cur); + + if (strcmp(lisp_symbol(lisp_car(element)), "badguy") == 0) + { + + + Tile* tile = new Tile; + tile->id = -1; + tile->solid = false; + tile->brick = false; + tile->ice = false; + tile->water = false; + tile->fullbox = false; + tile->distro = false; + tile->goal = false; + tile->data = 0; + tile->next_tile = 0; + tile->anim_speed = 25; + + LispReader reader(lisp_cdr(element)); + assert(reader.read_int("id", &tile->id)); + reader.read_bool("solid", &tile->solid); + reader.read_bool("brick", &tile->brick); + reader.read_bool("ice", &tile->ice); + reader.read_bool("water", &tile->water); + reader.read_bool("fullbox", &tile->fullbox); + reader.read_bool("distro", &tile->distro); + reader.read_bool("goal", &tile->goal); + reader.read_int("data", &tile->data); + reader.read_int("anim-speed", &tile->anim_speed); + reader.read_int("next-tile", &tile->next_tile); + reader.read_string_vector("images", &tile->filenames); + reader.read_string_vector("editor-images", &tile->editor_filenames); + + for(std::vector<std::string>::iterator it = tile-> + filenames.begin(); + it != tile->filenames.end(); + ++it) + { + Surface* cur_image; + tile->images.push_back(cur_image); + tile->images[tile->images.size()-1] = new Surface( + datadir + "/images/tilesets/" + (*it), + USE_ALPHA); + } + for(std::vector<std::string>::iterator it = tile->editor_filenames.begin(); + it != tile->editor_filenames.end(); + ++it) + { + Surface* cur_image; + tile->editor_images.push_back(cur_image); + tile->editor_images[tile->editor_images.size()-1] = new Surface( + datadir + "/images/tilesets/" + (*it), + USE_ALPHA); + } + + if (tile->id + tileset_id >= int(tiles.size()) + ) + tiles.resize(tile->id + tileset_id+1); + + tiles[tile->id + tileset_id] = tile; + } + else if (strcmp(lisp_symbol(lisp_car(element)), "tileset") == 0) + { + LispReader reader(lisp_cdr(element)); + std::string filename; + reader.read_string("file", &filename); + filename = datadir + "/images/tilesets/" + filename; + load_tileset(filename); + } + else if (strcmp(lisp_symbol(lisp_car(element)), "tilegroup") == 0) + { + TileGroup new_; + LispReader reader(lisp_cdr(element)); + reader.read_string("name", &new_.name); + reader.read_int_vector("tiles", &new_.tiles); + if(!tilegroups_) + tilegroups_ = new std::set<TileGroup>; + tilegroups_->insert(new_).first; + } + else if (strcmp(lisp_symbol(lisp_car(element)), "properties") == 0) + { + LispReader reader(lisp_cdr(element)); + reader.read_int("id", &tileset_id); + tileset_id *= 1000; + } + else + { + puts("Unhandled symbol"); + } + + cur = lisp_cdr(cur); + } + } + else + { + assert(0); + } + + lisp_free(root_obj); +*/ +} + // EOF // |