Coverage Summary for Class: ResourceManager (com.mygdx.game.Managers)

Class Class, % Method, % Line, %
ResourceManager 100% (1/1) 83.3% (15/18) 79.4% (50/63)


1 package com.mygdx.game.Managers; 2  3 import com.badlogic.gdx.assets.AssetManager; 4 import com.badlogic.gdx.graphics.Texture; 5 import com.badlogic.gdx.graphics.g2d.Sprite; 6 import com.badlogic.gdx.graphics.g2d.TextureAtlas; 7 import com.badlogic.gdx.maps.tiled.TiledMap; 8 import com.badlogic.gdx.maps.tiled.TmxMapLoader; 9  10 import java.util.ArrayList; 11  12 /** 13  * Manages all assets and disposes of them when appropriate 14  */ 15 public final class ResourceManager { 16  private static boolean initialized = false; 17  private static boolean loaded; 18  private static AssetManager manager; 19  private static ArrayList<String> ids; 20  private static ArrayList<TiledMap> tileMaps; 21  //private static HashMap<String, FreeTypeFontGenerator> fontGenerators; 22  //private static HashMap<String, BitmapFont> fonts; 23  24  /** 25  * The equivalent to a constructor 26  */ 27  public static void Initialize() { 28  if (initialized) { 29  return; 30  } 31  initialized = true; 32  manager = new AssetManager(); 33  loaded = false; 34  ids = new ArrayList<>(); 35  tileMaps = new ArrayList<>(); 36  //fontGenerators = new HashMap<>(); 37  //fonts = new HashMap<>(); 38  } 39  40  /** 41  * Schedules an asset for loading 42  * Amended for assessment 2: Made the method return void 43  * @param fPath the file path of the asset 44  */ 45  public static void addTexture(String fPath) { 46  tryInit(); 47  checkAdd(); 48  manager.load(fPath, Texture.class); 49  ids.add(fPath); 50  } 51  52  /** 53  * Schedules an asset for loading 54  * Amended for assessment 2: Made the method return void 55  * @param fPath the file path of the asset 56  */ 57  public static void addTextureAtlas(String fPath) { 58  tryInit(); 59  checkAdd(); 60  manager.load(fPath, TextureAtlas.class); 61  ids.add(fPath); 62  } 63  64  /** 65  * Prefaces name with |TM| followed by the internal index of the tilemap however this isn't required to access this asset 66  * @param fPath the file location of the asset 67  * @return id of the asset 68  */ 69  public static int addTileMap(String fPath) { 70  tryInit(); 71  checkAdd(); 72  TiledMap map = new TmxMapLoader().load(fPath); 73  tileMaps.add(map); 74  ids.add("|TM|" + tileMaps.size() + fPath); 75  return ids.size(); 76  } 77  78  /** 79  * Actually loads the assets 80  */ 81  public static void loadAssets() { 82  tryInit(); 83  loaded = true; 84  manager.finishLoading(); 85  } 86  87  public static Texture getTexture(String fPath) { 88  tryInit(); 89  return manager.get(fPath); 90  } 91  92  public static TextureAtlas getTextureAtlas(String fPath) { 93  tryInit(); 94  TextureAtlas t = manager.get(fPath); 95  for (Texture t0 : t.getTextures()) { 96  t0.setFilter(Texture.TextureFilter.Nearest, Texture.TextureFilter.Nearest); 97  } 98  return manager.get(fPath); 99  } 100  101  public static Texture getTexture(int id) { 102  tryInit(); 103  String fPath = ids.get(id - 1); 104  return manager.get(fPath); 105  } 106  107  public static TextureAtlas getTextureAtlas(int id) { 108  tryInit(); 109  String fPath = ids.get(id - 1); 110  return getTextureAtlas(fPath); 111  } 112  113  /** 114  * @param atlas_id the id of the source texture atlas 115  * @param name the name of the texture 116  * @return the found Sprite in the given atlas 117  */ 118  public static Sprite getSprite(int atlas_id, String name) { 119  // Sprite s = getTextureAtlas(atlas_id).createSprite(name); 120  // s.setU(0); 121  // s.setV(0); 122  // s.setU2(0.125f); 123  // s.setV2(0.25f); 124  //TextureAtlas t = getTextureAtlas(atlas_id); 125  return getTextureAtlas(atlas_id).createSprite(name); 126  } 127  128  /** 129  * Gets the tile map returns null if not a tile map 130  * 131  * @param id the id of the tile map 132  * @return the tile map 133  */ 134  public static TiledMap getTileMap(int id) { 135  tryInit(); 136  137  String fPath = ids.get(id - 1); 138  if (fPath.length() < 4) { 139  return null; 140  } 141  String slice = fPath.substring(0, 4); 142  if (!slice.equals("|TM|")) { 143  return null; 144  } 145  int id_ = Character.getNumericValue(fPath.charAt(4)); 146  return tileMaps.get(id_ - 1); 147  } 148  149  /** 150  * only looks for simple assets not specialty ones so largely only textures 151  * 152  * @param name the desired asset name 153  * @return the id of the asset found if found 154  */ 155  public static int getId(String name) { 156  //tryInit(); 157  return ids.indexOf(name) + 1; 158  } 159  160  /** 161  * It is imperative that this is called unless you want memory leeks 162  */ 163  public static void cleanUp() { 164  tryInit(); 165  manager.dispose(); 166  for (TiledMap map : tileMaps) { 167  map.dispose(); 168  } 169  //for (BitmapFont font : fonts.values()) { 170  // font.dispose(); 171  //} 172  //for (FreeTypeFontGenerator generator : fontGenerators.values()) { 173  // generator.dispose(); 174  //} 175  } 176  177  /** 178  * Will check if new assets can be added if not throw an error 179  */ 180  private static void checkAdd() { 181  if (loaded) { 182  throw new RuntimeException("Can't load assets at this stage"); 183  } 184  } 185  186  /** 187  * Calls Initialize if not already done so 188  */ 189  private static void tryInit() { 190  if (!initialized) { 191  Initialize(); 192  } 193  } 194  195  /** 196  * Added for Assessment 2 197  * Calls cleanup function and disposes of remaining assets 198  */ 199  public static void dispose() { 200  cleanUp(); 201  initialized = false; 202  loaded = false; 203  ids = new ArrayList<>(); 204  //fonts = new HashMap<>(); 205  } 206  207  // public static int addFontGenerator(String fontPath) { 208  // tryInit(); 209  // checkAdd(); 210  // if (fontGenerators.containsKey(fontPath)) { 211  // return -1; 212  // } 213  // fontGenerators.put(fontPath, new FreeTypeFontGenerator(Gdx.files.internal(fontPath))); 214  // ids.add("|FG|" + fontPath); 215  // 216  // return ids.size(); 217  // } 218  // 219  // public static int createFont(int font_generator_id, int fontSize) { 220  // tryInit(); 221  // String fontName = ids.get(font_generator_id - 1); 222  // fontName = fontName.substring(4); 223  // FreeTypeFontGenerator generator = fontGenerators.get(fontName); 224  // 225  // FreeTypeFontGenerator.FreeTypeFontParameter params = new FreeTypeFontGenerator.FreeTypeFontParameter(); 226  // params.size = fontSize; 227  // params.color.r = 0; 228  // params.color.g = 0; 229  // params.color.b = 0; 230  // 231  // BitmapFont font = generator.generateFont(params); 232  // 233  // ids.add("|FT|" + fontSize + fontName); 234  // fonts.put(fontSize + fontName, font); 235  // 236  // return ids.size(); 237  // } 238  // 239  // public static int createFont(String fontName, int fontSize) { 240  // tryInit(); 241  // 242  // if (!fontGenerators.containsKey(fontName)) { 243  // return -1; 244  // } 245  // FreeTypeFontGenerator generator = fontGenerators.get(fontName); 246  // 247  // FreeTypeFontGenerator.FreeTypeFontParameter params = new FreeTypeFontGenerator.FreeTypeFontParameter(); 248  // params.size = fontSize; 249  // params.color.r = 1; 250  // params.color.g = 1; 251  // params.color.b = 1; 252  // 253  // BitmapFont font = generator.generateFont(params); 254  // 255  // ids.add("|FT|" + fontSize + fontName); 256  // fonts.put(fontSize + fontName, font); 257  // 258  // return ids.size(); 259  // } 260  // 261  // public static TiledMap getTileMap(String fPath) { 262  // tryInit(); 263  // int id = -1; 264  // for (String fName : ids) { 265  // if (fName.length() < 4) { 266  // continue; 267  // } 268  // String slice = fName.substring(0, 4); 269  // if (slice.equals("|TM|") && fName.contains(fPath)) { 270  // id = Character.getNumericValue(fName.charAt(4)); 271  // break; 272  // } 273  // } 274  // if (id < 0) { 275  // return null; 276  // } 277  // return tileMaps.get(id - 1); 278  // } 279  // 280  // public static BitmapFont getFont(int font_id) { 281  // String fontName = ids.get(font_id - 1); 282  // fontName = fontName.substring(4); 283  // 284  // return fonts.get(fontName); 285  // } 286  // 287  // public static BitmapFont getFont(String fontName) { 288  // return fonts.get(fontName); 289  // } 290 }