]> git.tdb.fi Git - libs/demoscene.git/blob - source/resources.cpp
f44d8c1985d05ef1e45c3651bcaa0a8b77cb4d1f
[libs/demoscene.git] / source / resources.cpp
1 #include <msp/datafile/builtinsource.h>
2 #include <msp/fs/dir.h>
3 #include <msp/fs/stat.h>
4 #include "resources.h"
5
6 using namespace std;
7
8 namespace Msp {
9 namespace DemoScene {
10
11 void init_data(DataFile::BuiltinSource &);
12
13 Resources::Resources()
14 {
15         add_source(get_builtin_source());
16 }
17
18 Resources::Resources(const string &pack_name):
19         ui_font(0),
20         ui_text_technique(0)
21 {
22         set_default_texture_anisotropy(8);
23         set_srgb_conversion(true);
24
25         FS::Path data_dir = "data";
26         if(FS::exists(data_dir))
27         {
28                 dir_source.add_directory(data_dir);
29                 add_source(dir_source);
30                 for(const auto &c: FS::list_filtered(data_dir, "\\.mdc$"))
31                         load(*this, (data_dir/c).str());
32         }
33         else
34         {
35                 pack_source.add_pack_file(pack_name);
36                 add_source(pack_source);
37         }
38
39         add_source(get_builtin_source());
40 }
41
42 const DataFile::CollectionSource &Resources::get_builtin_source()
43 {
44         static DataFile::BuiltinSource builtin_src;
45         bool init_done = false;
46
47         if(!init_done)
48         {
49                 init_data(builtin_src);
50                 init_done = true;
51         }
52
53         return builtin_src;
54 }
55
56 Resources &Resources::get_builtins()
57 {
58         static Resources builtins;
59         return builtins;
60 }
61
62 const GL::Font &Resources::get_ui_font() const
63 {
64         if(!ui_font)
65                 throw runtime_error("no ui font");
66         return *ui_font;
67 }
68
69 const GL::Technique &Resources::get_ui_text_technique() const
70 {
71         if(!ui_text_technique)
72                 throw runtime_error("no ui text technique");
73         return *ui_text_technique;
74 }
75
76 void Resources::set_ui_text_resources(const string &font, const string &tech)
77 {
78         ui_font = &get<GL::Font>(font);
79         ui_text_technique = &get<GL::Technique>(tech);
80 }
81
82 } // namespace DemoScene
83 } // namespace Msp