]> git.tdb.fi Git - r2c2.git/commitdiff
Use GL::Resources and DirectorySource in Catalogue3D
authorMikko Rasa <tdb@tdb.fi>
Tue, 29 Apr 2014 05:32:22 +0000 (08:32 +0300)
committerMikko Rasa <tdb@tdb.fi>
Tue, 29 Apr 2014 05:32:22 +0000 (08:32 +0300)
source/3d/catalogue.cpp
source/3d/catalogue.h
source/3d/vehicletype.cpp

index c02b7e6fddbc3ca64f860333d8fa06047187be51..2f932d62f1c6b6133c49958494b6b8e599ed2059 100644 (file)
@@ -1,9 +1,5 @@
 #include <msp/core/maputils.h>
-#include <msp/fs/stat.h>
 #include <msp/gl/meshbuilder.h>
-#include <msp/gl/object.h>
-#include <msp/gl/program.h>
-#include <msp/gl/technique.h>
 #include "catalogue.h"
 #include "signaltype.h"
 #include "tracktype.h"
@@ -17,11 +13,9 @@ namespace R2C2 {
 Catalogue3D::Catalogue3D(Catalogue &c):
        catalogue(c)
 {
-       add_type<GL::Material>().creator(&Catalogue3D::create<GL::Material>);
-       add_type<GL::Mesh>().creator(&Catalogue3D::create<GL::Mesh>);
-       add_type<GL::Object>().creator(&Catalogue3D::create2<GL::Object>);
-       add_type<GL::Program>().creator(&Catalogue3D::create<GL::Program>);
-       add_type<GL::Technique>().creator(&Catalogue3D::create2<GL::Technique>);
+       src.add_directory(".");
+       src.add_directory("data");
+       add_source(src);
 
        catalogue.signal_object_added.connect(sigc::mem_fun(this, &Catalogue3D::object_added));
 
@@ -89,32 +83,4 @@ const GL::Mesh &Catalogue3D::get_endpoint_mesh(const TrackAppearance &appearance
        return *get_item(endpoint_meshes, &appearance);
 }
 
-FS::Path Catalogue3D::locate_file(const string &name)
-{
-       if(FS::exists(name))
-               return name;
-
-       FS::Path path = FS::Path("data")/name;
-       if(FS::exists(path))
-               return path;
-
-       throw runtime_error("Can't locate "+name);
-}
-
-template<typename T>
-T *Catalogue3D::create(const string &name)
-{
-       RefPtr<T> obj = new T;
-       DataFile::load(*obj, locate_file(name).str());
-       return obj.release();
-}
-
-template<typename T>
-T *Catalogue3D::create2(const string &name)
-{
-       RefPtr<T> obj = new T;
-       DataFile::load(*obj, locate_file(name).str(), *this);
-       return obj.release();
-}
-
 } // namespace R2C2
index ea4182893b36a3b1f3823b36e99f08e66577fbbe..07f1535f2b30583d72ce554124cb4a9195ad5d09 100644 (file)
@@ -2,9 +2,9 @@
 #define R2C2_3D_CATALOGUE_H_
 
 #include <msp/datafile/collection.h>
-#include <msp/fs/path.h>
-#include <msp/gl/material.h>
+#include <msp/datafile/directorysource.h>
 #include <msp/gl/mesh.h>
+#include <msp/gl/resources.h>
 #include "libr2c2/catalogue.h"
 #include "typemap.h"
 
@@ -12,10 +12,11 @@ namespace R2C2 {
 
 class ObjectType3D;
 
-class Catalogue3D: public Msp::DataFile::Collection
+class Catalogue3D: public Msp::GL::Resources
 {
 private:
        Catalogue &catalogue;
+       Msp::DataFile::DirectorySource src;
        std::map<const ObjectType *, ObjectType3D *> objects;
        std::map<const TrackAppearance *, Msp::GL::Mesh *> endpoint_meshes;
 
@@ -37,15 +38,6 @@ private:
        void build_endpoint_mesh(const TrackAppearance &);
 public:
        const Msp::GL::Mesh &get_endpoint_mesh(const TrackAppearance &) const;
-
-private:
-       Msp::FS::Path locate_file(const std::string &);
-
-       template<typename T>
-       T *create(const std::string &);
-
-       template<typename T>
-       T *create2(const std::string &);
 };
 
 }
index c6636099b0e8e9595f78405f5b800fe4b3641b7e..34f2be630a9bc587680aaf2b4691888b6941eaf0 100644 (file)
@@ -1,3 +1,4 @@
+#include <msp/gl/material.h>
 #include <msp/gl/meshbuilder.h>
 #include <msp/gl/technique.h>
 #include <msp/gl/texture2d.h>