// $Source: /usr/local/SimSoft/Sfx3D/src/gsl/querfoer.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: querfoer.h,v $
// Revision 1.2  2001/11/29 15:18:09  baum
// -Realzeitsteuerung eingebaut
// -Handsteuerung eingebaut
//

#ifndef _QUERFOER_H
#define _QUERFOER_H     1

#include "baustein.h"
#include "kettfoer.h"


#ifdef _QUERFOER_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 _impexp typQuerfoerderer : public typBaustein {

 public :
   bool belegt;
   bool abgabevonMeinKett;

   typQuerfoerderer                     (int n, int b);
   virtual ~typQuerfoerderer            ();
   virtual void typTTPlesen             (InputFile& file);
   virtual bool hasKapazitaet           (typTransportEinheit* zW) const;
   virtual void a_aufnehmen             ();
   virtual void e_aufnehmen             ();
   void a_heben                         ();
   void e_heben                         ();
   void a_senken                        ();
   void e_senken                        ();
   virtual void a_abgeben               ();
   virtual void e_abgeben               ();
   virtual void individuellAktivieren   (typBaustein* vonWem);
   virtual typPlatz* waehlePlatz        (typTransportEinheit*);
   virtual typTransportEinheit* gibTransportEinheit (typMeldung* zM);
   void setzeMeinenKettenfoerderer(typBaustein* mein);
   void KettenGliedIstBelegt             ();
   void KettenGliedIstFrei               ();
   bool sucheMeldung                     (const typBaustein* von);
   Vec3D Laenge (const Vec3D& globalDir) const;
   virtual Vec3D UebernahmePos           (const typBaustein& von)  const;
   virtual Vec3D UebergabePos            (const typBaustein& nach) const;
   void setzeSpezUebergabePosition       (Vec3D vec);
   Vec3D  SpezUebergabePosition          ();
   void setzeObjFoerderRichtungKett      (Vec3D vec);
   Vec3D FoerderRichtungKett             ();
   bool rabgesenkt                       ();
 private :
   Vec3D ObjFoerderRichtungKett;
   SimTime ObjHubzeit;  // Zeit fuer heben = Zeit fuer senken
   //bool belegt;
   typBaustein* MeinNaechsterBaustein;
   typBaustein* ObjMeinKettenfoerderer;
   bool KettenfoerdererBelegt;
   Vec3D UebergabePosAnKett;
   bool abgesenkt;

   typMeldung* findeAusfuehrbareMeldung ();
   virtual void wartenaufnehmen (typTransportEinheit* zW, typBaustein* vonWem);
}; // typQuerfoerderer

#endif /* _CFFSQUER_H */

