]> git.tdb.fi Git - libs/demoscene.git/blobdiff - source/resources.cpp
Make the default constructor of Resources protected
[libs/demoscene.git] / source / resources.cpp
index dac473ab2c11f1ff5438065f30c2d96d6039d371..c70e0a11308aee38929e053983bfa285ab51c04c 100644 (file)
@@ -1,18 +1,35 @@
+#include <msp/datafile/builtinsource.h>
+#include <msp/fs/dir.h>
 #include <msp/fs/stat.h>
 #include "resources.h"
 
 using namespace std;
-using namespace Msp;
+
+namespace Msp {
+namespace DemoScene {
+
+void init_data(DataFile::BuiltinSource &);
+
+Resources::Resources()
+{
+       init();
+}
 
 Resources::Resources(const string &pack_name)
 {
-       set_default_texture_anisotropy(8);
-       set_srgb_conversion(true);
+       init();
+       init_sources(pack_name);
+}
 
-       if(FS::exists("data"))
+void Resources::init_sources(const string &pack_name)
+{
+       FS::Path data_dir = "data";
+       if(FS::exists(data_dir))
        {
-               dir_source.add_directory("data");
+               dir_source.add_directory(data_dir);
                add_source(dir_source);
+               for(const auto &c: FS::list_filtered(data_dir, "\\.mdc$"))
+                       load(*this, (data_dir/c).str());
        }
        else
        {
@@ -20,3 +37,57 @@ Resources::Resources(const string &pack_name)
                add_source(pack_source);
        }
 }
+
+void Resources::init()
+{
+       ui_font = 0;
+       ui_text_technique = 0;
+
+       set_default_texture_anisotropy(8);
+       set_srgb_conversion(true);
+
+       add_source(get_builtin_source());
+}
+
+const DataFile::CollectionSource &Resources::get_builtin_source()
+{
+       static DataFile::BuiltinSource builtin_src;
+       bool init_done = false;
+
+       if(!init_done)
+       {
+               init_data(builtin_src);
+               init_done = true;
+       }
+
+       return builtin_src;
+}
+
+Resources &Resources::get_builtins()
+{
+       static Resources builtins;
+       return builtins;
+}
+
+const GL::Font &Resources::get_ui_font() const
+{
+       if(!ui_font)
+               throw runtime_error("no ui font");
+       return *ui_font;
+}
+
+const GL::Technique &Resources::get_ui_text_technique() const
+{
+       if(!ui_text_technique)
+               throw runtime_error("no ui text technique");
+       return *ui_text_technique;
+}
+
+void Resources::set_ui_text_resources(const string &font, const string &tech)
+{
+       ui_font = &get<GL::Font>(font);
+       ui_text_technique = &get<GL::Technique>(tech);
+}
+
+} // namespace DemoScene
+} // namespace Msp