diff --git a/.gitignore b/.gitignore index d3e1669..ed864af 100644 --- a/.gitignore +++ b/.gitignore @@ -15,4 +15,5 @@ docs .classpath player.txt DetailedInfo.txt +DetailedInfo.xml *.png \ No newline at end of file diff --git a/lib/xstream-1.4.2.jar b/lib/xstream-1.4.2.jar new file mode 100644 index 0000000..fa8e2ed Binary files /dev/null and b/lib/xstream-1.4.2.jar differ diff --git a/src/dk/itu/mario/engine/DataRecorder.java b/src/dk/itu/mario/engine/DataRecorder.java index bd459f6..debf93b 100644 --- a/src/dk/itu/mario/engine/DataRecorder.java +++ b/src/dk/itu/mario/engine/DataRecorder.java @@ -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 diff --git a/src/dk/itu/mario/engine/XStreamFactory.java b/src/dk/itu/mario/engine/XStreamFactory.java new file mode 100644 index 0000000..14dada3 --- /dev/null +++ b/src/dk/itu/mario/engine/XStreamFactory.java @@ -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; + } +} diff --git a/src/dk/itu/mario/scene/LevelSceneCustom.java b/src/dk/itu/mario/scene/LevelSceneCustom.java index a7edaa5..3e25681 100644 --- a/src/dk/itu/mario/scene/LevelSceneCustom.java +++ b/src/dk/itu/mario/scene/LevelSceneCustom.java @@ -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);