1 module resourcemanager;
2 
3 import collider;
4 import dsfml.graphics : Texture;
5 import dsfml.audio    : SoundBuffer;
6 
7 private class ResourceManager {
8   Texture[string] textures;
9   Collider[string] colliders;
10   SoundBuffer[string] buffers;
11 
12   bool register(T)(const string path, const string name, bool generate_collider = no_collider) if(is(T == Texture)) {
13     auto newtex = new Texture;
14     if(!newtex.loadFromFile(path)) {
15       return false;
16     }
17 
18     textures[name] = newtex;
19     if(generate_collider) {
20       colliders[name] = new Collider(newtex);
21     }
22 
23     return true;
24   }
25   bool register(T)(const string path, const string name) if(is(T == SoundBuffer)) {
26     auto newbuf = new SoundBuffer;
27     if(!newbuf.loadFromFile(path)) {
28       return false;
29     }
30 
31     buffers[name] = newbuf;
32     return true;
33   }
34 
35   const(T) get(T)(const string name) const
36   if(is(T == Texture) || is(T == Collider) || is(T == SoundBuffer)) {
37     static if(is(T == Texture)) {
38       return textures[name];
39     }
40     static if(is(T == Collider)) {
41       return colliders[name];
42     }
43     static if(is(T == SoundBuffer)) {
44       return buffers[name];
45     }
46   }
47 }
48 
49 
50 /// Named bool to indicate need of a collider
51 static bool make_collider = true;
52 
53 /// Named bool to indicate that no collider is needed
54 static bool no_collider = false;
55 
56 /// Manages sound buffers and textures
57 static ResourceManager resource_manager;
58 
59 static this() {
60   resource_manager = new ResourceManager;
61 }