#include <iostream.h>
#include "abflug.h"
#include "ort.h"
#include "ggstde.h"
#include "plan.h"

extern Ort Snackbar;	// Spezielle Handlung bei Bewegung
extern Ort Sicherheit;	// Spezielle Handlung bei Bewegung
extern Gegenstaende PersoenlicheGegenstaende;	// Verweist auf die persönlichen Gegenstände
extern Plan FlugInfo;


void Ort::Init(Ort *INorden,
		    Ort *IOsten,
		    Ort *ISueden,
		    Ort *IWesten,
		    char *LokaleNachricht,
		    char *LokaleSchauNachricht)
{
   NachNorden = INorden;
   NachOsten = IOsten;
   NachSueden = ISueden;
   NachWesten = IWesten;
   Nachricht = LokaleNachricht;
   SchauNachricht = LokaleSchauNachricht;
}


Ort *Ort::Geh(Wort Richtung)
{
int GehNicht = FALSE;

						  // Raus aus der Snackbar
   if ((this == &Snackbar) && (PersoenlicheGegenstaende.GegenstandHier(Geld)) &&
						(PersoenlicheGegenstaende.GegenstandHier(Konfekt)))
   {
	cout <<
	"Sie haben Konfekt genommen, aber nicht bezahlt. Die Sicherheits-\n"
	"leute fassen Sie und nachdem sie Sie gruendlich beschimpft haben\n"
	"wollen sie Sie gehen lassen, wenn Sie nur bezahlen oder zurueckgeben.\n";
   }

							 // Durch die Sicherheit
   else if ((this == &Sicherheit) && (Richtung == Norden) &&
					    ((PersoenlicheGegenstaende.GegenstandHier(Schluessel)) ||
					     (PersoenlicheGegenstaende.GegenstandHier(Geld))))
   {
	cout <<
	"Sie kommen nicht durch die Sicherheitskontrolle, weil der\n"
	"Alarmgeber Metall entdeckt. Die Leute starren Sie an und\n"
	"halten Sie fuer sehr gefaehrlich.\n";
   }

							 // Geh wo immerhin
   else
   {
	switch (Richtung)
	{
	   case Norden : if (NachNorden)
				 return (NachNorden);	// Ort im Norden
			    else
				 GehNicht = TRUE;       // Dahin nicht!
			    break;
	   case Osten  : if (NachOsten)
				 return (NachOsten);	// Ort im Osten
			    else
				 GehNicht = TRUE;       // Dahin nicht!
			    break;
	   case Sueden : if (NachSueden)
				 return (NachSueden);	// Ort im Süden
			    else
				 GehNicht = TRUE;       // Dahin nicht!
			    break;
	   case Westen  : if (NachWesten)
				 return (NachWesten);	// Ort im Westen
			    else
				 GehNicht = TRUE;       // Dahin nicht!
			    break;
	   default	  : cout << "Das geht nicht.\n";
			    return(NULL);
	}
   }
   if (GehNicht) cout << "Leider, dorthin koennen Sie nicht!\n";
   return (NULL);
}


	  // Dies fügt dem Gegenstaende Objekt des Ortes einen hinzu
void Ort::GegenstandHinzu(Wort Gegenstand)
{
   GegenstaendeListe.GegenstandHinzu(Gegenstand);
}


	  // Dies entfernt einen Gegenstand von der Liste
void Ort::GegenstandWeg(Wort Gegenstand)
{
   GegenstaendeListe.GegenstandWeg(Gegenstand);
}



	   // Gibt TRUE zurück, wenn Gegenstand hier
char Ort::GegenstandHier(Wort Gegenstand)
{
   return (GegenstaendeListe.GegenstandHier(Gegenstand));
}


	  // Dies gibt beim Betreten des Raumes die Nachricht
	  // aus und am Gate auch die Fluginformation
void Ort::ZeigeNachricht()
{
   cout << Nachricht;
}


	  // Dies zeigt die Gegenstände in diesem Raum
void Ort::ZeigeGegenstaendeliste(void)
{
   cout << SchauNachricht;
   GegenstaendeListe.ZaehleGegenstaendeImRaum();
   FlugInfo.GateNachricht(this);	// Zeige die Fluginformation
						//  wenn an einem Gate
}
