void TransitionManager::Init()
{
    IW_CALLSTACK("TransitionManager::Init");
    if (m_HasStarted == true)
    {
        delete m_StartTexture;
        delete m_EndTexture;
    }
    m_StartTexture = NULL;
    m_EndTexture = NULL;
    m_HasStarted = false;
    m_alphaValue = 0;

    IwGxSetColClear(0, 0, 0, 0);
    IwGxScreenOrient orient = IwGxGetScreenOrient();

}
void Transitions2D::Fade(uint8 transitionSpeed, bool skipFirstAndLastFrame)
{
	IwGxSetColClear(0, 0, 0, 0);

	if (mStartTexture == NULL || mEndTexture == NULL)
		return;

	if (transitionSpeed == 0)
		transitionSpeed = 1;

	IwGxScreenOrient orient = IwGxGetScreenOrient();
	if (isUsingPrivateTextures) IwGxSetScreenOrient(IW_GX_ORIENT_NONE);

	int alpha = 0;

	if (skipFirstAndLastFrame)
		alpha += transitionSpeed;

	CIwMaterial* startMat;
	CIwMaterial* endMat;
	while (alpha <= 255)
	{
		IwGxClear();

		startMat = IW_GX_ALLOC_MATERIAL();
		startMat->SetTexture(mStartTexture);
		IwGxSetMaterial(startMat);
		IwGxDrawRectScreenSpace(&CIwSVec2(0, 0), &CIwSVec2(mStartTexture->GetWidth(), mStartTexture->GetHeight()));

		endMat = IW_GX_ALLOC_MATERIAL();
		endMat->SetTexture(mEndTexture);
		endMat->SetAlphaMode(CIwMaterial::ALPHA_BLEND);
		endMat->SetColAmbient(255, 255, 255, alpha);

		IwGxSetMaterial(endMat);
		IwGxDrawRectScreenSpace(&CIwSVec2(0, 0), &CIwSVec2(mEndTexture->GetWidth(), mEndTexture->GetHeight()));

		IwGxFlush();
		IwGxSwapBuffers();

		s3eDeviceYield(40);
		alpha += transitionSpeed;
	}

	if (!skipFirstAndLastFrame)
	{
		IwGxClear();
		endMat = IW_GX_ALLOC_MATERIAL();
		endMat->SetTexture(mEndTexture);
		IwGxSetMaterial(endMat);
		IwGxDrawRectScreenSpace(&CIwSVec2(0, 0), &CIwSVec2(mEndTexture->GetWidth(), mEndTexture->GetHeight()));

		IwGxFlush();
		IwGxSwapBuffers();
	}

	if (isUsingPrivateTextures)
	{
		delete mStartTexture;
		delete mEndTexture;
		mStartTexture = NULL;
		mEndTexture = NULL;
	}

	IwGxSetScreenOrient(orient);
}
void Transitions2D::Slide(DIR d, uint8 transitionSpeed, bool skipFirstAndLastFrame)
{
	IwGxSetColClear(0, 0, 0, 0);

	if (mStartTexture == NULL || mEndTexture == NULL)
		return;

	if (transitionSpeed == 0)
		transitionSpeed = 1;

	IwGxScreenOrient orient = IwGxGetScreenOrient();
	if (isUsingPrivateTextures) IwGxSetScreenOrient(IW_GX_ORIENT_NONE);

	CIwMaterial* startMat;
	CIwMaterial* endMat;

	int w = mStartTexture->GetWidth();
	int h = mStartTexture->GetHeight();
	int pos = 0;
	int speed, size;

	if (d == LEFT || d == RIGHT)
	{
		speed = (int)((transitionSpeed * w) / 255.0);
		size = w;
	}
	else
	{
		speed = (int)((transitionSpeed * h) / 255.0);
		size = h;
	}

	if (skipFirstAndLastFrame)
		pos += speed;

	while (pos < size)
	{
		IwGxClear();
		if (d == LEFT)
		{
			startMat = IW_GX_ALLOC_MATERIAL();
			startMat->SetTexture(mStartTexture);
			IwGxSetMaterial(startMat);
			IwGxDrawRectScreenSpace(&CIwSVec2(-pos, 0), &CIwSVec2(mStartTexture->GetWidth(), mStartTexture->GetHeight()));

			endMat = IW_GX_ALLOC_MATERIAL();
			endMat->SetTexture(mEndTexture);
			IwGxSetMaterial(endMat);
			IwGxDrawRectScreenSpace(&CIwSVec2(-pos + size, 0), &CIwSVec2(mEndTexture->GetWidth(), mEndTexture->GetHeight()));
		}
		else if (d == RIGHT)
		{
			endMat = IW_GX_ALLOC_MATERIAL();
			endMat->SetTexture(mEndTexture);
			IwGxSetMaterial(endMat);
			IwGxDrawRectScreenSpace(&CIwSVec2(pos - size, 0), &CIwSVec2(mEndTexture->GetWidth(), mEndTexture->GetHeight()));

			startMat = IW_GX_ALLOC_MATERIAL();
			startMat->SetTexture(mStartTexture);
			IwGxSetMaterial(startMat);
			IwGxDrawRectScreenSpace(&CIwSVec2(pos, 0), &CIwSVec2(mStartTexture->GetWidth(), mStartTexture->GetHeight()));
		}
		else if (d == UP)
		{
			startMat = IW_GX_ALLOC_MATERIAL();
			startMat->SetTexture(mStartTexture);
			IwGxSetMaterial(startMat);
			IwGxDrawRectScreenSpace(&CIwSVec2(0, -pos), &CIwSVec2(mStartTexture->GetWidth(), mStartTexture->GetHeight()));

			endMat = IW_GX_ALLOC_MATERIAL();
			endMat->SetTexture(mEndTexture);
			IwGxSetMaterial(endMat);
			IwGxDrawRectScreenSpace(&CIwSVec2(0, -pos + size), &CIwSVec2(mEndTexture->GetWidth(), mEndTexture->GetHeight()));
		}
		else if (d == DOWN)
		{
			endMat = IW_GX_ALLOC_MATERIAL();
			endMat->SetTexture(mEndTexture);
			IwGxSetMaterial(endMat);
			IwGxDrawRectScreenSpace(&CIwSVec2(0, pos - size), &CIwSVec2(mEndTexture->GetWidth(), mEndTexture->GetHeight()));

			startMat = IW_GX_ALLOC_MATERIAL();
			startMat->SetTexture(mStartTexture);
			IwGxSetMaterial(startMat);
			IwGxDrawRectScreenSpace(&CIwSVec2(0, pos), &CIwSVec2(mStartTexture->GetWidth(), mStartTexture->GetHeight()));
		}

		IwGxFlush();
		IwGxSwapBuffers();

		s3eDeviceYield(40);
		pos += speed;
	}

	if (!skipFirstAndLastFrame)
	{
		IwGxClear();
		endMat = IW_GX_ALLOC_MATERIAL();
		endMat->SetTexture(mEndTexture);
		IwGxSetMaterial(endMat);
		IwGxDrawRectScreenSpace(&CIwSVec2(0, 0), &CIwSVec2(mEndTexture->GetWidth(), mEndTexture->GetHeight()));

		IwGxFlush();
		IwGxSwapBuffers();
	}

	if (isUsingPrivateTextures)
	{
		delete mStartTexture;
		delete mEndTexture;
		mStartTexture = NULL;
		mEndTexture = NULL;
	}

	IwGxSetScreenOrient(orient);
}