/*
* Datei: RobSnapshot.java
* Autor(en): Lukas K�nig
* Java-Version: 1.4
* Erstellt (vor): 31.03.2008
*
* (c) Lukas K�nig, die Datei unterliegt der LGPL
* -> http://www.gnu.de/lgpl-ger.html
*/
package fmg.fmg8.statistik;
import java.io.Serializable;
import fmg.fmg8.endlAutomat.RobCode;
import fmg.fmg8.endlAutomat.conditions.Condition;
import fmg.fmg8.sonstiges.SonstMeth;
import fmg.fmg8.umgebung2D.Roboter;
import fmg.fmg8.umgebung2D.Vektor2D;
/**
* Klasse zur Beschreibung eines Roboterschnappschusses, der Informationen
* zur Rekonstruktion eines Roboters mit Automat und Position auf dem Feld
* enth�lt. Der Roboter wird jedoch nicht mit allen Konstanten und Attributen
* gespeichert, sondern nur mit denen, bei denen im Lauf einer Simulation
* mit �nderungen zu rechnen ist (bspw. wird die Ausdehnung eines Roboters
* oder die Einstellung seiner Sensoren nicht gespeichert).
*
* @author Lukas K�nig
*/
public class RobSnapshot extends RobCode implements Serializable {
/**
* Die VersionsID vom 31.03.08.
*/
private static final long serialVersionUID = -8297770286453865871L;
/**
* Die Sensoren.
*/
private int[] sensoren;
/**
* Die Position.
*/
private Vektor2D position;
/**
* Der Blickwinkel.
*/
private double winkel;
/**
* Die Breite des Roboters.
*/
private double breite;
/**
* Die L�nge des Roboters.
*/
private double laenge;
/**
* Der Zustand, in dem sich der Roboter aktuell befindet.
*/
private int zustand;
/**
* Konstruktor, der einen Schnappschuss aufgrund von separat von einem
* vorhandenen Roboterobjekt gegebenen Daten erzeugt.
*
* @param idNum Die Identifikationsnummer.
* @param bewertungen Die Bewertungen.
* @param vSequenzen Die echten Sequenzen der Verhaltensautomaten.
* @param vStdSequenzen Die Standardsequenzen der Verhaltensautomaten.
* @param conditions Die Bedingungen.
* @param tSequenzen Die echten Sequenzen der Translatoren.
* @param tStdSequenzen Die Translatoren als Standardcode.
* @param sens Die Sensoren.
* @param pos Position des Roboters.
* @param wink Der Blickwinkel des Roboters.
* @param zust Der aktuelle Zustand des Roboters.
* @param breit Breite.
* @param lang L�nge.
*/
private RobSnapshot(final int idNum,
final int[] bewertungen,
final String[] vSequenzen,
final String[] vStdSequenzen,
final Condition[] conditions,
final String[] tSequenzen,
final String[] tStdSequenzen,
final int[] sens,
final Vektor2D pos,
final double wink,
final int zust,
final double breit,
final double lang) {
super(
idNum,
bewertungen,
vStdSequenzen,
conditions,
tStdSequenzen,
tSequenzen,
vSequenzen);
this.sensoren = new int[sens.length];
for (int i = 0; i < sens.length; i++) {
this.sensoren[i] = sens[i];
}
this.position = new Vektor2D(pos.x, pos.y);
this.winkel = wink;
this.zustand = zust;
this.breite = breit;
this.laenge = lang;
}
/**
* Konstruktor, der die Informationen f�r den Schnappschuss aus einem
* vorhandenen Roboterobjekt extrahiert.
*
* @param rob Der Roboter, von dem ein Schnappschuss erzeugt
* werden soll.
* @param automaten Ob die Automaten (und Bedingungen) auch gespeichert
* werden sollen.
*/
public RobSnapshot(final Roboter rob, final boolean automaten) {
this(rob.getId(),
rob.getFitness(),
SonstMeth.erzeugeSeqs(
SonstMeth.stringAusListSeqs(rob.getVerhCodes()),
automaten),
SonstMeth.erzeugeSeqs(rob.erzeugeStrSeqs(), automaten),
SonstMeth.erzeugeConds(rob.getConds(), automaten),
SonstMeth.erzeugeSeqs(
SonstMeth.stringAusListSeqs(rob.getTransCodes()),
automaten),
rob.getTransStdCodes(),
rob.getSensorWerte(),
rob.getPosition(),
rob.getWinkel(),
RobSnapshot.findeAktZust(rob),
rob.getAusd().x,
rob.getAusd().y);
}
/**
* Gibt die Zustandsnummer eines Roboters zur�ck, falls er sich in einem
* g�ltigen Zustand befindet, -1 sonst.
*
* @param rob Der Roboter.
*
* @return Die Zustandsnummer oder -1.
*/
private static int findeAktZust(final Roboter rob) {
int zuSt = -1;
if (rob.getAktZustand() != null) {
zuSt = ((Integer) rob.getAktZustand().holeName()).intValue();
}
return zuSt;
}
/**
* @return Returns the sensoren.
*/
public int[] getSensoren() {
return this.sensoren;
}
/**
* @return Returns the position.
*/
public Vektor2D getPosition() {
return this.position;
}
/**
* @return Returns the winkel.
*/
public double getWinkel() {
return this.winkel;
}
/**
* @return Returns the zustand.
*/
public int getZustand() {
return this.zustand;
}
/**
* @return Breite.
*/
public double getBreite() {
return this.breite;
}
/**
* @return L�nge.
*/
public double getLaenge() {
return this.laenge;
}
}