package it.paspiz85.nanobot.logic; import it.paspiz85.nanobot.attack.Attack; import it.paspiz85.nanobot.game.AttackScreen; import it.paspiz85.nanobot.game.BattleBeginScreen; import it.paspiz85.nanobot.game.Screen; import it.paspiz85.nanobot.util.Settings; import it.paspiz85.nanobot.util.Utils; import java.util.concurrent.TimeoutException; import java.util.logging.Level; /** * This state is when bot switch from training mode to attack mode. * * @author paspiz85 * */ public final class StateBattleBegin extends State<BattleBeginScreen> { public static StateBattleBegin instance() { return Utils.singleton(StateBattleBegin.class, () -> new StateBattleBegin()); } private StateBattleBegin() { super(Screen.getInstance(BattleBeginScreen.class)); } @Override public void handle(final Context context) throws InterruptedException { logger.log(Level.INFO, "Starting battle"); if (Thread.interrupted()) { throw new InterruptedException(getClass().getSimpleName() + " is interrupted"); } if (!Attack.noStrategy().equals(Settings.instance().getAttackStrategy()) && getScreen().isDisplayed()) { platform.leftClick(getScreen().getButtonFindMatch(), true); platform.sleepRandom(300); platform.leftClick(getScreen().getButtonShieldDisable(), true); platform.sleepRandom(100); try { sleepUntil(() -> Screen.getInstance(AttackScreen.class).isDisplayed()); // platform.zoomUp(); context.setState(StateAttack.instance()); return; } catch (final TimeoutException e) { logger.log(Level.WARNING, "Next button not found"); } } context.setState(StateIdle.instance()); } }