Esempio n. 1
0
void CCutScene1::RunCutScene (void)
{
	static float yscroll = 0.0f;

	BackGround->RenderSprite (0, 0, 0xFFFFFFFF);	

	for (int i = 0; i < 15; i++)
	{
		int   a;
		a = 255;

		// CutScene Text anzeigen, sofern ausgefüllt
//		if (strcmp (TextArray [TEXT_CUTSCENE1_1 + i], "-") != 0)
//			pDefaultFont->DrawText (20, 480 - m_fYScroll + i * 12, TextArray [TEXT_CUTSCENE1_1 + i], D3DCOLOR_RGBA (255, 255, 255, a));	
	}

	// Schwarzes Rechteck zum Faden anzeigen?
	//
	if (m_iFading != 0)
	{
		m_fFadeAlpha += 20.0f * m_iFading SYNC;

		int a = int (m_fFadeAlpha);

		// Stop Fading
		if (m_iFading == -1 && a < 0)   
			m_iFading = 0;


		// Stop Scene
		else if (m_iFading ==  1 && a > 255)
			m_bIsDone = true;

		else
			RenderRect (0, 0, 640, 480, D3DCOLOR_RGBA (0, 0, 0, a));
	}

	m_fYScroll += 1.0f SYNC;

} // RunCutScene
Esempio n. 2
0
void IntroClass::DoIntro(void)
{
	// Hintergrund rendern
	DirectGraphics.SetColorKeyMode();

	int a = (TextOff - 1) / 4;
	if (a < 0) a = 0;
	if (a > 5) a = 5;

	Background[a].RenderSprite(0, 0, 0, 0xFFFFFFFF);

	// nächstes Bild überblenden?
	if ((TextOff - 1) % 4 == 3 &&
		a < 5)
	{
		D3DCOLOR fadecol = D3DCOLOR_RGBA(255, 255, 255, (int)(Counter / 1300.0f * 255.0f));
		Background[a+1].RenderSprite(0, 0, 0, fadecol);
	}

	// Balken unten
	RenderRect4(0, 360, 640, 60, 0x00000000, 0x00000000, 
								 0xFF000000, 0xFF000000);
	RenderRect(0, 420, 640, 60, 0xFF000000);

	// Intro laufen lassen
	switch(Zustand)
	{
		case INTRO_FADEIN :						// Text scrollen
		{
			// Mucke spielen
			if (pSoundManager->InitSuccessfull &&
				FMUSIC_IsPlaying(pSoundManager->its_Songs[MUSIC_INTRO]->SongData) == false)
				pSoundManager->PlaySong(MUSIC_INTRO, false);				

			// und einfaden
			Counter += 10.0f SYNC;

			if (Counter > 255.0f)
			{
				Counter = 0.0f;
				Zustand = INTRO_RUN;
			}
			else
			{
				D3DCOLOR col = D3DCOLOR_RGBA(0, 0, 0, 255-int(Counter));
				RenderRect(0, 0, 640, 480, col);			
			}
		} break;

		case INTRO_FADEOUT :
		{
			// und ausfaden
			Counter -= 5.0f SYNC;

			if (Counter < 0.0f)
			{
				Counter = 0.0f;
				Zustand = INTRO_DONE;
			}

			D3DCOLOR col = D3DCOLOR_RGBA(0, 0, 0, 255-int(Counter));
			RenderRect(0, 0, 640, 480, col);			
			
		} break;

		// Scroller
		case INTRO_RUN:
		{
			Counter += 25.5f SYNC;

			if (Counter > 1300.0f)
			{
				Counter = 0.0f;
				TextOff++;

				if (TextOff > 23)
				{
					EndIntro();
					break;
				}
			}
			
			// Text rendern	
			float xr = Counter;
			if (xr > 700.0f)
				xr = 700.0f;

			DirectGraphics.SetAdditiveMode();

			for (int t = 0; t <= 23; t++)
			{
				D3DCOLOR col;

				col = D3DCOLOR_RGBA(0, 255, 0, 255 - (TextOff - t) * 25);

				if (t <= TextOff &&
					t - TextOff > -10)
				{
					int off = TEXT_INTRO1 + t;

					if (off == TEXT_INTRO1 + 22 &&
						NUMPLAYERS == 2)
						off++;
					else
					if (off >= TEXT_INTRO1 + 23)
						off++;

					pDefaultFont->DrawText(10, (float)(465 + t * 12) - TextOff * 12, TextArray[off], col);

					// Teil des Textes verdecken
					if (t == TextOff)
					{
						DirectGraphics.SetColorKeyMode();
						RenderRect(xr, 464, 640.0f, 17, 0xFF000000);
					}
				}
			}	

			//grüne Rechtecke rendern
			if (TextOff <= 28)
			{
				DirectGraphics.SetAdditiveMode();
				{										
					int l = pDefaultFont->StringLength(TextArray[TEXT_INTRO1 + TextOff], 0) + 28;
					if (xr < l)
					{
						for (int i = 0; i < 5; i++)
						{
							D3DCOLOR col;

							switch(i)
							{
								case 0: col = D3DCOLOR_RGBA(255, 255, 255, 255); break;
								case 1: col = D3DCOLOR_RGBA(0, 255, 0, 255); break;
								case 2: col = D3DCOLOR_RGBA(0, 180, 0, 255); break;
								case 3: col = D3DCOLOR_RGBA(0, 90, 0, 255); break;
								case 4: col = D3DCOLOR_RGBA(0, 50, 0, 255); break;
							}

							RenderRect(xr - i * 12 - 12, 464, 12, 12, col);
						}
					}
					else
					{
						xr = (float)l;

						// blinken lassen
						if ((int)(Counter / 100.0f) % 2 == 0)
							RenderRect(xr - 12, 464, 12, 12, 0xFFFFFFFF);
					}
				}
			}
		}
		break;

		default : break;

	} // switch	
}
Esempio n. 3
0
void GegnerBratklops::DoDraw()
{
	// Gegner rendern
	// Animation existiert nur von 1-5, danach läuft sie rückwärts
	//

	int a;

	a = AnimPhase;
	if (a > 5)
		a = 10 - a;

	pGfx[a]->RenderSprite  (float (xPos - pTileEngine->XOffset), float (yPos - pTileEngine->YOffset), 0xFFFFFFFF);

	// Laser rendern ?
	//
	if (FlareDelay > 0.0f)
	{
		int c = int (FlareDelay);

		if (c > 128.0f)
			c = 128;

		if (FlareDelay > 544)
			c = int (128 - (FlareDelay - 544) / 2.0f);

		DirectGraphics.SetAdditiveMode();
		D3DCOLOR Color = D3DCOLOR_RGBA (255, 255, 255, c);
		pFlare->RenderSpriteRotated  (float (xPos - pTileEngine->XOffset) + 64.0f, float (yPos - pTileEngine->YOffset) + 122.0f, FlareDelay*2, Color);
		pFlare->RenderSpriteRotated  (float (xPos - pTileEngine->XOffset) + 64.0f, float (yPos - pTileEngine->YOffset) + 122.0f, FlareDelay*2, Color);

		// Laser rendern
		//
		if (FlareDelay > 150.0f		&&
			((Handlung == GEGNER_SPECIAL &&
			 int (FlareDelay) % 90 < 60) ||
			 Handlung == GEGNER_SPECIAL3))
		{
			if (pSoundManager->its_Sounds[SOUND_BRATLASER]->isPlaying == false)
				pSoundManager->PlayWave (100, 128, 11025, SOUND_BRATLASER);

			VERTEX2D				TriangleStrip[4];					// Strip für ein Sprite
			int Winkel;
			Winkel = int ((FlareDelay - 128.0f) / 4.5f) - 20;

			while (Winkel < 0)
				   Winkel += 360;

			float l,  r,  o,  u;					// Vertice Koordinaten
			float tl, tr, to, tu;					// Textur Koordinaten

			l = float (xPos - pTileEngine->XOffset + 140.0f-0.5f);			// Links
			o = float (yPos - pTileEngine->YOffset + 215.0f-0.5f);			// Oben
			r = float (xPos - pTileEngine->XOffset + 170.0f+0.5f);			// Rechts
			u = float (yPos - pTileEngine->YOffset + 800.0f+0.5f);			// Unten

			tl = 0.0f;
			tr = 1.0f;
			to = 0.0f;
			tu = 1.0f;

			TriangleStrip[0].z	= TriangleStrip[1].z	= TriangleStrip[2].z	 = TriangleStrip[3].z	   = 0.0f;
			TriangleStrip[0].color = TriangleStrip[1].color = TriangleStrip[2].color = TriangleStrip[3].color = 0xFFFFFFFF;
			TriangleStrip[0].x	= l; TriangleStrip[0].y = o; TriangleStrip[0].tu = tl; TriangleStrip[0].tv = to;
			TriangleStrip[1].x  = r; TriangleStrip[1].y	= o; TriangleStrip[1].tu = tr; TriangleStrip[1].tv = to;
			TriangleStrip[2].x  = l; TriangleStrip[2].y	= u; TriangleStrip[2].tu = tl; TriangleStrip[2].tv = tu;
			TriangleStrip[3].x	= r; TriangleStrip[3].y	= u; TriangleStrip[3].tu = tr; TriangleStrip[3].tv = tu;

			// Textur setzen
			//
#if defined(PLATFORM_DIRECTX)
			lpD3DDevice->SetTexture (0, pLaser->itsTexture);
#elif defined(PLATFORM_SDL)
            DirectGraphics.SetTexture(  pLaser->itsTexture );
#endif

			// Blitz rotieren lassen
			//
			D3DXMATRIX	matRot, matTrans, matTrans2;

			D3DXMatrixRotationZ  (&matRot, DegreetoRad[360 - Winkel]);	// Rotationsmatrix
			D3DXMatrixTranslation(&matTrans, -l-15, -o, 0.0f);			// Transformation zum Ursprung
			D3DXMatrixTranslation(&matTrans2, l+15,  o, 0.0f);			// Transformation wieder zurück
			D3DXMatrixMultiply	 (&matWorld, &matTrans, &matRot);		// Verschieben und rotieren
			D3DXMatrixMultiply	 (&matWorld, &matWorld, &matTrans2);	// und wieder zurück
#if defined(PLATFORM_DIRECTX)
			lpD3DDevice->SetTransform(D3DTS_WORLD, &matWorld);
#elif defined(PLATFORM_SDL)
            g_matModelView = matWorld * g_matView;
#if defined(USE_GL1)
            load_matrix( GL_MODELVIEW, g_matModelView.data() );
#endif
#endif

			DirectGraphics.SetFilterMode (true);

			// Blitzstrahl zeichnen
			//
			DirectGraphics.RendertoBuffer (D3DPT_TRIANGLESTRIP, 2, &TriangleStrip[0]);

			DirectGraphics.SetFilterMode (false);

			// Normale Projektions-Matrix wieder herstellen
			//
			D3DXMatrixRotationZ (&matWorld, 0.0f);
#if defined(PLATFORM_DIRECTX)
			lpD3DDevice->SetTransform(D3DTS_WORLD, &matWorld);
#elif defined(PLATFORM_SDL)
            g_matModelView = matWorld * g_matView;
#if defined(GL1)
            load_matrix( GL_MODELVIEW, g_matModelView.data() );
#endif
#endif

			DirectGraphics.SetColorKeyMode();

			// Kollisionsabfrage mit Spieler durch rotierte Rechtecke (wie beim Spielerblitz)
			//
			RECT	Rect;					// Rechteck für die Kollisionserkennung
											// ein Laser-Stück wird grob durch
			Rect.left   = 0;				// ein 24x24 Rechteck abgeschätzt
			Rect.top    = 0;
			Rect.right  = 24;
			Rect.bottom = 24;

			float xs, ys;
			float xstart = float (xPos + 145.0f);
			float ystart = float (yPos + 203.0f);

			// Rechtecke für die Kollisionsabfrage rotieren lassen
			for (int i=0; i<25; i++)
			{
				// Zum anzeigen der Rects, die geprüft werden
				if (DebugMode == true)
					RenderRect(float(xstart-pTileEngine->XOffset),
							   float(ystart-pTileEngine->YOffset),
							   24, 24, 0x80FFFFFF);

				// Laser auf Kollision mit dem Spieler prüfen
				//

				xs = float (xstart);
				ys = float (ystart);

				for (int i = 0; i < NUMPLAYERS; i++)
				if (SpriteCollision (pPlayer[i]->xpos, pPlayer[i]->ypos, pPlayer[i]->CollideRect,
									 xs, ys, Rect) == true)
				{
					pPlayer[i]->DamagePlayer (10.0f SYNC);
				}

				// Und nächstes Rechteck
				//
				xstart += float(24*cos(PI * (360 - Winkel + 90) / 180));
				ystart += float(24*sin(PI * (360 - Winkel + 90) / 180));

				if (pTileEngine->BlockUnten (xs, ys, xs, ys, Rect) & BLOCKWERT_WAND)
				{
					// Funken und Rauch am Boden
					//
					if (rand()%2 == 0) pPartikelSystem->PushPartikel (xs + rand()%24, ys + rand()%24, FUNKE2);
					if (rand()%2 == 0) pPartikelSystem->PushPartikel (xs + rand()%24 - 15, ys + rand()%8 - 40, SMOKE2);
				}
			}
		}
		else
			pSoundManager->StopWave (SOUND_BRATLASER);

		if (FlareDelay > 800.0f)
		{
			FlareDelay = 0.0f;
			Handlung = GEGNER_STEHEN;
		}
	}
}
Esempio n. 4
0
void RenderWorld(void)
{
    glEnable(GL_TEXTURE_2D);
    glDisable(GL_DEPTH_TEST);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE );
    glEnable(GL_BLEND);

    glBindTexture(GL_TEXTURE_2D, pyramidTex);

    // 在纹理矩阵中移动纹理
    glMatrixMode(GL_TEXTURE);
    glLoadIdentity();
    // glTranslatef(0.0f, -tex_y, 0.0f);
    // glScalef(0.0f, tex_y, 0.0f);

    glMatrixMode(GL_MODELVIEW);
#if 0
    for (int i=0; i<1; i++)
    {
        glPushMatrix();
#if 0
        glColor3f(0.0f, 1.0f, 1.0f);
        glBegin(GL_TRIANGLE_FAN); {
            glTexCoord2f(0.0f, 1.0f); glVertex3f( 0.0f, 0.0f, 0.0f);
            glTexCoord2f(0.0f, 0.0f); glVertex3f(-0.1f, 1.1f, 0.1f);
            glTexCoord2f(1.0f, 0.0f); glVertex3f( 0.1f, 1.1f, 0.1f);
            glTexCoord2f(0.0f, 0.0f); glVertex3f( 0.1f, 1.1f,-0.1f);
            glTexCoord2f(1.0f, 0.0f); glVertex3f(-0.1f, 1.1f,-0.1f);
            glTexCoord2f(0.0f, 0.0f); glVertex3f(-0.1f, 1.1f, 0.1f);
        } glEnd();

        glScalef(-1.0, -1.0, -1.0);
        glColor3f(1.0f, 1.0f, 0.0f);
        glBegin(GL_TRIANGLE_FAN); {
            glTexCoord2f(0.0f, 1.0f); glVertex3f( 0.0f, 0.0f, 0.0f);
            glTexCoord2f(0.0f, 0.0f); glVertex3f(-0.1f, 1.1f, 0.1f);
            glTexCoord2f(1.0f, 0.0f); glVertex3f( 0.1f, 1.1f, 0.1f);
            glTexCoord2f(0.0f, 0.0f); glVertex3f( 0.1f, 1.1f,-0.1f);
            glTexCoord2f(1.0f, 0.0f); glVertex3f(-0.1f, 1.1f,-0.1f);
            glTexCoord2f(0.0f, 0.0f); glVertex3f(-0.1f, 1.1f, 0.1f);
        } glEnd();
#else
        glColor3f(0.0f, 1.0f, 1.0f);
        // DrawCone(1.1, 0.13, 4);

        glScalef(-1.0, -1.0, -1.0);
        glColor3f(1.0f, 1.0f, 0.0f);
        // DrawCone(1.1, 0.13, 4);
#endif
        glPopMatrix();
    }
#else
#if 0
    //glDisable(GL_TEXTURE_2D);
    // glColor3f(0.0f, 1.0f, 1.0f);
    // ConeDraw(&sCone);

    // glScalef(-1.0, -1.0, -1.0);
    // // glColor3f(1.0f, 1.0f, 0.0f);
    // glColor3f(1.0f, 1.0f, 1.0f);
    ConeDraw(&sCone);
#else
    // glDisable(GL_TEXTURE_2D);
    // glDisable(GL_BLEND);
    RenderRect();
#endif
#endif

    // 重置纹理矩阵
    glMatrixMode(GL_TEXTURE);
    glLoadIdentity();
    glMatrixMode(GL_MODELVIEW);

    glEnable(GL_DEPTH_TEST);
    glDisable(GL_TEXTURE_2D);
    glDisable(GL_BLEND);

    tex_y += 0.001f;
}