mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 19:28:01 +00:00
Api-based SpellEffects and Ai classes are all stateless (except the one for tokens) - this allows me to pre-create their instances in ApiType enum members and use same instance multiple times.
This commit is contained in:
@@ -207,7 +207,7 @@ public enum ApiType {
|
|||||||
TapAll (TapAllEffect.class, TapAllAi.class),
|
TapAll (TapAllEffect.class, TapAllAi.class),
|
||||||
TapOrUntap (TapOrUntapEffect.class, TapOrUntapAi.class),
|
TapOrUntap (TapOrUntapEffect.class, TapOrUntapAi.class),
|
||||||
TapOrUntapAll (TapOrUntapAllEffect.class, TapOrUntapAllAi.class),
|
TapOrUntapAll (TapOrUntapAllEffect.class, TapOrUntapAllAi.class),
|
||||||
Token (TokenEffect.class, TokenAi.class),
|
Token (TokenEffect.class, TokenAi.class, false), // Token AI and effect classes have state, they have to be re-created on each request
|
||||||
TwoPiles (TwoPilesEffect.class, TwoPilesAi.class),
|
TwoPiles (TwoPilesEffect.class, TwoPilesAi.class),
|
||||||
UnattachAll (UnattachAllEffect.class, UnattachAllAi.class),
|
UnattachAll (UnattachAllEffect.class, UnattachAllAi.class),
|
||||||
Untap (UntapEffect.class, UntapAi.class),
|
Untap (UntapEffect.class, UntapAi.class),
|
||||||
@@ -221,12 +221,24 @@ public enum ApiType {
|
|||||||
private final Class<? extends SpellAbilityEffect> clsEffect;
|
private final Class<? extends SpellAbilityEffect> clsEffect;
|
||||||
private final Class<? extends SpellAbilityAi> clsAi;
|
private final Class<? extends SpellAbilityAi> clsAi;
|
||||||
|
|
||||||
|
private final SpellAbilityEffect instanceEffect;
|
||||||
|
private final SpellAbilityAi instanceAi;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private static final Map<String, ApiType> allValues = new TreeMap<String, ApiType>(String.CASE_INSENSITIVE_ORDER);
|
private static final Map<String, ApiType> allValues = new TreeMap<String, ApiType>(String.CASE_INSENSITIVE_ORDER);
|
||||||
|
|
||||||
ApiType(Class<? extends SpellAbilityEffect> clsEf, Class<? extends SpellAbilityAi> clsAI) {
|
ApiType(Class<? extends SpellAbilityEffect> clsEf, Class<? extends SpellAbilityAi> clsAi) {
|
||||||
|
this(clsEf, clsAi, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
ApiType(Class<? extends SpellAbilityEffect> clsEf, Class<? extends SpellAbilityAi> clsAI, final boolean isStateLess) {
|
||||||
clsEffect = clsEf;
|
clsEffect = clsEf;
|
||||||
clsAi = clsAI;
|
clsAi = clsAI;
|
||||||
|
|
||||||
|
instanceAi = isStateLess ? ReflectionUtil.makeDefaultInstanceOf(clsAi) : null;
|
||||||
|
instanceEffect = isStateLess ? ReflectionUtil.makeDefaultInstanceOf(clsEf) : null;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ApiType smartValueOf(String value) {
|
public static ApiType smartValueOf(String value) {
|
||||||
@@ -241,11 +253,11 @@ public enum ApiType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public SpellAbilityEffect getSpellEffect() {
|
public SpellAbilityEffect getSpellEffect() {
|
||||||
return clsEffect == null ? null : ReflectionUtil.makeDefaultInstanceOf(clsEffect);
|
return instanceEffect != null ? instanceEffect : ReflectionUtil.makeDefaultInstanceOf(clsEffect);
|
||||||
}
|
}
|
||||||
|
|
||||||
public SpellAbilityAi getAi() {
|
public SpellAbilityAi getAi() {
|
||||||
return clsAi == null ? null : ReflectionUtil.makeDefaultInstanceOf(clsAi);
|
return instanceAi != null ? instanceAi : ReflectionUtil.makeDefaultInstanceOf(clsAi);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ import forge.gui.GuiChoose;
|
|||||||
*/
|
*/
|
||||||
public class TapOrUntapAllEffect extends SpellAbilityEffect {
|
public class TapOrUntapAllEffect extends SpellAbilityEffect {
|
||||||
|
|
||||||
private enum TapOrUntap {
|
private static enum TapOrUntap {
|
||||||
TAP, UNTAP
|
TAP, UNTAP
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user