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

1
.gitignore vendored
View File

@@ -15,4 +15,5 @@ docs
.classpath
player.txt
DetailedInfo.txt
DetailedInfo.xml
*.png

BIN
lib/xstream-1.4.2.jar Normal file

Binary file not shown.

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;
}
}

View File

@@ -2,6 +2,7 @@ package dk.itu.mario.scene;
import java.awt.GraphicsConfiguration;
import java.io.DataInputStream;
import java.io.File;
import java.io.IOException;
import dk.itu.mario.MarioInterface.GamePlay;
@@ -48,8 +49,18 @@ public class LevelSceneCustom extends LevelScene {
currentLevel = (Level) clg.generateLevel(gp);
String detailedInfo = FileHandler.readFile("DetailedInfo.txt");
//TODO parse DetailedInfo
System.out.println("DetailedInfo: " + detailedInfo);
File xmlInfoFile = new File("DetailedInfo.xml");
if (xmlInfoFile.exists()) {
try {
DataRecorder dataRecorder = DataRecorder.fromXML(xmlInfoFile);
System.out.println("DetailedInfo (from xml file): " + detailedInfo);
} catch (IOException ioe) {
ioe.printStackTrace();
}
} else {
System.out.println("DetailedInfo (from txt file): " + detailedInfo);
}
try {
level = currentLevel.clone();
@@ -57,7 +68,7 @@ public class LevelSceneCustom extends LevelScene {
e.printStackTrace();
}
//TODO change this
// TODO change this
// level is always overground
Art.startMusic(2);