package it.paspiz85.nanobot.logic;
import it.paspiz85.nanobot.game.AttackScreen;
import it.paspiz85.nanobot.game.BattleBeginScreen;
import it.paspiz85.nanobot.game.BattleEndScreen;
import it.paspiz85.nanobot.game.MainScreen;
import it.paspiz85.nanobot.game.ManageTroopsScreen;
import it.paspiz85.nanobot.game.PlatformScreen;
import it.paspiz85.nanobot.game.Screen;
import it.paspiz85.nanobot.util.Utils;
import java.util.logging.Level;
/**
* This state is when bot sleeps.
*
* @author paspiz85
*
*/
public final class StateIdle extends State<Screen> {
public static StateIdle instance() {
return Utils.singleton(StateIdle.class, () -> new StateIdle());
}
private final MainScreen mainScreenParser;
private Looper looper;
private StateIdle() {
super(Screen.getInstance(null));
mainScreenParser = Screen.getInstance(MainScreen.class);
}
@Override
public void handle(final Context context) throws InterruptedException {
State<?> nextState = this;
logger.log(Level.INFO, "Idle");
while (looper.isRunning()) {
if (Thread.interrupted()) {
throw new InterruptedException(getClass().getSimpleName() + " is interrupted");
}
if (looper.isReloading()) {
logger.log(Level.INFO, "reloading...");
platform.zoomUp();
Thread.sleep(2000);
continue;
} else {
platform.sleepRandom(350);
}
if (platform.matchColoredPoint(mainScreenParser.getPointWasAttackedHeadline())
|| platform.matchColoredPoint(mainScreenParser.getButtonWasAttackedOK())) {
logger.log(Level.INFO, "Was attacked");
platform.leftClick(mainScreenParser.getButtonWasAttackedOK(), true);
platform.sleepRandom(250);
} else if (Screen.getInstance(BattleEndScreen.class).isDisplayed()) {
logger.log(Level.INFO, "Detected BattleEndScreen");
nextState = StateBattleEnd.instance();
break;
} else if (Screen.getInstance(ManageTroopsScreen.class).isDisplayed()) {
logger.log(Level.INFO, "Detected ManageTroopsScreen");
nextState = StateManageTroopsEnd.instance();
break;
} else if (Screen.getInstance(MainScreen.class).isDisplayed()) {
logger.log(Level.INFO, "Detected MainScreen");
nextState = StateMainMenu.instance();
break;
} else if (Screen.getInstance(AttackScreen.class).isDisplayed()) {
logger.log(Level.INFO, "Detected AttackScreen");
nextState = StateAttack.instance();
break;
} else if (Screen.getInstance(BattleBeginScreen.class).isDisplayed()) {
logger.log(Level.INFO, "Detected BattleBeginScreen");
nextState = StateBattleBegin.instance();
break;
} else if (Screen.getInstance(PlatformScreen.class).isDisplayed()) {
logger.log(Level.INFO, "Detected PlatformScreen");
platform.leftClick(Screen.getInstance(PlatformScreen.class).getButtonPlayGame(), true);
}
Thread.sleep(1000);
}
context.setState(nextState);
}
public void setLooper(final Looper looper) {
this.looper = looper;
}
}