#include ".\splashmanager.h"

SplashManager::SplashManager( KeyboardManager* newKeyboardManager, SpriteRenderer* newSpriteRenderer )
{
	keyboardManager = newKeyboardManager;
	spriteRenderer = newSpriteRenderer;
	splashAvailable = false;
	oldKey = RELEASED;
}

SplashManager::~SplashManager(void){
}

void SplashManager::loadSplash( int newTextureId, int newKey, AfterSplash* newAfterSplash ) {
	keys.push_back( newKey );
	splashAvailable = true;
	textures.push_back( newTextureId );
	afterSplashes.push_back( newAfterSplash );
}

bool SplashManager::isSplashDisplaying() {
	return splashAvailable;
}

HRESULT SplashManager::render() {
	int textureId = textures.front();
	int key = keys.front();

	// Render the sprite
	HRESULT r = spriteRenderer->renderToScreen( textureId, 0, 0 );
	if ( FAILED( r ) ) {
		GameError( "Could not render splash screen." );
		return r;
	}

	// Check if we're done
	// Query input
	if ( getWindowFocus() ) {
		keyboardManager->CheckState();
	}

	if ( oldKey != RELEASED && keyboardManager->IsKeyUp( oldKey ) ) {
		oldKey = RELEASED;
	}

	if ( oldKey == RELEASED && keyboardManager->IsKeyDown( key ) ) {
		// We're done...unload the splash stamp
		AfterSplash* runNow = *afterSplashes.begin();
		oldKey = *keys.begin();
		textures.erase( textures.begin() );
		keys.erase( keys.begin() );
		afterSplashes.erase( afterSplashes.begin() );

		// Run it if we can
		if ( runNow != NULL ) {
			runNow->runAfterSplash();

            delete runNow;
            runNow = NULL;
		}

		if ( textures.size() == keys.size() ) {
			if ( textures.size() == 0 ) {
				splashAvailable = false;
			}
		} else {
			GameError( "Error removing splash stuff." );
			return E_FAIL;
		}
	}

	return S_OK;
}
