package com.rebelkeithy.ftl.systems; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.util.HashMap; import java.util.Map; import com.rebelkeithy.ftl.ship.Ship; public class SystemRegistry { public static Map<String, Class<? extends AbstractShipSystem>> systems = new HashMap<String, Class<? extends AbstractShipSystem>>(); public static void register(String name, Class<? extends AbstractShipSystem> system) { systems.put(name, system); } public static AbstractShipSystem build(String name, Ship ship, int maxPower) { Class<? extends AbstractShipSystem> clazz = systems.get(name); if(clazz != null) { try { Constructor<? extends AbstractShipSystem> constructor = clazz.getConstructor(Ship.class, String.class, int.class); AbstractShipSystem system = constructor.newInstance(ship, name, maxPower); return system; } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } return null; } public static void loadTextures() { for(String systemName : systems.keySet()) { AbstractShipSystem system = SystemRegistry.build(systemName, null, 1); system.loadTextures(); } } }