#include <KSGSStandart.h>

var int besitzStatus;
var int erwerbbarStatus;
var Bild goldBild;
var Bild silberBild;
var Bild kupferBild;

class TextErscheinen
{
private:
	var TextFeld beschreibung;
	var Text txt;
	var int num;
	var int län;
	var double z;
public:
	func void init( int besitzStatus )
	{
		initTextFeld( beschreibung, 5, 5, 545, 180, "", 0x101 );
		txt = "Dies ist eine Karte für das Spiel Linie\n";
		txt += "Maximale Spieleranzahl: 10\n";
		txt += "Teamanzahl: 10\n";
		txt += "Maximale Spieler pro Team: 1\n";
		txt += "Spieltyp: Alle gegen Alle\n";
		if( besitzStatus == 1 )
		{
			txt += "Du besitzt die Testversion dieser Karte.\n";
			txt += "Anzahl verbleibender Spiele: ";
			txt += Rückruf( "GetTestVersionVerbleibend" );
		}
		if( besitzStatus == 2 )
		{
			txt += "Du besitzt die Vollversion dieser Karte.";
		}
		län = txt.getLänge();
		num = 0;
		z = 0;
	}
	func bool next( double zeit )
	{
		z += zeit;
		if( ( z > 0.03 ) && ( num < län ) )
		{
			var Text t;
			t = beschreibung.getText();
			while( z > 0.03 )
			{
				z -= 0.03;
				t.anhängen( txt.getTeilText( num, num + 1 ) );
				num += 1;
				if( num < län )
				{
					break;
				}
			}
			beschreibung.setText( t );
			return true;
		}
		return false;
	}
	func void render( Bild b )
	{
		beschreibung.render( b );
	}
};

class TestVersion
{
private:
	var double y;
	var int x;
	var double yS;
	var int alpha;
	var TextFeld tve;
	var TextFeld tvkosten;
	var TextFeld tvGoldTF;
	var TextFeld tvSilberTF;
	var TextFeld tvKupferTF;
	var BildO tvGoldBildO;
	var BildO tvSilberBildO;
	var BildO tvKupferBildO;
	var Knopf tvKaufen;
	var TextFeld tvNGK;
public:
	func void init()
	{
		yS = 150;
		x = 0;
		y = 0;
		alpha = 0;
		initTextFeld( tve, 5, 0, 300, 20, "", 0x101 );
		initTextFeld( tvkosten, 5, 25, 50, 20, "", 0x701 );
		initTextFeld( tvGoldTF, 60, 25, 0, 0, "", 0x701 );
		initTextFeld( tvSilberTF, 90, 25, 0, 0, "", 0x701 );
		initTextFeld( tvKupferTF, 120, 25, 0, 0, "", 0x701 );
		initTextFeld( tvNGK, 5, 75, 200, 20, "", 0x101 );
		if( ( besitzStatus == 0 ) && ( erwerbbarStatus != 0 ) && ( erwerbbarStatus != 2 ) )
		{
			tve.setText( "10 Spiele Testversion" );
			tvkosten.setText( "Kosten: " );
			var int preis;
			preis = Rückruf( "GetPreis", 0 );
			var Text preisT = preis / 10000;
			tvGoldTF.setText( preisT );
			preisT = ( preis / 100 ) % 100;
			tvSilberTF.setText( preisT );
			preisT = preis % 100;
			tvKupferTF.setText( preisT );
			tvGoldTF.setGrößeNachText();
			tvSilberTF.setGrößeNachText();
			tvKupferTF.setGrößeNachText();
			tvGoldTF.setGröße( tvGoldTF.getBreite(), 20 );
			tvSilberTF.setGröße( tvSilberTF.getBreite(), 20 );
			tvKupferTF.setGröße( tvKupferTF.getBreite(), 20 );
			tvSilberTF.setPosition( tvSilberTF.getX() + tvGoldTF.getBreite(), tvSilberTF.getY() );
			tvKupferTF.setPosition( tvKupferTF.getX() + tvGoldTF.getBreite() + tvSilberTF.getBreite(), tvSilberTF.getY() );
			initBildO( tvGoldBildO, 60 + tvGoldTF.getBreite(), 25, goldBild );
			initBildO( tvSilberBildO, 90 + tvGoldTF.getBreite() + tvSilberTF.getBreite(), 25, silberBild );
			initBildO( tvKupferBildO, 120 + tvGoldTF.getBreite() + tvSilberTF.getBreite() + tvKupferTF.getBreite(), 25, kupferBild );
			initKnopf( tvKaufen, 5, 50, 100, 20, "Erwerben" );
			tvKaufen.setMausEreignis( "tvKME" );
			if( preis > Rückruf( "GetKupfer" ) )
			{
				tvKaufen.löscheStyle( 0x2 );
				tvNGK.setText( "Du hast nicht genug Geld." );
			}
		}
	}
	func bool tick( double z )
	{
		if( ( alpha == 255 ) && ( y >= 280 ) )
		{
			return tvKaufen.tick( z );
		}
		alpha += ( z * 100 );
		if( alpha > 255 )
		{
			alpha = 255;
		}
		y += ( yS * z );
		yS -= ( z * 40 );
		if( yS < 0 )
		{
			yS = 0;
		}
		if( y > 280 )
		{
			y = 280;
		}
		return true;
	}
	func void maus( MausEreignis me )
	{
		me.setMy( me.my - y );
		tvKaufen.doMausEreignis( me );
		me.setMy( me.my + y );
	}
	func void render( Bild b )
	{
		if( ( erwerbbarStatus != 0 ) && ( erwerbbarStatus != 2 ) )
		{
			b.setAlpha( alpha );
			if( b.setDrawOptions( 0, y, 300, 200 ) )
			{
				tve.render( b );
				tvkosten.render( b );
				tvGoldTF.render( b );
				tvSilberTF.render( b );
				tvKupferTF.render( b );
				tvGoldBildO.render( b );
				tvSilberBildO.render( b );
				tvKupferBildO.render( b );
				tvKaufen.render( b );
				tvNGK.render( b );
				b.releaseDrawOptions();
			}
			b.releaseAlpha();
		}
	}
};

class VollVersion
{
private:
	var double y;
	var int x;
	var double yS;
	var int alpha;
	var TextFeld vve;
	var TextFeld vvkosten;
	var TextFeld vvGoldTF;
	var TextFeld vvSilberTF;
	var TextFeld vvKupferTF;
	var BildO vvGoldBildO;
	var BildO vvSilberBildO;
	var BildO vvKupferBildO;
	var Knopf vvKaufen;
	var TextFeld vvNGK;
public:
	func void init()
	{
		yS = 150;
		x = 0;
		y = 0;
		alpha = 0;
		initTextFeld( vve, 0, 0, 100, 20, "", 0x101 );
		initTextFeld( vvkosten, 410, 25, 50, 20, "", 0x701 );
		initTextFeld( vvGoldTF, 470, 25, 0, 0, "", 0x701 );
		initTextFeld( vvSilberTF, 500, 25, 0, 0, "", 0x701 );
		initTextFeld( vvKupferTF, 530, 25, 0, 0, "", 0x701 );
		initTextFeld( vvNGK, 390, 75, 160, 20, "", 0x101 );
		if( ( besitzStatus == 0 ) && ( erwerbbarStatus != 0 ) && ( erwerbbarStatus != 1 ) )
		{
			vve.setText( "Vollversion" );
			vve.setGrößeNachText();
			vve.setPosition( 550 - vve.getBreite(), vve.getY() );
			vvkosten.setText( "Kosten: " );
			var int preis;
			preis = Rückruf( "GetPreis", 1 );
			var Text preisT = preis / 10000;
			vvGoldTF.setText( preisT );
			preisT = ( preis / 100 ) % 100;
			vvSilberTF.setText( preisT );
			preisT = preis % 100;
			vvKupferTF.setText( preisT );
			vvGoldTF.setGrößeNachText();
			vvSilberTF.setGrößeNachText();
			vvKupferTF.setGrößeNachText();
			vvGoldTF.setGröße( vvGoldTF.getBreite(), 20 );
			vvSilberTF.setGröße( vvSilberTF.getBreite(), 20 );
			vvKupferTF.setGröße( vvKupferTF.getBreite(), 20 );
			vvKupferTF.setPosition( vvKupferTF.getX() - vvKupferTF.getBreite(), vvKupferTF.getY() );
			vvSilberTF.setPosition( ( vvSilberTF.getX() - vvKupferTF.getBreite() ) - vvSilberTF.getBreite(), vvSilberTF.getY() );
			vvGoldTF.setPosition( ( ( vvGoldTF.getX() - vvKupferTF.getBreite() ) - vvSilberTF.getBreite() ) - vvGoldTF.getBreite(), vvGoldTF.getY() );
			vvkosten.setPosition( vvGoldTF.getX() - 55, vvkosten.getY() );
			initBildO( vvGoldBildO, vvGoldTF.getX() + vvGoldTF.getBreite(), 25, goldBild );
			initBildO( vvSilberBildO, vvSilberTF.getX() + vvSilberTF.getBreite(), 25, silberBild );
			initBildO( vvKupferBildO, vvKupferTF.getX() + vvKupferTF.getBreite(), 25, kupferBild );
			initKnopf( vvKaufen, 450, 50, 100, 20, "Erwerben" );
			vvKaufen.setMausEreignis( "vvKME" );
			if( preis > Rückruf( "GetKupfer" ) )
			{
				vvKaufen.löscheStyle( 0x2 );
				vvNGK.setText( "Du hast nicht genug Geld." );
			}
		}
	}
	func bool tick( double z )
	{
		if( ( alpha == 255 ) && ( y >= 280 ) )
		{
			return vvKaufen.tick( z );
		}
		alpha += ( z * 100 );
		if( alpha > 255 )
		{
			alpha = 255;
		}
		y += ( yS * z );
		yS -= ( z * 40 );
		if( yS < 0 )
		{
			yS = 0;
		}
		if( y > 280 )
		{
			y = 280;
		}
		return true;
	}
	func void maus( MausEreignis me )
	{
		me.setMy( me.my - y );
		vvKaufen.doMausEreignis( me );
		me.setMy( me.my + y );
	}
	func void render( Bild b )
	{
		if( ( erwerbbarStatus != 0 ) && ( erwerbbarStatus != 1 ) )
		{
			b.setAlpha( alpha );
			if( b.setDrawOptions( 0, y, 700, 200 ) )
			{
				vve.render( b );
				vvkosten.render( b );
				vvGoldTF.render( b );
				vvSilberTF.render( b );
				vvKupferTF.render( b );
				vvGoldBildO.render( b );
				vvSilberBildO.render( b );
				vvKupferBildO.render( b );
				vvKaufen.render( b );
				vvNGK.render( b );
				b.releaseDrawOptions();
			}
			b.releaseAlpha();
		}
	}
};

var TextErscheinen beschreibung;
var TestVersion tv;
var VollVersion vv;

func void start()
{
	besitzStatus = Rückruf( "GetBesitzStatus" );
	erwerbbarStatus = Rückruf( "GetErwerbbarStatus" );
	goldBild = Rückruf( "GetBild", "data/bilder/system.ltdb", "system.ltdb/gold.jpg" );
	silberBild = Rückruf( "GetBild", "data/bilder/system.ltdb", "system.ltdb/silber.jpg" );
	kupferBild = Rückruf( "GetBild", "data/bilder/system.ltdb", "system.ltdb/kupfer.jpg" );
	beschreibung.init( besitzStatus );
	tv.init();
	vv.init();
}

func void initTextFeld( TextFeld tf, int x, int y, int br, int hö, Text t, int style )
{
	tf.setPosition( x, y );
	tf.setGröße( br, hö );
	tf.setStyle( style );
	tf.setSchriftFarbe( 0xFFFFFFFF );
	tf.setText( t );
}

func void initBildO( BildO bo, int x, int y, Bild b )
{
	bo.setPosition( x, y );
	bo.setGröße( b.getBreite(), b.getHöhe() );
	bo.setStyle( 0x1 );
	bo.setBild( b );
}

func void initKnopf( Knopf k, int x, int y, int br, int hö, Text t )
{
	k.setPosition( x, y );
	k.setGröße( br, hö );
	k.setText( t );
	k.addStyle( 0x1 );
}

func bool maus( MausEreignis me )
{
	tv.maus( me );
	vv.maus( me );
	return me.verarbeitet;
}

func bool tick( double z )
{
	var bool ret;
	ret = beschreibung.next( z );
	ret |= tv.tick( z );
	ret |= vv.tick( z );
	return ret;
}

func void render( Bild rObj )
{
	beschreibung.render( rObj );
	tv.render( rObj );
	vv.render( rObj );
}

func bool tvKME( MausEreignis me )
{
	if( me.id == 3 )
	{
		Rückruf( "Kaufen", 0 );
	}
	return true;
}

func bool vvKME( MausEreignis me )
{
	if( me.id == 3 )
	{
		Rückruf( "Kaufen", 1 );
	}
	return true;
}