Пример #1
0
void ClientGame::draw()
{
    //print("begin draw\n");
    if(has_shaders && draw_glow)
    {
        //print("drawing with shaders\n");
        //print(format("%1% %2% %3%\n") % main_fb% framebuffers[0]% framebuffers[1]);

        glBindFramebuffer(GL_FRAMEBUFFER, main_fb);
        drawScene();

        //glBindTexture(GL_TEXTURE_2D, main_fb_texture);

        //bind fb1
        glBindFramebuffer(GL_FRAMEBUFFER, framebuffers[0]);
        glBindTexture(GL_TEXTURE_2D, main_fb_texture);
        glow_fx.SetParameter("framebuffer", main_fb_texture);
        glow_fx.SetParameter("factor", 0.5f);
        glow_fx.SetParameter("step", 1.0f/window->GetWidth(), 0.0f);
        glClear(GL_COLOR_BUFFER_BIT);
        window->Draw(glow_fx);

        glBindFramebuffer(GL_FRAMEBUFFER, framebuffers[1]);
        glBindTexture(GL_TEXTURE_2D, framebuffer_textures[0]);
        glow_fx.SetParameter("framebuffer", framebuffer_textures[0]);
        glow_fx.SetParameter("factor", 0.5f);
        glow_fx.SetParameter("step", 0.0f, 1.0f/window->GetHeight());
        glClear(GL_COLOR_BUFFER_BIT);
        window->Draw(glow_fx);

        glBindFramebuffer(GL_FRAMEBUFFER, 0);
        glClear(GL_COLOR_BUFFER_BIT);
        glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
        glEnable(GL_TEXTURE_2D);
        glEnable(GL_BLEND);
        glBlendFunc(GL_ONE, GL_ONE);
        glBindTexture(GL_TEXTURE_2D, main_fb_texture);
        Draw::drawTexturedRect(0, 0, window->GetWidth(), window->GetHeight());
        //glBindTexture(GL_TEXTURE_2D, framebuffer_textures[0]);
        //Draw::drawTexturedRect(0, 0, window->GetWidth(), window->GetHeight());
        glBindTexture(GL_TEXTURE_2D, framebuffer_textures[1]);
        Draw::drawTexturedRect(0, 0, window->GetWidth(), window->GetHeight());
        glDisable(GL_TEXTURE_2D);
        glDisable(GL_BLEND);
    }
    else
    {
        //print("drawing without shaders\n");
        drawScene();
    }



    if(draw_names) drawShipNames();
    if(draw_scores) drawScores();
    //print("end draw\n");
}
Пример #2
0
void Pong::run(float timediff)
{
   //--Spieler input verarbeiten und Spielerskelett Zeichnen
   for(std::vector<Player*>::iterator it = app->players.begin();
         it != app->players.end(); it++)
   {
      Player* pl = *it;
      if(pl != 0)
      {
         pl->processInput(timediff);
         pl->draw(Player::SKELETON | Player::BAR);
      }
   }

   if(app->players[app->PLAYER_LEFT] != 0)
   {
      if(app->players[app->PLAYER_LEFT]->getExit())
      {
         app->switchTo(app->GS_MENU);
      }
   }
   if(app->players[app->PLAYER_RIGHT] != 0)
   {
      if(app->players[app->PLAYER_RIGHT]->getExit())
      {
         app->switchTo(app->GS_MENU);
      }
   }

   //--Ball einfügen
   if(spawnBall)
   {
      timeToSpawnBall -= timediff;
      if(timeToSpawnBall <= 0.0f)
      {
         doSpawnBall();
      }
   }

   //--Spieler Verarbeiten
   if(app->playersActive == 2)
   {
      drawScores(app->players[app->PLAYER_LEFT]->getScore(), app->players[app->PLAYER_RIGHT]->getScore());

      if(!inMatch)
      {
         clearBalls();
         spawnBall = false;
         timeToMatch -= timediff;
         if(timeToMatch <= 0.0f)
         {
            startMatch();
         }
      }

      if(Application::enableEasterEggs)
      {
         doEsterEgg(app->PLAYER_LEFT,  app->players[app->PLAYER_LEFT]->getEsterEgg());
         doEsterEgg(app->PLAYER_RIGHT, app->players[app->PLAYER_RIGHT]->getEsterEgg());
      }
   }
   else
   {
      spawnBall = true;
   }

   if(calcForces(timediff)) //--bei Kollision sound ausgeben (nur wenn Spieler drin sind)
   {
      app->soundPlayer->effect("collision");
   }
}
Пример #3
0
//-------------------------------------------------------------------------
void mainLoop()
{
	beginFrame();
	readKeys();

	switch(m_gameState)
	{
		case GSTATE_PreFrontEnd:
			m_scrollText = 0;
			m_userKeyBits = 0;
			m_timer = 0;
			m_lives = 3;
			m_willy.position.x = 29*8;
			m_willy.position.y = 64+8;
			m_willy.direction = 1;
			m_score = 0;
			m_oldScore = 0;
			m_gameState = GSTATE_FrontEnd;
			renderFrontEnd(FERState_PreRender);
			drawScores();
			
		case GSTATE_FrontEnd:
		{
			char feState;

			if(!m_userKeyBits)
			{
				if(++m_timer > FETime)
				{
					m_timer = 0;
					m_gameState = GSTATE_TextScroll;
					m_scrollText = (char*)szIntroText;
					feState = FERState_PreTextScroll;
				}
				else
				{
					feState = FERState_TitleFlash;
				}
			}
			else
			{
				m_gameState = GSTATE_PrePreIngame;
				feState = FERState_Cleanup;
			}

			renderFrontEnd(feState);
			
			break;
		}
			
		case GSTATE_TextScroll:
		{
			char feState = FERState_NOP;
			
			if(!m_userKeyBits)
			{
				if(++m_timer > ScrollTimer)
				{
					if(!*(++m_scrollText))
					{
						m_gameState = GSTATE_PreDemo;
						feState = FERState_Cleanup;
					}
					m_timer = 0;
				}
			}
			else 
			{
				m_gameState = GSTATE_PrePreIngame;
				feState = FERState_Cleanup;
			}

			renderFrontEnd(feState);
			
			break;
		}
			
		case GSTATE_PreDemo:
			m_timer = 0;
			m_level = LEVEL_Central_Cavern;
			prepLevel();
			m_gameState = GSTATE_Demo;
			
		case GSTATE_Demo:
		{
			if(m_userKeyBits)
				m_gameState = GSTATE_PreFrontEnd;
			else
			{
				runGame();
				if(++m_timer > DemoTime)
				{
					m_timer = 0;
					if(LEVEL_The_Final_Barrier < ++m_level)
						m_gameState = GSTATE_PreFrontEnd;
					else
						prepLevel();
				}	
			}
			break;
		}
			
		case GSTATE_PrePreIngame:
			m_level = LEVEL_Central_Cavern;
			m_gameState = GSTATE_PreIngame;
			
		case GSTATE_PreIngame:
			m_userKeyBits = 0;
			m_hMotion = 0;
			prepLevel();
			m_gameState = GSTATE_Ingame;
			
		case GSTATE_Ingame:
		{
			char state = runGame();
			if(ColDie == state)
				m_gameState = GSTATE_PreDied;
			else if(ColDoor == state)
				m_gameState = GSTATE_PreBeatLevel;
			break;
		}
			
		case GSTATE_PreBeatLevel:
			m_gameState = GSTATE_BeatLevel;
	
		case GSTATE_BeatLevel:
			m_score += 24;
			drawScores();
			m_airAmount -= 2 * AirScaler; 
			if(m_airAmount <= 0)
			{
				m_airAmount = 0;
				if(LEVEL_The_Final_Barrier != m_level)
				{
					++m_level;
					m_gameState = GSTATE_PreIngame;
				}
				else
				{
					m_gameState = GSTATE_Won;
				}
			}
			renderFrame();
			break;
			
		case GSTATE_PreDied:
			--m_lives;
			undrawLife();
			renderFrontEnd(FERState_FlashColour);
			if(!m_lives)
				m_gameState = GSTATE_PreLost;
			else
				m_gameState = GSTATE_PreIngame;
			break;
			
		case GSTATE_PreLost:
			m_level = LEVEL_The_Final_Barrier+1;
			setupLostScreen();
			prepLevel();
			m_gameState = GSTATE_Lost;
			
		case GSTATE_Lost:
			if(renderLostScreen())		
				m_gameState = GSTATE_PreFrontEnd;
			break;
			
		case GSTATE_Won:
			m_gameState = GSTATE_PreFrontEnd;
			break;
	}
	syncEndFrame();
}
Пример #4
0
//-------------------------------------------------------------------------
char checkCollision(char bufferValue)
{
	switch(bufferValue)
	{
		case WorldEmpty:
		case WorldSwitchRight:
			return ColNoCol;
			
		case WorldSpecial:
			return ColSpecial;
			
		case WorldWall:
			return ColWall;
			
		case WorldCollapse1:
		case WorldCollapse2:
		case WorldCollapse3:
		case WorldCollapse4:
		case WorldCollapse5:
		case WorldCollapse6:
		case WorldCollapse7:
		case WorldCollapse8:
			return ColCollapse;
			
		case WorldBush:
		case WorldRock:
			return ColDie;
			
		case WorldConveyor:
			return ColConveyor;
			
		case WorldSwitchLeft2:
		case WorldSwitchLeft1:
		{
			int  spClass;
			char i, maxExtend, y1, x1, y2, x2;
			char switchPos = bufferValue - WorldSwitchLeft1;
			char spriteIndex = level2Sprite[m_level].index;
			char spriteCount = level2Sprite[m_level].count + spriteIndex;

			if(!switchPos)
			{
				y1 = 11;
				x1 = 17;
				y2 = 12;
				x2 = 17;
				maxExtend = 24;
				spClass = SPClass_ExtendMaxX;
			}
			else
			{
				y1 =  2;
				x1 = 15;
				y2 =  2;
				x2 = 16;
				maxExtend = 104;
				spClass = SPClass_Kong;
			}

			setScreenRam(screenRowStart[y1]+x1, WorldEmpty);
			setScreenRam(screenRowStart[y2]+x2, WorldEmpty);
			setScreenRam(screenRowStart[switchPositions[switchPos].y]+switchPositions[switchPos].x, WorldSwitchRight);
			setColourRam(screenRowStart[y1]+x1, levelColour[m_level][COLOUR_Background]);
			setColourRam(screenRowStart[y2]+x2, levelColour[m_level][COLOUR_Background]);

			for(i = spriteIndex; i < spriteCount; ++i)
			{
				SpriteData *sprt = &spriteData[i];
				if(spClass & sprt->spriteClass)
				{
					if(spClass & SPClass_ExtendMaxX)
						sprt->curLocalStorage = sprt->max;
					else
						sprt->curDirection = 1;
					sprt->max += maxExtend;
					break;
				}
			}
			return ColNoCol;
		}
			
		case WorldKey1:
		case WorldKey2:
		case WorldKey3:
		case WorldKey4:
		case WorldKey5:
		{
			int keyPos = bufferValue - WorldKey1;
			int offset = screenRowStart[keyPositions[m_level][keyPos].y]+keyPositions[m_level][keyPos].x;
			setScreenRam(offset, WorldEmpty);
			setColourRam(offset, levelColour[m_level][COLOUR_Background]);
			++m_keysFound;
			m_score += 100;
			drawScores();
			return ColNoCol;
		}
			
		default:
			return ColFloor;
	}
	return ColNoCol;
}
Пример #5
0
void runGameplay(GameVars* gameVars)
{
    //GAME
    
    //Draw the court
    drawCourt();
    
    //Draw the scores
    drawScores(gameVars);
    
    //Game play states
    switch (gameVars->gameState) {
        case GSGameStart:
        {
#ifdef DEBUG
            debugPrint("START\x80");
#endif
            //Draw Ready message
            drawReady(0x80);
            
            //Wait for a number of frames
            waitForFramesThenMoveOnToNextState(60, gameVars);
        }
            break;
            
        case GSWaitForServe:
        {
#ifdef DEBUG
            debugPrint("SERVE\x80");
#endif
            //Score max?
            if (gameVars->player1.score >= maxScoreForPlayer
                || gameVars->player2.score >= maxScoreForPlayer)
            {
                //Served - move to next state
                moveToNextGameState(gameVars, GEWinner);
                return;
            }
            
            //Draw player paddles
            movePaddles(gameVars);

            //Inform who is about to serve
            drawServe(gameVars->player1ServeNext);
            
            //wait for user to start game with button 4
            readButton();
            
            //Player 1 Button 4 or P2 Button 4
            if (
                (gameVars->player1ServeNext && (_BTN_CUR_MASK & _JOY1_B4))
                ||
                (!gameVars->player1ServeNext && (_BTN_CUR_MASK & _JOY2_B4))
                )
            {
                //Position the ball and make visible
                serve(gameVars);
                
                //Served - move to next state
                moveToNextGameState(gameVars, GENone);
            }

        }
            break;
            
        case GSPlay:
        {
#ifdef DEBUG
            debugPrint("PLAY\x80");
#endif
            //GAME PLAY ACTION
            
            drawCenterLine(gameVars);
            
            //Draw player paddles
            movePaddles(gameVars);
            
            //Only deal with visible balls
            if(gameVars->ball.visibility == false) return;
            
            //Move ball - check for goal
            moveBallSprite(gameVars);
        }
            break;
            
        case GSScored:
        {
#ifdef DEBUG
            debugPrint("SCORED\x80");
#endif
            //Goal!
            drawPoint(!gameVars->player1ServeNext);
            
            waitForFramesThenMoveOnToNextState(60, gameVars);
        }
            break;
            
        case GSGameOver:
        {
#ifdef DEBUG
            debugPrint("GAMEOVER\x80");
#endif
            //Display 'Game Over'
            drawGameOver(gameVars->player1.score > gameVars->player2.score);
            
            //wait for user to select replay or menu
            readButton();
            //Player 1 Button 1
            if (_BTN_CUR_MASK & _JOY1_B1)
            {
                //Reset scores
                resetPlayerScores(gameVars);
                
                //Replay - move to next state
                moveToNextGameState(gameVars, GEPlayAgain);
            }
            else if (_BTN_CUR_MASK & _JOY1_B2)
            {
                //Reset scores
                resetPlayerScores(gameVars);
                
                //Menu - move to next state
                moveToNextGameState(gameVars, GEBackToMenu);
            }
        }
            break;
            
        default:
            break;
    }
    
}