]> git.tdb.fi Git - r2c2.git/blobdiff - source/3d/catalogue.cpp
Use generic ObjectTypes in Catalogue
[r2c2.git] / source / 3d / catalogue.cpp
index 4d7b4a83fea5f3835221198004c6b28dd9c80e37..9daa7c809c7421dc71b9a68e2e044107358d7750 100644 (file)
@@ -23,58 +23,34 @@ Catalogue3D::Catalogue3D(Catalogue &c):
        add_type<GL::Program>().creator(&Catalogue3D::create<GL::Program>);
        add_type<GL::Technique>().creator(&Catalogue3D::create<GL::Technique>);
 
-       catalogue.signal_track_added.connect(sigc::mem_fun(this, &Catalogue3D::track_added));
-       catalogue.signal_vehicle_added.connect(sigc::mem_fun(this, &Catalogue3D::vehicle_added));
-       catalogue.signal_signal_added.connect(sigc::mem_fun(this, &Catalogue3D::signal_added));
+       catalogue.signal_object_added.connect(sigc::mem_fun(this, &Catalogue3D::object_added));
 
-       const Catalogue::TrackMap &trks = catalogue.get_tracks();
-       for(Catalogue::TrackMap::const_iterator i=trks.begin(); i!=trks.end(); ++i)
-               track_added(*i->second);
-       const Catalogue::SignalMap &sigs = catalogue.get_signals();
-       for(Catalogue::SignalMap::const_iterator i=sigs.begin(); i!=sigs.end(); ++i)
-               signal_added(*i->second);
+       const Catalogue::ObjectMap &objs = catalogue.get_all();
+       for(Catalogue::ObjectMap::const_iterator i=objs.begin(); i!=objs.end(); ++i)
+               object_added(*i->second);
 
        build_endpoint_mesh();
 }
 
 Catalogue3D::~Catalogue3D()
 {
-       for(map<const TrackType *, TrackType3D *>::iterator i=tracks.begin(); i!=tracks.end(); ++i)
+       for(map<const ObjectType *, ObjectType3D *>::iterator i=objects.begin(); i!=objects.end(); ++i)
                delete i->second;
-       for(map<const VehicleType *, VehicleType3D *>::iterator i=vehicles.begin(); i!=vehicles.end(); ++i)
-               delete i->second;
-       for(map<const SignalType *, SignalType3D *>::iterator i=signals.begin(); i!=signals.end(); ++i)
-               delete i->second;
-}
-
-const TrackType3D &Catalogue3D::get_track(const TrackType &tt) const
-{
-       return *get_item(tracks, &tt);
-}
-
-const VehicleType3D &Catalogue3D::get_vehicle(const VehicleType &vt) const
-{
-       return *get_item(vehicles, &vt);
-}
-
-const SignalType3D &Catalogue3D::get_signal(const SignalType &vt) const
-{
-       return *get_item(signals, &vt);
-}
-
-void Catalogue3D::track_added(const TrackType &track)
-{
-       tracks[&track] = new TrackType3D(*this, track);
 }
 
-void Catalogue3D::vehicle_added(const VehicleType &veh)
+void Catalogue3D::object_added(const ObjectType &ot)
 {
-       vehicles[&veh] = new VehicleType3D(*this, veh);
+       if(const TrackType *tt = dynamic_cast<const TrackType *>(&ot))
+               objects[&ot] = new TrackType3D(*this, *tt);
+       else if(const SignalType *st = dynamic_cast<const SignalType *>(&ot))
+               objects[&ot] = new SignalType3D(*this, *st);
+       else if(const VehicleType *vt = dynamic_cast<const VehicleType *>(&ot))
+               objects[&ot] = new VehicleType3D(*this, *vt);
 }
 
-void Catalogue3D::signal_added(const SignalType &sig)
+const ObjectType3D &Catalogue3D::get_3d(const ObjectType &ot) const
 {
-       signals[&sig] = new SignalType3D(*this, sig);
+       return *get_item(objects, &ot);
 }
 
 void Catalogue3D::build_endpoint_mesh()