Time function added

This commit is contained in:
Woosle Park 2019-04-11 01:59:11 -04:00
parent 89f53a159a
commit ba549c6012
15 changed files with 68 additions and 199 deletions

View File

@ -103,16 +103,6 @@ public class Cubot extends GameObject implements Updatable, ControllableUnit, Me
private Map<Integer, HardwareModule> hardwareAddresses = new HashMap<>();
private Map<Class<? extends HardwareModule>, Integer> hardwareModules = new HashMap<>();
/**
* In game timer
*/
private int time;
/**
* Real Life Timer for getting execution time
*/
private RealLifeTimer timer;
/**
* Cubot's brain box
*/
@ -140,10 +130,6 @@ public class Cubot extends GameObject implements Updatable, ControllableUnit, Me
shield = document.getInteger("shield");
setDirection(Direction.getDirection(document.getInteger("direction")));
timer = new RealLifeTimer();
timer.run();
time = timer.getTime();
IServerConfiguration config = GameServer.INSTANCE.getConfig();
maxHp = config.getInt("cubot_max_hp");
maxShield = config.getInt("cubot_max_shield");
@ -173,12 +159,6 @@ public class Cubot extends GameObject implements Updatable, ControllableUnit, Me
*/
@Override
public void update() {
int executionTime = timer.getTime();
if(executionTime > time && currentAction != Action.IDLE){
GameEvent event1 = new ExecutionTimeEvent(this, executionTime - time);
GameServer.INSTANCE.getEventDispatcher().dispatch(event1);
}
time = executionTime;
if (currentAction == Action.WALKING) {
if (spendEnergy(100)) {
@ -186,7 +166,7 @@ public class Cubot extends GameObject implements Updatable, ControllableUnit, Me
//Couldn't walk
currentAction = Action.IDLE;
}else{
GameEvent event2 = new WalkDistanceEvent(this);
GameEvent event2 = new WalkEvent(this);
GameServer.INSTANCE.getEventDispatcher().dispatch(event2);
}
} else {
@ -289,7 +269,6 @@ public class Cubot extends GameObject implements Updatable, ControllableUnit, Me
currentStatus = 0;
lastStatus = 0;
addStatus(CubotStatus.FACTORY_NEW);
time = timer.getTime();
for (HardwareModule module : hardwareAddresses.values()) {
module.reset();
@ -298,7 +277,7 @@ public class Cubot extends GameObject implements Updatable, ControllableUnit, Me
@Override
public boolean onDeadCallback() {
GameEvent event = new DeathCountEvent(this);
GameEvent event = new DeathEvent(this);
GameServer.INSTANCE.getEventDispatcher().dispatch(event);
reset();

View File

@ -19,9 +19,8 @@ public class CubotPlugin extends ServerPlugin {
listeners.add(new PutItemCommandListener());
listeners.add(new PopItemCommandListener());
//Leaderboard
listeners.add(new DeathCountListener());
listeners.add(new ExecutionTimeListener());
listeners.add(new WalkDistanceListener());
listeners.add(new DeathListener());
listeners.add(new WalkListener());
GameRegistry registry = gameServer.getRegistry();

View File

@ -1,32 +0,0 @@
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 {
private int count = 0;
@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) {
count = ((ControllableUnit) object).getParent().getStats().getInt("deathCount");
count++;
LogManager.LOGGER.info(((ControllableUnit) object).getParent().getUsername() + " Death Count " +
Integer.toString(count));
((ControllableUnit) object).getParent().getStats().setInt("deathCount",
count);
}
}
}

View File

@ -3,9 +3,9 @@ package net.simon987.cubotplugin.event;
import net.simon987.server.event.GameEvent;
import net.simon987.server.game.objects.GameObject;
public class DeathCountEvent extends GameEvent {
public class DeathEvent extends GameEvent {
public DeathCountEvent(GameObject object) {
public DeathEvent(GameObject object) {
setSource(object);
}

View File

@ -0,0 +1,25 @@
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 DeathListener implements GameEventListener {
@Override
public Class getListenedEventType() {
return DeathEvent.class;
}
@Override
public void handle(GameEvent event) {
DeathEvent DeathEvent = (DeathEvent) event;
GameObject object = DeathEvent.getSource();
if (object instanceof ControllableUnit) {
((ControllableUnit) object).getParent().getStats().incrementStat("death",
1);
}
}
}

View File

@ -1,23 +0,0 @@
package net.simon987.cubotplugin.event;
import net.simon987.server.event.GameEvent;
import net.simon987.server.game.objects.GameObject;
public class ExecutionTimeEvent extends GameEvent {
private int Time = 0;
public ExecutionTimeEvent(GameObject object, int time) {
setSource(object);
this.Time = time;
}
public int getTime(){
return this.Time;
}
@Override
public GameObject getSource() {
return (GameObject) super.getSource();
}
}

View File

@ -1,33 +0,0 @@
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 ExecutionTimeListener implements GameEventListener {
private int count = 0;
@Override
public Class getListenedEventType() {
return ExecutionTimeEvent.class;
}
@Override
public void handle(GameEvent event) {
ExecutionTimeEvent executionTimeEvent = (ExecutionTimeEvent) event;
GameObject object = executionTimeEvent.getSource();
if (object instanceof ControllableUnit) {
count = ((ControllableUnit) object).getParent().getStats().getInt("executionTime");
count += executionTimeEvent.getTime();
LogManager.LOGGER.info(((ControllableUnit) object).getParent().getUsername() + " Execution Time " +
count);
((ControllableUnit) object).getParent().getStats().setInt("executionTime",
count);
}
}
}

View File

@ -1,39 +0,0 @@
package net.simon987.cubotplugin.event;
import java.util.Timer;
import java.util.TimerTask;
public class RealLifeTimer{
private int time;
private Timer timer;
public RealLifeTimer(){
timer = new Timer();
time = 0;
}
public RealLifeTimer(int startTime){
timer = new Timer();
time = startTime;
}
public void run(){
timer.scheduleAtFixedRate(new TimerTask() {
public void run(){
time++;
}
},0,1);
}
public void stop(){
timer.cancel();
timer.purge();
}
public int getTime(){
return this.time;
}
}

View File

@ -1,39 +0,0 @@
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;
import net.simon987.server.user.UserStats;
public class WalkDistanceListener implements GameEventListener {
private int count = 0;
private int deaths = 0;
@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) {
//When cubot dies walk counter resets
if(deaths<((ControllableUnit) object).getParent().getStats().getInt("deathCount")){
count = 0;
deaths = ((ControllableUnit) object).getParent().getStats().getInt("deathCount");
}
count++;
LogManager.LOGGER.info(((ControllableUnit) object).getParent().getUsername() + " walk distance " +
count);
//Walk distance is only saved if higher than current hightest distance for user
if(count>((ControllableUnit) object).getParent().getStats().getInt("walkDistance"))
((ControllableUnit) object).getParent().getStats().setInt("walkDistance",
count);
}
}
}

View File

@ -3,9 +3,9 @@ package net.simon987.cubotplugin.event;
import net.simon987.server.event.GameEvent;
import net.simon987.server.game.objects.GameObject;
public class WalkDistanceEvent extends GameEvent {
public class WalkEvent extends GameEvent {
public WalkDistanceEvent(GameObject object) {
public WalkEvent(GameObject object) {
setSource(object);
}

View File

@ -0,0 +1,26 @@
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;
import net.simon987.server.user.UserStats;
public class WalkListener implements GameEventListener {
@Override
public Class getListenedEventType() {
return WalkEvent.class;
}
@Override
public void handle(GameEvent event) {
WalkEvent WalkEvent = (WalkEvent) event;
GameObject object = WalkEvent.getSource();
if (object instanceof ControllableUnit) {
((ControllableUnit) object).getParent().getStats().incrementStat("walkDistance",
1);
}
}
}

View File

@ -176,6 +176,8 @@ public class GameServer implements Runnable {
user.getControlledUnit().getCpu().reset();
int cost = user.getControlledUnit().getCpu().execute(timeout);
user.getControlledUnit().spendEnergy(cost);
user.addTime(cost);
} catch (Exception e) {
LogManager.LOGGER.severe("Error executing " + user.getUsername() + "'s code");
e.printStackTrace();

View File

@ -70,6 +70,10 @@ public class User implements MongoSerializable {
return user;
}
public void addTime(int time){
this.stats.incrementStat("executionTime", time);
}
public String getUserCode() {
return userCode;
}

View File

@ -58,7 +58,7 @@ public class UserStatsHelper {
ArrayList<Map.Entry<User, Map<String, Integer>>> rows = new ArrayList<>();
ArrayList<Map.Entry<User, ArrayList>> vaults = new ArrayList<>(this.getTopNSetLength("completedVaults", n));
ArrayList<Map.Entry<User, Integer>> deaths = new ArrayList<>(this.getTopN("deathCount", n));
ArrayList<Map.Entry<User, Integer>> deaths = new ArrayList<>(this.getTopN("death", n));
ArrayList<Map.Entry<User, Integer>> time = new ArrayList<>(this.getTopN("executionTime", n));
ArrayList<Map.Entry<User, Integer>> distance = new ArrayList<>(this.getTopN("walkDistance", n));
@ -66,7 +66,7 @@ public class UserStatsHelper {
User user = vaults.get(i).getKey();
Map<String, Integer> allStats = new HashMap();
allStats.put("completedVaults", vaults.get(i).getValue().size());
allStats.put("deathCount", deaths.get(i).getValue());
allStats.put("death", deaths.get(i).getValue());
allStats.put("executionTime", time.get(i).getValue());
allStats.put("walkDistance", distance.get(i).getValue());
rows.add(new AbstractMap.SimpleEntry<>(user, allStats));

View File

@ -26,7 +26,7 @@
<tr>
<td>$row.getKey().getUsername()</td>
<td>$row.getValue().get("completedVaults")</td>
<td>$row.getValue().get("deathCount")</td>
<td>$row.getValue().get("death")</td>
<td>$row.getValue().get("executionTime")</td>
<td>$row.getValue().get("walkDistance")</td>
</tr>