Added facility to save and read DetailedInfo (DataRecorder data) in XML format using XStream.
This commit is contained in:
@@ -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
|
||||
|
||||
14
src/dk/itu/mario/engine/XStreamFactory.java
Normal file
14
src/dk/itu/mario/engine/XStreamFactory.java
Normal 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;
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user