This commit is contained in:
Woosle Park 2019-03-25 22:39:21 -04:00
parent c50cc8c364
commit 5b019b3e63
11 changed files with 248 additions and 1 deletions

View File

@ -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

View File

@ -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();
}
}

View File

@ -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());
}
}
}

View File

@ -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();
}
}

View File

@ -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());
}
}
}

View File

@ -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();
}
}

View File

@ -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());
}
}
}

View File

@ -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();

View File

@ -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
*

View File

@ -13,9 +13,12 @@ public class LeaderBoardPage implements TemplateViewRoute {
@Override
public ModelAndView handle(Request request, Response response) {
Map<String, Object> model = new HashMap<>(2);
Map<String, Object> 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");
}
}

View File

@ -16,6 +16,9 @@
<tr>
<th>Player</th>
<th>Completed vaults</th>
<th>Death counts</th>
<th>Total execution time (ms)</th>
<th>Walk distance</th>
</tr>
</thead>
<tbody>
@ -23,6 +26,9 @@
<tr>
<td>$row.getKey().getUsername()</td>
<td>$row.getValue().size()</td>
<td>$row.getValue().size()</td>
<td>$row.getValue().size()</td>
<td>$row.getValue().size()</td>
</tr>
#end
</tbody>