#include "Game.h"
#include <Bild.h>

// Inhalt der Game Klasse aus Game.h
// Konstruktor
Game::Game()
{
	schrift = 0;
	screen = 0;
	alpha = 0;
	men� = 0;
	ref = 1;
}

// Destruktor
Game::~Game()
{
	if( schrift )
		schrift->release();
	if( screen )
		screen->release();
	if( men� )
		men�->release();
}

// nicht constant
bool Game::laden()
{
	return 1;
}

void Game::doMausEreignis( MausEreignis &me )
{
	if( men� )
		men�->doMausEreignis( me );
}

void Game::doTastaturEreignis( TastaturEreignis &te )
{
	if( men� )
		men�->doTastaturEreignis( te );
}

bool Game::tick( double zeit )
{
	int val = (int)( zeit * 150 );
	if( men� && !men�->istBeendet() && alpha != 255 )
	{
		alpha += val;
		if( alpha > 255 )
			alpha = 255;
		return 1;
	}
	if( men� && men�->istBeendet() && alpha )
	{
		alpha -= val;
		if( alpha < 255 )
			alpha = 0;
	}
	if( men� )
		return men�->tick( zeit );
	return 0;
}

void Game::render( Bild &zRObj )
{
	zRObj.setAlpha( alpha );
	if( men� )
		men�->render( zRObj );
	zRObj.releaseAlpha();
}

void Game::setSchriftZ( Schrift *schrift )
{
	this->schrift = schrift;
	if( !men� && this->schrift && screen )
		men� = new Men�( schrift, screen );
}

void Game::setBildschirmZ( Bildschirm *screen )
{
	this->screen = screen;
	if( !men� && schrift && screen )
		men� = new Men�( schrift, screen );
}

// constant
bool Game::istEnde() const
{
	return men� ? ( men�->istBeendet() && !alpha ) : 0;
}

// Reference Counting
MiniGameV *Game::getThis()
{
	ref++;
	return this;
}

MiniGameV *Game::release()
{
	ref--;
	if( !ref )
		delete this;
	return 0;
}