+Sector *Sector::create(const std::string& name, size_t width, size_t height)
+{
+ Sector *sector = new Sector;
+ sector->name = name;
+ TileMap *background = new TileMap(LAYER_BACKGROUNDTILES, false, width, height);
+ TileMap *interactive = new TileMap(LAYER_TILES, true, width, height);
+ TileMap *foreground = new TileMap(LAYER_FOREGROUNDTILES, false, width, height);
+ sector->add_object(background);
+ sector->add_object(interactive);
+ sector->add_object(foreground);
+ sector->solids = interactive;
+ sector->camera = new Camera(sector);
+ sector->add_object(sector->camera);
+ sector->update_game_objects();
+ return sector;
+}
+
+GameObject*
+Sector::parseObject(const std::string& name, LispReader& reader)
+{
+ if(name == "background") {
+ background = new Background(reader);
+ return background;
+ } else if(name == "camera") {
+ if(camera) {
+ std::cerr << "Warning: More than 1 camera defined in sector.\n";
+ return 0;
+ }
+ camera = new Camera(this);
+ camera->read(reader);
+ return camera;
+ } else if(name == "tilemap") {
+ TileMap* tilemap = new TileMap(reader);
+
+ if(tilemap->is_solid()) {
+ if(solids) {
+ std::cerr << "Warning multiple solid tilemaps in sector.\n";
+ return 0;
+ }
+ solids = tilemap;
+ fix_old_tiles();
+ }
+ return tilemap;
+ } else if(name == "particles-snow") {
+ SnowParticleSystem* partsys = new SnowParticleSystem();
+ partsys->parse(reader);
+ return partsys;
+ } else if(name == "particles-clouds") {
+ CloudParticleSystem* partsys = new CloudParticleSystem();
+ partsys->parse(reader);
+ return partsys;
+ } else if(name == "door") {
+ return new Door(reader);
+ } else if(name == "secretarea") {
+ return new SecretAreaTrigger(reader);
+ } else if(name == "platform") {
+ return new Platform(reader);
+ } else if(name == "jumpy" || name == "money") {
+ return new Jumpy(reader);
+ } else if(name == "snowball") {
+ return new SnowBall(reader);
+ } else if(name == "bouncingsnowball") {
+ return new BouncingSnowball(reader);
+ } else if(name == "flame") {
+ return new Flame(reader);
+ } else if(name == "mriceblock") {
+ return new MrIceBlock(reader);
+ } else if(name == "mrbomb") {
+ return new MrBomb(reader);
+ }
+#if 0
+ else if(badguykind_from_string(name) != BAD_INVALID) {
+ return new BadGuy(badguykind_from_string(name), reader);
+ } else if(name == "trampoline") {
+ return new Trampoline(reader);
+ } else if(name == "flying-platform") {
+ return new FlyingPlatform(reader);
+#endif
+
+ std::cerr << "Unknown object type '" << name << "'.\n";
+ return 0;
+}
+