diff --git a/src/main/java/com/epita/creeps/Program.java b/src/main/java/com/epita/creeps/Program.java index a4e3d29..1a881ef 100644 --- a/src/main/java/com/epita/creeps/Program.java +++ b/src/main/java/com/epita/creeps/Program.java @@ -1,14 +1,13 @@ package com.epita.creeps; import com.epita.creeps.commands.Basics; +import com.epita.creeps.given.extra.Cartographer; import com.epita.creeps.given.vo.geometry.Direction; import com.epita.creeps.given.vo.geometry.Point; import com.epita.creeps.given.vo.response.CommandResponse; import com.epita.creeps.given.vo.response.InitResponse; -import com.epita.creeps.units.Building; -import com.epita.creeps.units.Citizen; -import com.epita.creeps.units.Turret; -import com.epita.creeps.units.Unit; +import com.epita.creeps.given.vo.response.StatisticsResponse; +import com.epita.creeps.units.*; import kong.unirest.core.HttpResponse; import kong.unirest.core.JsonNode; import kong.unirest.core.Unirest; @@ -62,7 +61,6 @@ public class Program { logger.error("Cannot connect to the server. Aborting..."); throw e; } -// AsyncExec.justWait(0); // Create account and get init infos logger.info("Creating account"); @@ -75,53 +73,11 @@ public class Program { Unit.getUnits().add(citizen1); Unit.getUnits().add(citizen2); - citizen1.move(Direction.UP).waitFinished(); + // Et voilĂ , machtou pichtou - citizen1.fetchMessages(); - citizen2.move(Direction.UP); - citizen1.waitFinished(); - citizen2.waitFinished(); - - citizen2.spawn("turret"); - citizen1.move(Direction.RIGHT); - citizen1.waitFinished(); - citizen2.waitFinished(); - - List turrets = Turret.getTurretUnits(); - Turret t = (Turret) turrets.getFirst(); - t.fire(t.getPosition().plus(new Point(4, 0))).waitFinished(); - - - - -// logger.info("Done"); + logger.info("Done"); } -// ### Get statistics -//GET http://localhost:1664/statistics -// -//### Get status -//GET http://localhost:1664/status -// -//### Get report -//GET http://localhost:1664/report/148997e9b -// -//### Login with user login_l -//POST http://localhost:1664/init/login_l -// -//> {% -//client.global.set("baseId", response.body.baseId); -//client.global.set("probeId", response.body.probeId); -//client.global.set("login", response.body.login); -//%} -// -//### Post noop commande -//POST http://localhost:1664/command/{{login}}/{{probeId}}/noop -// -//### -//POST http://localhost:1664/command/dumeig_a/8d87eea10/inspect -// -//### } diff --git a/src/main/java/com/epita/creeps/commands/Basics.java b/src/main/java/com/epita/creeps/commands/Basics.java index a626b2c..070fab9 100644 --- a/src/main/java/com/epita/creeps/commands/Basics.java +++ b/src/main/java/com/epita/creeps/commands/Basics.java @@ -7,6 +7,8 @@ import com.epita.creeps.given.extra.Cartographer; import com.epita.creeps.given.json.Json; import com.epita.creeps.given.vo.report.*; import com.epita.creeps.given.vo.response.InitResponse; +import com.epita.creeps.given.vo.response.StatisticsResponse; +import com.epita.creeps.units.BomberBot; import com.epita.creeps.units.Turret; import com.epita.creeps.units.Unit; import kong.unirest.core.HttpResponse; @@ -50,6 +52,18 @@ public class Basics { } } + + public static StatisticsResponse getStatistics() { + try { + CompletableFuture> resp = AsyncExec.asyncExec(() -> Unirest.get(srvUrl + "/statistics").asJson(), 0); + HttpResponse response = resp.join(); + return Json.parse(response.getBody().toString(), StatisticsResponse.class); + } catch (UnirestException e) { + logger.error("Cannot retrieve statistics."); + throw e; + } + } + // Asks the server for a certain report public static Report getReport (String reportId) { HttpResponse response = null; @@ -97,8 +111,8 @@ public class Basics { Unit.getUnits().add(turret); } else if (spawnReport.spawnedUnit.opcode.endsWith("bomber-bot")) { - Turret turret = new Turret(Program.getLogin(), spawnReport.spawnedUnitId, spawnReport.spawnedUnit.position); - Unit.getUnits().add(turret); + BomberBot bombhero = new BomberBot(Program.getLogin(), spawnReport.spawnedUnitId, spawnReport.spawnedUnit.position); + Unit.getUnits().add(bombhero); } else { logger.warn("Spawned unit is an unknown type. Ignored..."); diff --git a/src/main/java/com/epita/creeps/units/BomberBot.java b/src/main/java/com/epita/creeps/units/BomberBot.java index 9250b47..c499dea 100644 --- a/src/main/java/com/epita/creeps/units/BomberBot.java +++ b/src/main/java/com/epita/creeps/units/BomberBot.java @@ -1,10 +1,26 @@ package com.epita.creeps.units; +import com.epita.creeps.given.extra.Cartographer; +import com.epita.creeps.given.json.Json; import com.epita.creeps.given.vo.geometry.Point; +import com.epita.creeps.given.vo.parameter.FireParameter; + +import java.util.List; public class BomberBot extends Unit { public BomberBot(String login, String id, Point position) { super(login, id, position); } + + // Retrieves all units that are turrets + public static List getBomberBotUnits() { + return getUnits().stream().filter(unit -> unit.getClass() == BomberBot.class).toList(); + } + + public BomberBot fire() { + FireParameter fp = new FireParameter(this.position); + sendActionWithBody("fire:bomber-bot", Json.serialize(fp), 2); + return this; + } } diff --git a/src/main/java/com/epita/creeps/units/Unit.java b/src/main/java/com/epita/creeps/units/Unit.java index fdff9cf..d508fa4 100644 --- a/src/main/java/com/epita/creeps/units/Unit.java +++ b/src/main/java/com/epita/creeps/units/Unit.java @@ -46,7 +46,11 @@ public abstract class Unit { // Sends a specific action to the server using it's HTTPS string representation // Sets pending action accordingly and asks for a report after `delay` ticks public void sendActionWithBody(String actionCode, String body, long delay) { - // Move + if (!idle) { +// logger.warn("Unit is already busy, queuing action"); + this.waitFinished(); + } + // Do idle = false; pendingAction = AsyncExec.asyncExec(() -> Unirest.post(command_uri + actionCode).body(body).asJson(), delay) .thenApplyAsync( x -> x ); @@ -83,7 +87,7 @@ public abstract class Unit { logger.warn("Invalid report received: null value"); return false; } - logger.debug("Got report: " + lastReport); +// logger.debug("Got report: " + lastReport); idle = true; return lastReport.errorCode != null; @@ -98,8 +102,10 @@ public abstract class Unit { } return AsyncExec.thenAsyncExec(pendingAction, x -> { CommandResponse cr = Json.parse(x.getBody().toString(), CommandResponse.class); - if (cr.error != null) + if (cr.error != null) { + logger.debug("Server reponse: " + cr.toString()); throw new ServerReponseException("Error retrieving the report id"); + } String reportId = cr.reportId; return Basics.getReport(reportId); }, 0);