package it.paspiz85.nanobot.game;
import it.paspiz85.nanobot.util.Area;
import it.paspiz85.nanobot.util.Pixel;
import it.paspiz85.nanobot.util.Point;
import it.paspiz85.nanobot.util.Utils;
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Iterator;
import java.util.logging.Level;
import java.util.stream.Stream;
/**
* Main mode screen.
*
* @author paspiz85
*
*/
public final class MainScreen extends Screen {
private static final Area AREA_BUTTON_ATTACK = getArea("area.button.attack");
private static final Area AREA_BUTTON_TROOPS = getArea("area.button.troops");
private static final Pixel BUTTON_WAS_ATTACKED_OKAY = new Pixel(432, 507, new Color(0x5CAC10));
private static final Pixel POINT_WAS_ATTACKED_HEADLINE = new Pixel(437, 158, new Color(0x585450));
private Point buttonAttack;
private Point buttonTroops;
MainScreen() {
}
public Point getButtonAttack() {
if (buttonAttack == null) {
searchButtonAttack(true);
}
return buttonAttack;
}
public Point getButtonTroops() {
if (buttonTroops == null) {
searchButtonTroops(true);
}
return buttonTroops;
}
public Pixel getButtonWasAttackedOK() {
return BUTTON_WAS_ATTACKED_OKAY;
}
public Pixel getPointWasAttackedHeadline() {
return POINT_WAS_ATTACKED_HEADLINE;
}
@Override
public boolean isDisplayed() {
return isDisplayedByImageSearch(this::searchButtonAttack);
}
private void searchButtonAttack(boolean debug) {
buttonAttack = searchImage(getClass().getResource("button_attack.png"), AREA_BUTTON_ATTACK, debug);
}
private void searchButtonTroops(boolean debug) {
buttonTroops = searchImage(getClass().getResource("button_troops.png"), AREA_BUTTON_TROOPS, debug);
}
private Point searchFullCollector(final URI uri) {
final Point[] point = new Point[1];
final BufferedImage image = platform.screenshot();
Utils.withClasspathFolder(uri, (path) -> {
try (Stream<Path> walk = Files.walk(path, 1)) {
for (final Iterator<Path> it = walk.iterator(); it.hasNext();) {
final Path next = it.next();
if (Files.isDirectory(next)) {
continue;
}
point[0] = searchImageCenter(image, next.toUri().toURL());
if (point[0] != null) {
break;
}
}
} catch (final IOException e) {
logger.log(Level.SEVERE, e.getMessage(), e);
}
});
return point[0];
}
public Point searchFullDarkElixirDrill() {
Point result = null;
try {
final URI resource = getClass().getResource("collect/dark_elixir").toURI();
result = searchFullCollector(resource);
} catch (final URISyntaxException e) {
logger.log(Level.SEVERE, e.getMessage(), e);
}
return result;
}
public Point searchFullElixirCollector() {
Point result = null;
try {
final URI resource = getClass().getResource("collect/elixir").toURI();
result = searchFullCollector(resource);
} catch (final URISyntaxException e) {
logger.log(Level.SEVERE, e.getMessage(), e);
}
return result;
}
public Point searchFullGoldMine() {
Point result = null;
try {
final URI resource = getClass().getResource("collect/gold").toURI();
result = searchFullCollector(resource);
} catch (final URISyntaxException e) {
logger.log(Level.SEVERE, e.getMessage(), e);
}
return result;
}
}