#include <KSGSStandart.h>

var Säule s1;
var Säule s2;
var Säule s3;
var Säule s4;
var Spieler p;
var bool läuft = false;
var bool sStart = true;

class Säule
{
	private:
		var double x = 0;
		var int br = 100;
		var int y = 300;
		var int hö = 100;
	public:
		func void set( int n )
		{
			x = n * 300;
			y = Rückruf( "zufall", 150, 450 );
		}
		func void tick( double zeit )
		{
			x = x - ( zeit * 60 );
			if( (x + br) < 0 )
			{
				x = 1100;
				y = ( ( ( ( y + 2 ) * ( zeit * 100 ) ) % 4 ) * 100 ) + 150;
			}
		}
		func void render( Bild b )
		{
			b.füllRegion( x, 0, br, y, 0xFFFFFFFF );
			b.füllRegion( x, y + hö, br, 900 - ( y + hö ), 0xFFFFFFFF );
		}
		func bool collidiert( int xp, int yp, int brp, int höp )
		{
			if( ( xp + brp ) > x && xp < ( x + br ) )
			{
				if( yp < y || ( yp + höp ) > ( y + hö ) ) { return true; }
			}
			return false;
		}
};

class Spieler
{
	private:
		var int x = 120;
		var double y = 320;
		var int br = 40;
		var int hö = 40;
		var double yS = 0;
		var double score = 0;
		var TextFeld scoreTF;
	public:
		func void set()
		{
			scoreTF.setPosition( 35, 35 );
			scoreTF.setGröße( 100, 30 );
			scoreTF.setStyle( 0x901 );
			scoreTF.setSchriftFarbe( 0xFF00FF00 );
			scoreTF.setSchriftGröße( 20 );
			scoreTF.setText( "Score: 0" );
			score = 0;
			y = 320;
			yS = 0;
		}
		func void tastatur( TastaturEreignis te )
		{
			yS = 10;
		}
		func void tick( double zeit )
		{
			score = score + ( zeit * 60 );
			y -= ( yS * zeit * 20 );
			yS -= ( zeit * 30 );
			var int sc;
			sc = ( score + 20 ) / 300;
			var Text sct = "Score: ";
			sct += sc;
			scoreTF.setText( sct );
		}
		func void render( Bild b )
		{
			b.füllRegion( x, y, br, hö, 0xFF00FF00 );
			scoreTF.render( 0, 0, b );
		}
		func bool collidiert( Säule s )
		{
			if( y < 0 ){ return true; }
			if( (y + hö ) > 700 ){ return true; }
			return s.collidiert( x, y, br, hö );
		}
};

func void start()
{
	s1.set( 0 );
	s2.set( 1 );
	s3.set( 2 );
	s4.set( 3 );
	p.set();
}

func bool maus( MausEreignis me )
{
	return true;
}

func bool tastatur( TastaturEreignis te )
{
	if( te.id != 0 ){	return false; }
	if( läuft != true )
	{
		if( sStart != true )
		{
	    s1.set( 0 );
	    s2.set( 1 );
	    s3.set( 2 );
	    s4.set( 3 );
		  p.set();
		}
		läuft = true;
		sStart = false;
	}
	p.tastatur( te );
	return true;
}

func bool tick( double zeit )
{
	if( läuft != true ){ return false; }
	s1.tick( zeit );
	s2.tick( zeit );
	s3.tick( zeit );
	s4.tick( zeit );
	p.tick( zeit );
	if( p.collidiert( s1 ) || p.collidiert( s2 ) || p.collidiert( s3 ) || p.collidiert( s4 ) ) { läuft = false; }
	return true;
}

func void render( int xOff, int yOff, Bild rObj )
{
	s1.render( rObj );
	s2.render( rObj );
	s3.render( rObj );
	s4.render( rObj );
	p.render( rObj );
}