X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fgameobjs.cpp;h=10b87c391daaf7748bb2486768e3ac044eb58d7d;hb=9be8218763c8956455cea3c362c19f35916384f3;hp=2d90234853303903a41763ac0269479f03b26ca3;hpb=101f1154a9318a762a8b318bb42e61ed2d471e4b;p=supertux.git 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 */