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 }