using System.Collections.Generic; using Microsoft.Xna.Framework.Graphics; using System.Threading; using Microsoft.Xna.Framework.Audio; namespace Penguloon { public static class ContentManager { private static Dictionary TextureDictionary { get; set; } = new Dictionary(); private static Dictionary FontDictionary { get; set; } = new Dictionary(); private static Dictionary SoundDictionary { get; set; } = new Dictionary(); public static int LoadPercentage { get; set; } = 0; public static float LoadPercentageF { get; set; } = 0; public static bool DoneLoading { get; set; } public static bool DonePreLoading { get; set; } public static void LoadContent(Main main) { new Thread(() => { Thread.CurrentThread.IsBackground = true; PreLoadContent(main); LoadContent_(main); }).Start(); } private static void LoadContent_(Main main) { float totalItemsToLoad = ContentPathManager.TexturePaths.Count + ContentPathManager.FontPaths.Count + ContentPathManager.SoundPaths.Count; float itemsLoaded = 0; for (int i = 0; i < ContentPathManager.SoundPaths.Count; i++) { SoundEffect ef = main.Content.Load(ContentPathManager.SoundPaths[i]); SoundDictionary.Add(ContentPathManager.SoundPaths[i], ef); LoadPercentage = (int)((itemsLoaded / totalItemsToLoad) * 100); LoadPercentageF = (itemsLoaded / totalItemsToLoad); } for (int i = 0; i < ContentPathManager.TexturePaths.Count; i++) { TextureDictionary.Add(ContentPathManager.TexturePaths[i], main.Content.Load(ContentPathManager.TexturePaths[i])); itemsLoaded++; LoadPercentage = (int)((itemsLoaded / totalItemsToLoad) * 100); LoadPercentageF = (itemsLoaded / totalItemsToLoad); } for (int i = 0; i < ContentPathManager.FontPaths.Count; i++) { FontDictionary.Add(ContentPathManager.FontPaths[i], main.Content.Load(ContentPathManager.FontPaths[i])); itemsLoaded++; LoadPercentage = (int)((itemsLoaded / totalItemsToLoad) * 100); LoadPercentageF = (itemsLoaded / totalItemsToLoad); } DoneLoading = true; } private static void PreLoadContent(Main main) { for (int i = 0; i < ContentPathManager.SoundPathsPreLoad.Count; i++) { SoundEffect ef = main.Content.Load(ContentPathManager.SoundPathsPreLoad[i]); SoundDictionary.Add(ContentPathManager.SoundPathsPreLoad[i], ef); } for (int i = 0; i < ContentPathManager.TexturePathsPreLoad.Count; i++) { TextureDictionary.Add(ContentPathManager.TexturePathsPreLoad[i], main.Content.Load(ContentPathManager.TexturePathsPreLoad[i])); } for (int i = 0; i < ContentPathManager.FontPathsPreLoad.Count; i++) { FontDictionary.Add(ContentPathManager.FontPathsPreLoad[i], main.Content.Load(ContentPathManager.FontPathsPreLoad[i])); } DonePreLoading = true; } public static Texture2D GetTexture(string name) { if (TextureDictionary.ContainsKey(name)) return TextureDictionary[name]; return null; } public static SoundEffect GetSound(string name) { if (SoundDictionary.ContainsKey(name)) return SoundDictionary[name]; return null; } public static SpriteFont GetFont(string name) { if (FontDictionary.ContainsKey(name)) return FontDictionary[name]; return null; } public static Texture2D GetTileTextureByType(int type) { switch (type) { case 0: return GetTexture("Tiles/ice"); case 1: return GetTexture("Tiles/waterCornerLeftDown"); case 2: return GetTexture("Tiles/waterCornerLeftTop"); case 3: return GetTexture("Tiles/waterCornerRightDown"); case 4: return GetTexture("Tiles/waterCornerRightTop"); case 5: return GetTexture("Tiles/waterHorizontal"); case 6: return GetTexture("Tiles/waterVertical"); } return null; } public static Texture2D GetSandTileTextureByType(int type) { switch (type) { case 0: return GetTexture("Tiles/sand"); case 1: return GetTexture("Tiles/sandCornerLeftDown"); case 2: return GetTexture("Tiles/sandCornerLeftTop"); case 3: return GetTexture("Tiles/sandCornerRightDown"); case 4: return GetTexture("Tiles/sandCornerRightTop"); case 5: return GetTexture("Tiles/sandHorizontal"); case 6: return GetTexture("Tiles/sandVertical"); } return null; } public static void DisposeContent() { foreach (var entry in TextureDictionary) entry.Value.Dispose(); foreach (var entry in SoundDictionary) entry.Value.Dispose(); SoundDictionary.Clear(); FontDictionary.Clear(); TextureDictionary.Clear(); } } }