X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fsector.cpp;h=0976bb80687a071e0d434591c31c93e7dcdbbf7e;hb=cf4de5d58eb99a11369c329c01bfa5abe4b0a398;hp=401e6b62490e806d8e622156566fdaed617dcc13;hpb=d4d4e5e7e87c9d3710ca91d5e3e57de03f03f6be;p=supertux.git diff --git a/src/sector.cpp b/src/sector.cpp index 401e6b624..0976bb806 100644 --- a/src/sector.cpp +++ b/src/sector.cpp @@ -1,3 +1,21 @@ +// $Id$ +// +// SuperTux - A Jump'n Run +// Copyright (C) 2004 Matthias Braun @@ -18,6 +36,8 @@ #include "music_manager.h" #include "gameloop.h" #include "resources.h" +#include "interactive_object.h" +#include "door.h" Sector* Sector::_current = 0; @@ -78,6 +98,7 @@ Sector::parse(LispReader& lispreader) reader.read_string("name", sp->name); reader.read_float("x", sp->pos.x); reader.read_float("y", sp->pos.y); + spawnpoints.push_back(sp); } else if(token == "tilemap") { TileMap* tilemap = new TileMap(reader); add_object(tilemap); @@ -103,12 +124,17 @@ Sector::parse(LispReader& lispreader) CloudParticleSystem* partsys = new CloudParticleSystem(); partsys->parse(reader); add_object(partsys); + } else if(token == "door") { + add_object(new Door(reader)); + } else { + std::cerr << "Unknown object type '" << token << "'.\n"; } } if(!camera) { - std::cerr << "sector does not contain a camera.\n"; + std::cerr << "sector '" << name << "' does not contain a camera.\n"; camera = new Camera(this); + add_object(camera); } if(!solids) throw std::runtime_error("sector does not contain a solid tile layer."); @@ -264,9 +290,10 @@ Sector::add_object(GameObject* object) FlyingPlatform* flying_platform = dynamic_cast (object); if(flying_platform) flying_platforms.push_back(flying_platform); - Background* background = dynamic_cast (object); - if(background) - this->background = background; + InteractiveObject* interactive_object + = dynamic_cast (object); + if(interactive_object) + interactive_objects.push_back(interactive_object); gameobjects.push_back(object); } @@ -338,6 +365,13 @@ Sector::action(float elapsed_time) std::remove(bullets.begin(), bullets.end(), bullet), bullets.end()); } + InteractiveObject* interactive_object = + dynamic_cast (*i); + if(interactive_object) { + interactive_objects.erase( + std::remove(interactive_objects.begin(), interactive_objects.end(), + interactive_object), interactive_objects.end()); + } Upgrade* upgrade = dynamic_cast (*i); if(upgrade) { upgrades.erase(