/*
 * Created on 26-Jan-2005 by @author fischer
 */
package de.unidue.is.prog.woche13;

/**
 * Lösung Aufgabe 27, Blatt 13
 * 
 * Ein Radfahrer, als Verkehrsteilnehmer immer auf dem Rad,
 * außer wenn gerade Fahren verboten ist.
 * 
 * @author fischer
 */
public class Radfahrer extends Mensch {
	
	/** Jeder Radfahrer hat ein Fahrrad.
	 *  Wird im Konstruktor initialisiert.
	 */
	private Fahrrad meinRad;
	
	/** Ist der Radfahrer gerade auf dem Rad, oder schiebt er? */
	private boolean aufDemRad;

	/**
	 * Erstellt einen Radfahrer mit einem Namen und erzeugt das
	 * dazugehörige Fahrrad. Der Name wird dabei an den Konstruktor
	 * der Oberklasse übergeben. Standardmäßig sitzt der Radfahrer auf
	 * seinem Rad, bewegt sich also fahrend fort.
	 * 
	 * @param name Der Name des Radfahrers
	 * @see Mensch 
	 */
	public Radfahrer(String name) {
		super(name);
		meinRad=new Fahrrad();
		meinRad.setBesitzer(this);
		aufDemRad=true; // der Radfahrer sitzt standardmäßig auf dem Rad
	}
	
	/**
	 * Simuliert das Aufsteigen. Nach dieser Methode sitzt der Radfahrer
	 * auf jeden Fall auf dem Rad.
	 */
	public void aufsteigen() {
		aufDemRad=true;
		System.out.println("["+getName()+" steigt auf.]");
	}
	
	/**
	 * Simuliert das Absteigen. Nach dieser Methode schiebt der Radfahrer
	 * sein Rad und geht zu Fuß.
	 */
	public void absteigen() {
		aufDemRad=false;
		System.out.println("["+getName()+" steigt ab.]");
	}
	
	/**
	 * Simuliert die Fortbewegung über eine bestimmte Anzahl von Kilometern,
	 * wobei ein Radfahrer entweder fährt, oder zu Fuß geht. Wenn der Radfahrer
	 * gerade auf dem Rad sitzt, dann fährt er, ansonsten geht er.
	 * 
	 * @param strecke Die Anzahl der zurückgelegten Kilometer.
	 * @see Verkehrsteilnehmer
	 */
	public void fortbewegen(int strecke) {
		if (aufDemRad)
			meinRad.fahren(strecke); // Fortbewegung wird ans Fahrrad delegiert
		else gehen(strecke);
	}
	
	/**
	 * Stellt die Beschaffenheit der Umgebung ein, in der sich der Radfahrer
	 * bewegt. Falls dort Fahren erlaubt ist, und der Radfahrer noch nicht auf
	 * dem rad sitzt, so steigt er auf. Falls Fahren nicht erlaubt ist, der
	 * Radfahrer aber noch auf dem Rad sitzt, so steigt er ab.
	 * 
	 * @param fahrenErlaubt Ist Fahren gerade erlaubt?
	 * @see Verkehrsteilnehmer
	 */
	public void setUmgebung(boolean fahrenErlaubt) {
		if (aufDemRad && !fahrenErlaubt)
			absteigen();
		else
		if (!aufDemRad && fahrenErlaubt)
			aufsteigen();
	}
	
	/**
	 * Fragt den Radfahrer nach seiner aktuellen Höchstgeschwindigkeit als
	 * Verkehrsteilnehmer. Notwendig, damit ein Radfahrer auch
	 * Verkehrsteilnehmer sein kann. Je nachdem, ob er fährt oder zu Fuß
	 * geht, hat der Radfahrer verschiedene Höchstgeschwindigkeiten.
	 * 
	 * @return Die Höchstgeschwindigkeit des Radfahrers.
	 * @see Verkehrsteilnehmer
	 */
	public int getHoechstgeschwindigkeit() {
		if (aufDemRad)
			return meinRad.getHoechstgeschwindigkeit();
		else return super.getHoechstgeschwindigkeit();
	}
}
