From 9be8218763c8956455cea3c362c19f35916384f3 Mon Sep 17 00:00:00 2001 From: Ryan Flegel Date: Tue, 18 May 2004 18:12:16 +0000 Subject: [PATCH] - barebones BadGuyManager -> ObjectManager SVN-Revision: 1259 --- src/badguy.cpp | 132 ------------------------------------------------------ src/badguy.h | 30 ------------- src/gameobjs.cpp | 134 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/gameobjs.h | 45 ++++++++++++++++++- src/type.h | 2 + 5 files changed, 180 insertions(+), 163 deletions(-) diff --git a/src/badguy.cpp b/src/badguy.cpp index 58154f15c..c74e6779b 100644 --- a/src/badguy.cpp +++ b/src/badguy.cpp @@ -1196,136 +1196,4 @@ void free_badguy_gfx() { } -//--------------------------------------------------------------------------- - -BadGuyManager::BadGuyManager() -{ - std::string filename = datadir + "/images/tilesets/supertux.stbg"; - load_badguys(filename); -} - -BadGuyManager::~BadGuyManager() -{ - for(std::vector::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::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::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; - 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 // diff --git a/src/badguy.h b/src/badguy.h index 1eb2862c9..0335351be 100644 --- a/src/badguy.h +++ b/src/badguy.h @@ -179,36 +179,6 @@ struct BadGuyData : kind(BAD_SNOWBALL), x(0), y(0), stay_on_platform(false) {} }; -class BadGuyManager -{ - private: - BadGuyManager(); - ~BadGuyManager(); - - std::vector 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: */ diff --git a/src/gameobjs.cpp b/src/gameobjs.cpp index 2d9023485..10b87c391 100644 --- a/src/gameobjs.cpp +++ b/src/gameobjs.cpp @@ -345,5 +345,139 @@ Trampoline::collision(void *p_c_object, int c_object, CollisionType type) } } + +/* Object Manager */ +//--------------------------------------------------------------------------- + +ObjectManager::ObjectManager() +{ + std::string filename = datadir + "/images/tilesets/supertux.stbg"; + load_badguys(filename); +} + +ObjectManager::~ObjectManager() +{ + for(std::vector::iterator i = badguys.begin(); i != badguys.end(); ++i) { + delete *i; + } +} + +void ObjectManager::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::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::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; + 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 */ diff --git a/src/gameobjs.h b/src/gameobjs.h index b6470e43d..af9e5c201 100644 --- a/src/gameobjs.h +++ b/src/gameobjs.h @@ -138,9 +138,52 @@ class Trampoline : public GameObject unsigned int frame; }; - void load_object_gfx(); + +class ObjectManager +{ + private: + ObjectManager(); + ~ObjectManager(); + + static ObjectManager* instance_; + + // XXX Objects will have to be split up into two categories: + // - Drawn before tux + // - Drawn after tux + + std::vector badguys; + std::vector trampolines; + //std::vector particle_systems; + std::vector bouncy_distros; + std::vector broken_bricks; + std::vector bouncy_bricks; + //std::vector upgrades; + //std::vector bullets; + + void load_badguys(std::string filename); + + public: + static ObjectManager* instance() { return instance_ ? instance_ : instance_ = new ObjectManager(); } + static void destroy_instance() { delete instance_; instance_ = 0; } + +/* Object* 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 /* Local Variables: */ diff --git a/src/type.h b/src/type.h index d9faf125f..f018f3bbf 100644 --- a/src/type.h +++ b/src/type.h @@ -87,5 +87,7 @@ void string_list_sort(string_list_type* pstring_list); void string_list_add_item(string_list_type* pstring_list, const char* str); void string_list_free(string_list_type* pstring_list); + + #endif /*SUPERTUX_TYPE_H*/ -- 2.11.0