// $Source: /usr/local/SimSoft/Sfx3D/src/gsl/ftsver.h,v $
// $Revision: 1.2 $
// $Author: baum $
// $Date: 2001/11/29 15:18:09 $
//
// Login name of the user who locked the revision
// $Locker:  $
// Tag name used to checkout the file
// $Name:  $
// State assigned to revision
// $State: Exp $
//
//
// $Log: ftsver.h,v $
// Revision 1.2  2001/11/29 15:18:09  baum
// -Realzeitsteuerung eingebaut
// -Handsteuerung eingebaut
//

#ifndef _FTSVER_H
#define _FTSVER_H  1

#include "fts.h"
#include "Token.h"
#include "DynArray.h"

#include "baustein.h"
#include "Vec3D.h"
//#include "ftsnetz.h"


#ifdef _FTSVER_CPP
#  undef _impexp
#  define _impexp __declspec(dllexport)
#elif defined BUILD_MAIN_DLL
#  undef _impexp
#  define _impexp 
#else
#  undef _impexp
#  define _impexp __declspec(dllimport)
#endif

#if defined __GNUC__ || defined __hpux
#  undef _impexp
#  define _impexp
#endif

class typNetzKnoten;
class typFtsWagen;
class typNetzBaustein;
//---------------------------------------------------------
// Klasse typFtsVerwalter
//---------------------------------------------------------

class _impexp typFtsVerwalter : public typBaustein {
  public:
    typFtsVerwalter (unsigned n, unsigned b);
    virtual ~typFtsVerwalter ();


    virtual void typTPVlesen (InputFile& file);
    // folgende Zeile nicht noetig, Ableitung aus typBaustein
    //virtual ostream& typTPVschreiben (ostream& ostrm) const;
    //virtual void typTSTlesen (InputFile& file);

    void inAktivListe (typFtsWagen* Wagen);
    void inPassivListe (typFtsWagen* Wagen);
    virtual void aktivieren (unsigned vonWem);
    virtual bool     hasKapazitaet (typTransportEinheit*) const;
    virtual unsigned Kapazitaet    		() const;

    typNetzKnoten* suchKnoten(typBaustein* Bst);
		// Eingefügt lar 07.09.00
    void Netzbau (typNetzBaustein* Bst);
    typFtsWagen* findeFreienWagen (typMeldung* zMeldung);

  private:
		void Netzbesetzung (); //lar 14.09.00
    virtual void individuellAktivieren (typBaustein* vonWem);

    DynArray<typFtsWagen> ObjFtsWagen;

    DynArray<typNetzKnoten> GKnotenliste;

    typMeldung* findeAusfuehrbareMeldung (typFtsVerwalter* who);

    float Vorschau, SicherAbstand;
    Vec3D meinePosition;
    Vec3D WagenPosition;
		
    // friends
    friend class typFtsWagen;

};
#endif
