package Roguelike.Ability.ActiveAbility.EffectType; import java.util.HashMap; import Roguelike.Ability.ActiveAbility.ActiveAbility; import Roguelike.Entity.EnvironmentEntity; import Roguelike.Entity.GameEntity; import Roguelike.Tiles.GameTile; import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.XmlReader.Element; import com.badlogic.gdx.utils.reflect.ClassReflection; import com.badlogic.gdx.utils.reflect.ReflectionException; public abstract class AbstractEffectType { public abstract void update( ActiveAbility aa, float time, GameTile tile, GameEntity entity, EnvironmentEntity envEntity ); public abstract void parse( Element xml ); public abstract AbstractEffectType copy(); public abstract Array<String> toString( ActiveAbility aa ); public static AbstractEffectType load( Element xml ) { Class<AbstractEffectType> c = ClassMap.get( xml.getName().toUpperCase() ); AbstractEffectType type = null; try { type = ClassReflection.newInstance( c ); } catch ( Exception e ) { System.err.println(xml.getName()); e.printStackTrace(); } type.parse( xml ); return type; } public static final HashMap<String, Class> ClassMap = new HashMap<String, Class>(); static { ClassMap.put( "DAMAGE", EffectTypeDamage.class ); ClassMap.put( "FIELD", EffectTypeField.class ); ClassMap.put( "FIELDINTERACTION", EffectTypeFieldInteraction.class ); ClassMap.put( "HEAL", EffectTypeHeal.class ); ClassMap.put( "STATUS", EffectTypeStatus.class ); ClassMap.put( "SUMMON", EffectTypeSummon.class ); ClassMap.put( "TELEPORT", EffectTypeTeleport.class ); } }