mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 12:18:00 +00:00
SetStateAi: add more logic for transforming, now use always evaluated value check
unblocked should only care about transformed power for now. thats the next step in making the AI use Elusive Tormentor better.
This commit is contained in:
@@ -76,15 +76,21 @@ public class SetStateAi extends SpellAbilityAi {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if("Transform".equals(sa.getParam("Mode"))) {
|
if("Transform".equals(sa.getParam("Mode"))) {
|
||||||
|
// need a copy for evaluation
|
||||||
|
Card transformed = CardUtil.getLKICopy(source);
|
||||||
|
transformed.getCurrentState().copyFrom(source, source.getAlternateState());
|
||||||
|
transformed.updateStateForView();
|
||||||
|
|
||||||
|
int valueSource = ComputerUtilCard.evaluateCreature(source);
|
||||||
|
int valueTransformed = ComputerUtilCard.evaluateCreature(transformed);
|
||||||
|
|
||||||
|
// it would not survive being transformed
|
||||||
|
if (transformed.getNetToughness() < 1) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// check which state would be better for attacking
|
// check which state would be better for attacking
|
||||||
if (ph.isPlayerTurn(ai) && ph.getPhase().isBefore(PhaseType.COMBAT_DECLARE_ATTACKERS)) {
|
if (ph.isPlayerTurn(ai) && ph.getPhase().isBefore(PhaseType.COMBAT_DECLARE_ATTACKERS)) {
|
||||||
// need a copy for evaluation
|
|
||||||
Card transformed = CardUtil.getLKICopy(source);
|
|
||||||
transformed.getCurrentState().copyFrom(source, source.getAlternateState());
|
|
||||||
transformed.updateStateForView();
|
|
||||||
|
|
||||||
int valueSource = ComputerUtilCard.evaluateCreature(source);
|
|
||||||
int valueTransformed = ComputerUtilCard.evaluateCreature(transformed);
|
|
||||||
boolean transformAttack = false;
|
boolean transformAttack = false;
|
||||||
|
|
||||||
// if an opponent can't block it, no need to transform (back)
|
// if an opponent can't block it, no need to transform (back)
|
||||||
@@ -105,11 +111,15 @@ public class SetStateAi extends SpellAbilityAi {
|
|||||||
if (transformAttack) {
|
if (transformAttack) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
} else if (ph.isPlayerTurn(ai) && ph.getPhase().equals(PhaseType.COMBAT_DECLARE_BLOCKERS)) {
|
||||||
// no clear way, alternate state is better,
|
if (ph.inCombat() && ph.getCombat().isUnblocked(source)) {
|
||||||
// but for more cleaner way use Evaluate for check
|
// if source is unblocked, check for the power
|
||||||
return valueSource <= valueTransformed;
|
return source.getNetPower() <= transformed.getNetPower();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
// no clear way, alternate state is better,
|
||||||
|
// but for more cleaner way use Evaluate for check
|
||||||
|
return valueSource <= valueTransformed;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user