Added facility to save and read DetailedInfo (DataRecorder data) in XML format using XStream.

This commit is contained in:
Woody Folsom
2012-03-16 15:54:45 -04:00
parent 0ac74b3297
commit 47520126ff
5 changed files with 62 additions and 13 deletions

View File

@@ -4,24 +4,26 @@ import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import com.thoughtworks.xstream.annotations.XStreamOmitField;
import dk.itu.mario.MarioInterface.GamePlay;
import dk.itu.mario.engine.sprites.SpriteTemplate;
import dk.itu.mario.engine.sprites.BulletBill;
import dk.itu.mario.engine.sprites.Enemy;
import dk.itu.mario.engine.sprites.FlowerEnemy;
import dk.itu.mario.engine.sprites.Mario;
import dk.itu.mario.engine.sprites.Shell;
import dk.itu.mario.engine.sprites.Sprite;
import dk.itu.mario.level.Level;
import dk.itu.mario.engine.sprites.SpriteTemplate;
import dk.itu.mario.level.RandomLevel;
import dk.itu.mario.scene.LevelScene;
import dk.itu.mario.engine.sprites.FlowerEnemy;
public class DataRecorder {
public boolean recording = true;
@XStreamOmitField
private RandomLevel level;
private boolean []keys, keyPressed;
@XStreamOmitField
private LevelScene levelScene;
/**
@@ -213,7 +215,6 @@ public class DataRecorder {
}
private boolean timeStopped = true;
private long endGRight;
public void endTime(){
if(timeStopped == false){
@@ -424,7 +425,6 @@ public class DataRecorder {
public void fireKillRecord(Sprite sprite){
killRecord(sprite);
int enemyType = 0;
if(sprite instanceof FlowerEnemy){
detailedLog += "FireKill: EnemyType = FlowerEnemy time = "+ (2982 - levelScene.timeLeft);
detailedLog += "\n";
@@ -668,7 +668,7 @@ public class DataRecorder {
printEnd();
}
private void printDeaths(){
private void printDeaths() {
printStart("Player Died Against");
int deathsTotal = 0;
@@ -789,7 +789,7 @@ public class DataRecorder {
public void fillGamePlayMetrics(RandomLevel level){
GamePlay gpm = new GamePlay();
gpm.completionTime = getCompletionTime();
gpm.totalTime = getTotalTime();////sums all the time, including from previous games if player died
gpm.totalTime = getTotalTime();
gpm.jumpsNumber = getTimesJumped();
gpm.timeSpentDucking = getTotalDuckTime();
gpm.duckNumber = getTimesDucked();
@@ -838,7 +838,7 @@ public class DataRecorder {
gpm.write("player.txt");
System.out.println(detailedLog);
write(detailedLog);
writeXML();
}
@@ -854,11 +854,26 @@ public class DataRecorder {
}
}
private void writeXML() {
try {
FileWriter file = new FileWriter(new File("DetailedInfo.xml"));
file.write(toXML());
file.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public int getCompletionTime(){
return convertTime(completionTime);
}
/**
* Sums all the time, including from previous games if player died
* @return
*/
public int getTotalTime(){
return convertTime(totalTime);
}
@@ -976,6 +991,14 @@ public class DataRecorder {
return (double)getTotalLargeTime()/(double)getTotalTime();
}
public static DataRecorder fromXML(File file) throws IOException {
return (DataRecorder) XStreamFactory.getInstance().fromXML(file);
}
public String toXML() {
return XStreamFactory.getInstance().toXML(this);
}
/**
* Time in tiny mario form
* @return

View File

@@ -0,0 +1,14 @@
package dk.itu.mario.engine;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
public class XStreamFactory {
public static XStream getInstance() {
XStream xstream = new XStream(new DomDriver());
xstream.processAnnotations(DataRecorder.class);
return xstream;
}
}