From 5b019b3e63fe58e472ac56b2ce6d9c8b18956639 Mon Sep 17 00:00:00 2001 From: Woosle Park Date: Mon, 25 Mar 2019 22:39:21 -0400 Subject: [PATCH] Testing --- .../java/net/simon987/cubotplugin/Cubot.java | 20 ++++++++++++ .../cubotplugin/event/DeathCountEvent.java | 29 +++++++++++++++++ .../cubotplugin/event/DeathCountListener.java | 27 ++++++++++++++++ .../event/TotalExecutionTimeEvent.java | 29 +++++++++++++++++ .../event/TotalExecutionTimeListener.java | 27 ++++++++++++++++ .../cubotplugin/event/WalkDistanceEvent.java | 31 +++++++++++++++++++ .../event/WalkDistanceListener.java | 27 ++++++++++++++++ .../server/game/objects/GameObject.java | 27 ++++++++++++++++ .../net/simon987/server/user/UserStats.java | 21 +++++++++++++ .../simon987/server/web/LeaderBoardPage.java | 5 ++- .../main/resources/templates/leaderboard.vm | 6 ++++ 11 files changed, 248 insertions(+), 1 deletion(-) create mode 100644 Plugin Cubot/src/main/java/net/simon987/cubotplugin/event/DeathCountEvent.java create mode 100644 Plugin Cubot/src/main/java/net/simon987/cubotplugin/event/DeathCountListener.java create mode 100644 Plugin Cubot/src/main/java/net/simon987/cubotplugin/event/TotalExecutionTimeEvent.java create mode 100644 Plugin Cubot/src/main/java/net/simon987/cubotplugin/event/TotalExecutionTimeListener.java create mode 100644 Plugin Cubot/src/main/java/net/simon987/cubotplugin/event/WalkDistanceEvent.java create mode 100644 Plugin Cubot/src/main/java/net/simon987/cubotplugin/event/WalkDistanceListener.java diff --git a/Plugin Cubot/src/main/java/net/simon987/cubotplugin/Cubot.java b/Plugin Cubot/src/main/java/net/simon987/cubotplugin/Cubot.java index 884db0a..05b88b4 100644 --- a/Plugin Cubot/src/main/java/net/simon987/cubotplugin/Cubot.java +++ b/Plugin Cubot/src/main/java/net/simon987/cubotplugin/Cubot.java @@ -11,6 +11,8 @@ import net.simon987.server.game.item.Item; import net.simon987.server.game.item.ItemVoid; import net.simon987.server.game.objects.*; import net.simon987.server.user.User; +import net.simon987.server.event.GameEvent; +import net.simon987.cubotplugin.event.*; import org.bson.Document; import org.json.simple.JSONObject; @@ -22,6 +24,14 @@ public class Cubot extends GameObject implements Updatable, ControllableUnit, Me private static final char MAP_INFO = 0x0200; + /** + * Walk Distance + */ + private int walkDistance; + /** + * Death Count + */ + private int deathCount; /** * Hit points */ @@ -126,6 +136,8 @@ public class Cubot extends GameObject implements Updatable, ControllableUnit, Me hp = document.getInteger("hp"); shield = document.getInteger("shield"); + deathCount = 0; + walkDistance = 0; setDirection(Direction.getDirection(document.getInteger("direction"))); IServerConfiguration config = GameServer.INSTANCE.getConfig(); @@ -164,6 +176,9 @@ public class Cubot extends GameObject implements Updatable, ControllableUnit, Me //Couldn't walk currentAction = Action.IDLE; } + walkDistance++; + GameEvent event = new WalkDistanceEvent(this,walkDistance); + GameServer.INSTANCE.getEventDispatcher().dispatch(event); } else { currentAction = Action.IDLE; } @@ -263,6 +278,7 @@ public class Cubot extends GameObject implements Updatable, ControllableUnit, Me lastConsoleMessagesBuffer.clear(); currentStatus = 0; lastStatus = 0; + walkDistance = 0; addStatus(CubotStatus.FACTORY_NEW); for (HardwareModule module : hardwareAddresses.values()) { @@ -272,6 +288,10 @@ public class Cubot extends GameObject implements Updatable, ControllableUnit, Me @Override public boolean onDeadCallback() { + deathCount++; + GameEvent event = new DeathCountEvent(this,deathCount); + GameServer.INSTANCE.getEventDispatcher().dispatch(event); + reset(); //Teleport to spawn point diff --git a/Plugin Cubot/src/main/java/net/simon987/cubotplugin/event/DeathCountEvent.java b/Plugin Cubot/src/main/java/net/simon987/cubotplugin/event/DeathCountEvent.java new file mode 100644 index 0000000..c69e6c5 --- /dev/null +++ b/Plugin Cubot/src/main/java/net/simon987/cubotplugin/event/DeathCountEvent.java @@ -0,0 +1,29 @@ +package net.simon987.cubotplugin.event; + +import net.simon987.server.event.GameEvent; +import net.simon987.server.game.objects.GameObject; + +public class DeathCountEvent extends GameEvent { + + public DeathCountEvent(){ + + } + + public DeathCountEvent(GameObject object, int c) { + setSource(object); + if(c>=0){ + object.setCounter(c); + }else{ + object.setCounter(0); + } + } + + @Override + public GameObject getSource() { + return (GameObject) super.getSource(); + } + + public int getCounter() { + return (int) getSource().getCounter(); + } +} \ No newline at end of file diff --git a/Plugin Cubot/src/main/java/net/simon987/cubotplugin/event/DeathCountListener.java b/Plugin Cubot/src/main/java/net/simon987/cubotplugin/event/DeathCountListener.java new file mode 100644 index 0000000..1368849 --- /dev/null +++ b/Plugin Cubot/src/main/java/net/simon987/cubotplugin/event/DeathCountListener.java @@ -0,0 +1,27 @@ +package net.simon987.cubotplugin.event; + +import net.simon987.server.event.GameEvent; +import net.simon987.server.event.GameEventListener; +import net.simon987.server.game.objects.ControllableUnit; +import net.simon987.server.game.objects.GameObject; +import net.simon987.server.logging.LogManager; + +public class DeathCountListener implements GameEventListener { + @Override + public Class getListenedEventType() { + return DeathCountEvent.class; + } + + @Override + public void handle(GameEvent event) { + DeathCountEvent DeathCountEvent = (DeathCountEvent) event; + GameObject object = DeathCountEvent.getSource(); + if (object instanceof ControllableUnit) { + LogManager.LOGGER.info(((ControllableUnit) object).getParent().getUsername() + " Death Count " + + Integer.toString(object.getCounter())); + + ((ControllableUnit) object).getParent().getStats().setInt("deathCount", + DeathCountEvent.getCounter()); + } + } +} \ No newline at end of file diff --git a/Plugin Cubot/src/main/java/net/simon987/cubotplugin/event/TotalExecutionTimeEvent.java b/Plugin Cubot/src/main/java/net/simon987/cubotplugin/event/TotalExecutionTimeEvent.java new file mode 100644 index 0000000..14c2707 --- /dev/null +++ b/Plugin Cubot/src/main/java/net/simon987/cubotplugin/event/TotalExecutionTimeEvent.java @@ -0,0 +1,29 @@ +package net.simon987.cubotplugin.event; + +import net.simon987.server.event.GameEvent; +import net.simon987.server.game.objects.GameObject; + +public class TotalExecutionTimeEvent extends GameEvent { + + public TotalExecutionTimeEvent(){ + + } + + public TotalExecutionTimeEvent(GameObject object, double c) { + setSource(object); + if(c>=0){ + object.setTime(c); + }else{ + object.setTime(0); + } + } + + @Override + public GameObject getSource() { + return (GameObject) super.getSource(); + } + + public double getTime() { + return (int) getSource().getTime(); + } +} \ No newline at end of file diff --git a/Plugin Cubot/src/main/java/net/simon987/cubotplugin/event/TotalExecutionTimeListener.java b/Plugin Cubot/src/main/java/net/simon987/cubotplugin/event/TotalExecutionTimeListener.java new file mode 100644 index 0000000..72d1e3d --- /dev/null +++ b/Plugin Cubot/src/main/java/net/simon987/cubotplugin/event/TotalExecutionTimeListener.java @@ -0,0 +1,27 @@ +package net.simon987.cubotplugin.event; + +import net.simon987.server.event.GameEvent; +import net.simon987.server.event.GameEventListener; +import net.simon987.server.game.objects.ControllableUnit; +import net.simon987.server.game.objects.GameObject; +import net.simon987.server.logging.LogManager; + +public class TotalExecutionTimeListener implements GameEventListener { + @Override + public Class getListenedEventType() { + return TotalExecutionTimeEvent.class; + } + + @Override + public void handle(GameEvent event) { + TotalExecutionTimeEvent TotalExecutionTimeEvent = (TotalExecutionTimeEvent) event; + GameObject object = TotalExecutionTimeEvent.getSource(); + if (object instanceof ControllableUnit) { + LogManager.LOGGER.info(((ControllableUnit) object).getParent().getUsername() + " Death Count " + + Double.toString(object.getTime())); + + ((ControllableUnit) object).getParent().getStats().setDouble("totalExecutionTime", + TotalExecutionTimeEvent.getTime()); + } + } +} \ No newline at end of file diff --git a/Plugin Cubot/src/main/java/net/simon987/cubotplugin/event/WalkDistanceEvent.java b/Plugin Cubot/src/main/java/net/simon987/cubotplugin/event/WalkDistanceEvent.java new file mode 100644 index 0000000..cc9bc9f --- /dev/null +++ b/Plugin Cubot/src/main/java/net/simon987/cubotplugin/event/WalkDistanceEvent.java @@ -0,0 +1,31 @@ +package net.simon987.cubotplugin.event; + +import net.simon987.server.event.GameEvent; +import net.simon987.server.game.objects.GameObject; + +public class WalkDistanceEvent extends GameEvent { + + private int count; + + public WalkDistanceEvent(){ + + } + + public WalkDistanceEvent(GameObject object, int c) { + setSource(object); + if(c>=0){ + object.setCounter(c); + }else{ + object.setCounter(0); + } + } + + @Override + public GameObject getSource() { + return (GameObject) super.getSource(); + } + + public int getCounter() { + return (int) getSource().getCounter(); + } +} \ No newline at end of file diff --git a/Plugin Cubot/src/main/java/net/simon987/cubotplugin/event/WalkDistanceListener.java b/Plugin Cubot/src/main/java/net/simon987/cubotplugin/event/WalkDistanceListener.java new file mode 100644 index 0000000..0e24f4b --- /dev/null +++ b/Plugin Cubot/src/main/java/net/simon987/cubotplugin/event/WalkDistanceListener.java @@ -0,0 +1,27 @@ +package net.simon987.cubotplugin.event; + +import net.simon987.server.event.GameEvent; +import net.simon987.server.event.GameEventListener; +import net.simon987.server.game.objects.ControllableUnit; +import net.simon987.server.game.objects.GameObject; +import net.simon987.server.logging.LogManager; + +public class WalkDistanceListener implements GameEventListener { + @Override + public Class getListenedEventType() { + return WalkDistanceEvent.class; + } + + @Override + public void handle(GameEvent event) { + WalkDistanceEvent WalkDistanceEvent = (WalkDistanceEvent) event; + GameObject object = WalkDistanceEvent.getSource(); + if (object instanceof ControllableUnit) { + LogManager.LOGGER.info(((ControllableUnit) object).getParent().getUsername() + " Death Count " + + Integer.toString(object.getCounter())); + + ((ControllableUnit) object).getParent().getStats().setInt("walkDistance", + WalkDistanceEvent.getCounter()); + } + } +} \ No newline at end of file diff --git a/Server/src/main/java/net/simon987/server/game/objects/GameObject.java b/Server/src/main/java/net/simon987/server/game/objects/GameObject.java index b463fa4..fc8715f 100755 --- a/Server/src/main/java/net/simon987/server/game/objects/GameObject.java +++ b/Server/src/main/java/net/simon987/server/game/objects/GameObject.java @@ -43,6 +43,14 @@ public abstract class GameObject implements JSONSerializable, MongoSerializable * Current World of the object */ private World world; + /** + * Counter for user stats + */ + private int counter; + /** + * Execution Time + */ + private double time; public GameObject() { @@ -63,6 +71,9 @@ public abstract class GameObject implements JSONSerializable, MongoSerializable int newX = getX() + direction.dX; int newY = getY() + direction.dY; + counter = 0; + time = 0; + if (newX < 0 || newY < 0 || newX >= world.getWorldSize() || newY >= world.getWorldSize()) { //Next tile is out of world bounds, move to next world World nextWorld = GameServer.INSTANCE.getGameUniverse().getWorld( @@ -230,6 +241,22 @@ public abstract class GameObject implements JSONSerializable, MongoSerializable this.world = world; } + public void setCounter(int c){ + counter=c; + } + + public int getCounter(){ + return counter; + } + + public void setTime(double t){ + time=t; + } + + public double getTime(){ + return time; + } + @Override public JSONObject jsonSerialise() { JSONObject json = new JSONObject(); diff --git a/Server/src/main/java/net/simon987/server/user/UserStats.java b/Server/src/main/java/net/simon987/server/user/UserStats.java index 1d82b40..07da19e 100644 --- a/Server/src/main/java/net/simon987/server/user/UserStats.java +++ b/Server/src/main/java/net/simon987/server/user/UserStats.java @@ -61,6 +61,27 @@ public class UserStats implements MongoSerializable { return stats.getInteger(name, 0); } + /** + * Set the value of a stat + * + * @param name Name of the stat + * @param value new value + */ + public void setDouble(String name, double value) { + + stats.put(name, value); + } + + /** + * Get the value of at stat + * + * @param name Name of the value + * @return The value of the stat. Returns 0 if not found + */ + public double getDouble(String name) { + return stats.getDouble(name); + } + /** * Add an string item to a set * diff --git a/Server/src/main/java/net/simon987/server/web/LeaderBoardPage.java b/Server/src/main/java/net/simon987/server/web/LeaderBoardPage.java index 521b383..742012e 100644 --- a/Server/src/main/java/net/simon987/server/web/LeaderBoardPage.java +++ b/Server/src/main/java/net/simon987/server/web/LeaderBoardPage.java @@ -13,9 +13,12 @@ public class LeaderBoardPage implements TemplateViewRoute { @Override public ModelAndView handle(Request request, Response response) { - Map model = new HashMap<>(2); + Map model = new HashMap<>(5); model.put("session", request.session()); model.put("stats", GameServer.INSTANCE.getUserStatsHelper().getTopNSetLength("completedVaults", 25)); + model.put("stats", GameServer.INSTANCE.getUserStatsHelper().getTopNSetLength("deathCount", 25)); + model.put("stats", GameServer.INSTANCE.getUserStatsHelper().getTopNSetLength("totalExecutionTime", 25)); + model.put("stats", GameServer.INSTANCE.getUserStatsHelper().getTopNSetLength("walkDistance", 25)); return new ModelAndView(model, "leaderboard.vm"); } } \ No newline at end of file diff --git a/Server/src/main/resources/templates/leaderboard.vm b/Server/src/main/resources/templates/leaderboard.vm index 523cbeb..0ae3805 100644 --- a/Server/src/main/resources/templates/leaderboard.vm +++ b/Server/src/main/resources/templates/leaderboard.vm @@ -16,6 +16,9 @@ Player Completed vaults + Death counts + Total execution time (ms) + Walk distance @@ -23,6 +26,9 @@ $row.getKey().getUsername() $row.getValue().size() + $row.getValue().size() + $row.getValue().size() + $row.getValue().size() #end