ContentManagerExtensions.cs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. using System.IO;
  2. using Microsoft.Xna.Framework;
  3. using Microsoft.Xna.Framework.Content;
  4. using Microsoft.Xna.Framework.Graphics;
  5. namespace MonoGame.Extended.Content
  6. {
  7. public interface IContentLoader<out T>
  8. {
  9. T Load(ContentManager contentManager, string path);
  10. }
  11. public interface IContentLoader
  12. {
  13. T Load<T>(ContentManager contentManager, string path);
  14. }
  15. public static class ContentManagerExtensions
  16. {
  17. public const string DirectorySeparatorChar = "/";
  18. public static Stream OpenStream(this ContentManager contentManager, string path)
  19. {
  20. return TitleContainer.OpenStream(contentManager.RootDirectory + DirectorySeparatorChar + path);
  21. }
  22. public static GraphicsDevice GetGraphicsDevice(this ContentManager contentManager)
  23. {
  24. // http://konaju.com/?p=21
  25. var serviceProvider = contentManager.ServiceProvider;
  26. var graphicsDeviceService = (IGraphicsDeviceService) serviceProvider.GetService(typeof(IGraphicsDeviceService));
  27. return graphicsDeviceService.GraphicsDevice;
  28. }
  29. /// <summary>
  30. /// Loads the content using a custom content loader.
  31. /// </summary>
  32. public static T Load<T>(this ContentManager contentManager, string path, IContentLoader contentLoader)
  33. {
  34. return contentLoader.Load<T>(contentManager, path);
  35. }
  36. /// <summary>
  37. /// Loads the content using a custom content loader.
  38. /// </summary>
  39. public static T Load<T>(this ContentManager contentManager, string path, IContentLoader<T> contentLoader)
  40. {
  41. return contentLoader.Load(contentManager, path);
  42. }
  43. }
  44. }