void Renderer::renderBackground(BackgroundElements &backgroundElements)
{
    m_spriteBatcher->beginBatch();
    
    renderGameObject(backgroundElements.getLeftBackground(), Assets::getBackgroundLeftSource());
    renderGameObject(backgroundElements.getRightBackground(), Assets::getBackgroundRightSource());
    
    m_spriteBatcher->endBatchWithTexture(*m_backgroundTexture);
}
void OpenGLESRenderer::renderWorldForeground(World &world, Glove &glove, float titleAlpha)
{
    m_spriteBatcher->beginBatch();
    for (std::vector<std::unique_ptr<Obstacle>>::iterator itr = world.getObstacles().begin(); itr != world.getObstacles().end(); ++itr)
	{
        renderObstacle((**itr));
	}
    m_spriteBatcher->endBatchWithTexture(m_gameTexture);
    
    m_spriteBatcher->beginBatch();
    renderGameObject(world.getPlane(), Assets::getPlaneTextureRegion(world.getPlane()));
    m_spriteBatcher->endBatchWithTexture(m_gameTexture);
    
    if(world.getPlane().getPuffClouds().size() > 0)
    {
        m_spriteBatcherWithColor->beginBatch();
        
        for (std::vector<std::unique_ptr<PuffCloud>>::iterator itr = world.getPlane().getPuffClouds().begin(); itr != world.getPlane().getPuffClouds().end(); itr++)
        {
            Color puffCloudColor = { 1, 1, 1, (*itr)->getAlpha() };
            m_spriteBatcherWithColor->drawSprite((*itr)->getPosition().getX(), (*itr)->getPosition().getY(), (*itr)->getWidth(), (*itr)->getHeight(), (*itr)->getAngle(), puffCloudColor, Assets::getPuffLargeTextureRegion());
        }
        
        m_spriteBatcherWithColor->endBatchWithTexture(m_gameTexture);
    }
    
    // Bottom Bar (foreground)
    m_spriteBatcher->beginBatch();
    renderGameObject(world.getForegroundLeft(), Assets::getWorldForegroundLeftTextureRegion(world.getEnvironmentType()));
    renderGameObject(world.getForegroundRight(), Assets::getWorldForegroundRightTextureRegion(world.getEnvironmentType()));
    m_spriteBatcher->endBatchWithTexture(m_gameTexture);
    
    if(titleAlpha > 0)
    {
        Color titleColor = { 1, 1, 1, titleAlpha };
        
        m_spriteBatcherWithColor->beginBatch();
        m_spriteBatcherWithColor->drawSprite(TITLE_X, TITLE_Y, TITLE_WIDTH, TITLE_HEIGHT, 0, titleColor, Assets::getTitleTextureRegion());
        m_spriteBatcherWithColor->drawSprite(glove.getPosition().getX(), glove.getPosition().getY(), glove.getWidth(), glove.getHeight(), glove.getAngle(), titleColor, Assets::getGloveTextureRegion(glove));
        m_spriteBatcherWithColor->drawSprite(glove.getPosition().getX() - 3.5f, glove.getPosition().getY(), 4, 2, 0, titleColor, Assets::getTapLeftTextureRegion());
        m_spriteBatcherWithColor->drawSprite(glove.getPosition().getX() + 3.5f, glove.getPosition().getY(), 4, 2, 0, titleColor, Assets::getTapRightTextureRegion());
        m_spriteBatcherWithColor->endBatchWithTexture(m_backgroundTexture);
    }
    
    if(!world.isGameOver() && world.getScore() > 0 && titleAlpha < 0)
    {
        std::stringstream ss;
        ss << world.getScore();
        std::string score = ss.str();
        static Color scoreColor = { 1, 1, 1, 1 };
        
        m_spriteBatcherWithColor->beginBatch();
        m_font->renderText(*m_spriteBatcherWithColor, score, SCORE_FONT_X, SCORE_FONT_Y, SCORE_FONT_WIDTH, SCORE_FONT_HEIGHT, scoreColor, true);
        m_spriteBatcherWithColor->endBatchWithTexture(m_gameTexture);
    }
}
Exemple #3
0
void renderGameObject(shared_ptr<GameObject> gameObject)
{
	MVPMatrix = projMatrix*viewMatrix*gameObject->getModelMatrix();
  //shared_ptr<Material> mat = gameObject->getMaterial();
	
  
  if (gameObject->getShaderProgram() > 0){
		currentShaderProgam = gameObject->getShaderProgram();
		glUseProgram(currentShaderProgam);
	}
  GLint texture0Location = glGetUniformLocation(currentShaderProgam, "texture0");
  
  if (gameObject->getDiffuseMap() > 0){
    currentDiffuseMap = gameObject->getDiffuseMap();
  }
  glActiveTexture(GL_TEXTURE0);
  glBindTexture(GL_TEXTURE_2D, currentDiffuseMap);
  glUniform1i(texture0Location, 0);
 
	GLint MVPLocation = glGetUniformLocation(currentShaderProgam, "MVP");

	GLint ambientLightColourLocation = glGetUniformLocation(currentShaderProgam, "ambientLightColour");
	GLint ambientMaterialColourLocation = glGetUniformLocation(currentShaderProgam, "ambientMaterialColour");

	GLint diffuseLightColourLocation = glGetUniformLocation(currentShaderProgam, "diffuseLightColour");
	GLint diffuseLightMaterialLocation = glGetUniformLocation(currentShaderProgam, "diffuseMaterialColour");
	GLint lightDirectionLocation = glGetUniformLocation(currentShaderProgam, "lightDirection");

	GLint specularLightColourLocation = glGetUniformLocation(currentShaderProgam, "specularLightColour");
	GLint specularLightMaterialLocation = glGetUniformLocation(currentShaderProgam, "specularMaterialColour");
	GLint specularPowerLocation = glGetUniformLocation(currentShaderProgam, "specularPower");
	GLint cameraPositionLocation = glGetUniformLocation(currentShaderProgam, "cameraPosition");

	GLint modelLocation = glGetUniformLocation(currentShaderProgam, "Model");

	glUniformMatrix4fv(MVPLocation, 1, GL_FALSE, value_ptr(MVPMatrix));
	glUniformMatrix4fv(modelLocation, 1, GL_FALSE, value_ptr(gameObject->getModelMatrix()));

	glUniform4fv(ambientLightColourLocation, 1, value_ptr(ambientLightColour));
	glUniform4fv(ambientMaterialColourLocation, 1, value_ptr(gameObject->getAmbientMaterial()));

	glUniform4fv(diffuseLightColourLocation, 1, value_ptr(diffuseLightColour));
	glUniform4fv(diffuseLightMaterialLocation, 1, value_ptr(gameObject->getDiffuseMaterial()));
	glUniform3fv(lightDirectionLocation, 1, value_ptr(lightDirection));

	glUniform4fv(specularLightColourLocation, 1, value_ptr(specularLightColour));
	glUniform4fv(specularLightMaterialLocation, 1, value_ptr(gameObject->getSpecularMaterial()));
	glUniform1f(specularPowerLocation, gameObject->getSpecularPower());
	glUniform3fv(cameraPositionLocation, 1, value_ptr(cameraPosition));


	glBindVertexArray(gameObject->getVertexArrayObject());

	glDrawElements(GL_TRIANGLES, gameObject->getNumberOfIndices(), GL_UNSIGNED_INT, 0); 

	for (int i = 0; i < gameObject->getNumberOfChildren(); i++)
	{
		renderGameObject(gameObject->getChild(i));
	}
}
void OpenGLESRenderer::renderObstacle(Obstacle &obstacle)
{
    for (std::vector<std::unique_ptr<SpikeGameObject>>::iterator itr = obstacle.getSpikes().begin(); itr != obstacle.getSpikes().end(); ++itr)
    {
        renderGameObject((**itr), Assets::getWorldSpikeTextureRegion((**itr).getType()));
    }
}
void Renderer::renderBackgroundOverlay(BackgroundElements &backgroundElements, TimeButton &timeButton)
{
    m_spriteBatcher->beginBatch();
    for (std::list<std::unique_ptr<Asteroid>>::iterator itr = backgroundElements.getAsteroids().begin(); itr != backgroundElements.getAsteroids().end(); ++itr)
    {
        renderGameObject((**itr), Assets::getAsteroidSourceForType((*itr)->getAsteroidType()));
    }
    
    for (std::list<std::unique_ptr<ShipModule>>::iterator itr = backgroundElements.getShipModules().begin(); itr != backgroundElements.getShipModules().end(); itr++)
    {
        renderGameObject((**itr), Assets::getShipModuleSource((*itr)->getType()));
    }
    
    renderGameObject(backgroundElements.getCoreShipModule(), Assets::getCoreShipModuleSource(backgroundElements.getCoreShipModule()));
    renderGameObject(timeButton, Assets::getTimeButtonSourceForSpeedScalar(timeButton.getSpeedScalar()));
    
    m_spriteBatcher->endBatchWithTexture(*m_backgroundTexture);
}
void Renderer::renderDialog(Dialog &dialog)
{
    m_spriteBatcher->beginBatch();
    
    renderGameObject(dialog, Assets::getDialogSource());
    
    m_spriteBatcher->endBatchWithTexture(*m_topLevelUiTexture);
    
    renderText(dialog.getTitle());
    renderText(dialog.getLeftButton());
    renderText(dialog.getRightButton());
}
Exemple #7
0
void renderScene()
{
	glBindFramebuffer(GL_FRAMEBUFFER, frameBufferObject);
	//Set the clear colour(background)
	glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
	//clear the colour and depth buffer
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  //renderGameObject(mercury);
	for (auto iter = gameObjects.begin(); iter != gameObjects.end(); iter++)
	{
		renderGameObject((*iter));
	}
}
void OpenGLESRenderer::renderWorldGameOver(World &world, GameButton &okButton, GameButton &leaderboardsButton, int bestScore)
{
    m_spriteBatcher->beginBatch();
    m_spriteBatcher->drawSprite(GAME_OVER_X, GAME_OVER_Y, GAME_OVER_WIDTH, GAME_OVER_HEIGHT, 0, Assets::getGameOverTextureRegion());
    m_spriteBatcher->drawSprite(DIALOG_GAME_OVER_X, DIALOG_GAME_OVER_Y, DIALOG_GAME_OVER_WIDTH, DIALOG_GAME_OVER_HEIGHT, 0, Assets::getDialogTextureRegion());
    renderGameObject(okButton, Assets::getOkButtonTextureRegion());
    renderGameObject(leaderboardsButton, Assets::getLeaderboardsButtonTextureRegion());
    
    if(world.getScore() >= 50)
    {
        m_spriteBatcher->drawSprite(MEDAL_X, MEDAL_Y, MEDAL_WIDTH, MEDAL_HEIGHT, 0, Assets::getGoldMedalTextureRegion());
    }
    else if(world.getScore() >= 25)
    {
        m_spriteBatcher->drawSprite(MEDAL_X, MEDAL_Y, MEDAL_WIDTH, MEDAL_HEIGHT, 0, Assets::getSilverMedalTextureRegion());
    }
    else if(world.getScore() >= 10)
    {
        m_spriteBatcher->drawSprite(MEDAL_X, MEDAL_Y, MEDAL_WIDTH, MEDAL_HEIGHT, 0, Assets::getBronzeMedalTextureRegion());
    }
    
    m_spriteBatcher->endBatchWithTexture(m_gameTexture);
    
    std::stringstream ss;
    ss << world.getScore();
    std::string scoreString = ss.str();
    
    std::stringstream ss2;
    ss2 << bestScore;
    std::string bestScoreString = ss2.str();
    
    static Color scoreColor = { 1, 1, 1, 1 };
    
    m_spriteBatcherWithColor->beginBatch();
    m_font->renderText(*m_spriteBatcherWithColor, scoreString, SCORE_FONT_IN_WINDOW_X, SCORE_FONT_IN_WINDOW_Y, FONT_IN_WINDOW_WIDTH, FONT_IN_WINDOW_HEIGHT, scoreColor, false, true);
    m_font->renderText(*m_spriteBatcherWithColor, bestScoreString, BEST_FONT_IN_WINDOW_X, BEST_FONT_IN_WINDOW_Y, FONT_IN_WINDOW_WIDTH, FONT_IN_WINDOW_HEIGHT, scoreColor, false, true);
    m_spriteBatcherWithColor->endBatchWithTexture(m_gameTexture);
}
void Renderer::renderWorldAndTouchCursor(World &world, TouchCursor &touchCursor)
{
    m_spriteBatcher->beginBatch();
    
    for (std::vector<std::unique_ptr<Spawn>>::iterator itr = world.getSpawns().begin(); itr != world.getSpawns().end(); itr++)
    {
        renderGameObject((**itr), Assets::getSpawnSource((**itr)));
    }
    
    for (std::vector<std::unique_ptr<WorldPlatform>>::iterator itr = world.getPlatforms().begin(); itr != world.getPlatforms().end(); itr++)
    {
        renderGameObject((**itr), Assets::getPlatformSource((**itr)));
    }
    
    m_spriteBatcher->endBatchWithTexture(*m_spawnPlatformsProjectilesTowersTexture);
    
    if(world.getCreeps().size() > 0)
    {
        m_spriteBatcher->beginBatch();
        
        for (std::vector<std::unique_ptr<Creep>>::iterator itr = world.getCreeps().begin(); itr != world.getCreeps().end(); itr++)
        {
            Color color = (**itr).getColor();
            m_spriteBatcher->drawSprite((**itr).getPosition().getX(), (**itr).getPosition().getY(), (**itr).getWidth(), (**itr).getHeight(), (**itr).getAngle(), color, Assets::getCreepSource((**itr), false));
        }
        
        m_spriteBatcher->endBatchWithTexture(*m_creepsTexture);
    }
    
    if (touchCursor.isVisible())
    {
        Color color = touchCursor.getShadowColor();
        m_circleBatcher->renderCircle(touchCursor.getSelectedTowerShadow(), color);
    }
    
    if(world.getTowers().size() > 0)
    {
        m_spriteBatcher->beginBatch();
        
        for (std::vector<std::unique_ptr<Tower>>::iterator itr = world.getTowers().begin(); itr != world.getTowers().end(); itr++)
        {
            renderGameObject((**itr), Assets::getTowerSource((**itr)));
        }
        
        m_spriteBatcher->endBatchWithTexture(*m_spawnPlatformsProjectilesTowersTexture);
    }
    
    if(world.getMissiles().size() > 0)
    {
        m_spriteBatcher->beginBatch();
        
        for (std::vector<std::unique_ptr<Missile>>::iterator itr = world.getMissiles().begin(); itr != world.getMissiles().end(); itr++)
        {
            renderGameObject((**itr), Assets::getMissileSource((**itr)));
        }
        
        m_spriteBatcher->endBatchWithTexture(*m_spawnPlatformsProjectilesTowersTexture);
    }
    
    if(world.getIceBlasts().size() > 0)
    {
        bool renderAtLeastOneIceBlast = false;
        for (std::vector<std::unique_ptr<IceBlast>>::iterator itr = world.getIceBlasts().begin(); itr != world.getIceBlasts().end(); itr++)
        {
            if((*itr)->isBlasting())
            {
                renderAtLeastOneIceBlast = true;
                break;
            }
        }
        
        if(renderAtLeastOneIceBlast)
        {
            m_spriteBatcher->beginBatch();
            
            for (std::vector<std::unique_ptr<IceBlast>>::iterator itr = world.getIceBlasts().begin(); itr != world.getIceBlasts().end(); itr++)
            {
                if((*itr)->isBlasting())
                {
                    renderGameObject((**itr), Assets::getIceBlastSource((**itr)));
                }
            }
            
            m_spriteBatcher->endBatchWithTexture(*m_spawnPlatformsProjectilesTowersTexture);
        }
    }
    
    if(world.getFireBolts().size() > 0)
    {
        m_spriteBatcher->beginBatch();
        
        for (std::vector<std::unique_ptr<FireBolt>>::iterator itr = world.getFireBolts().begin(); itr != world.getFireBolts().end(); itr++)
        {
            renderGameObject((**itr), Assets::getFireBoltSource((**itr)));
        }
        
        m_spriteBatcher->endBatchWithTexture(*m_spawnPlatformsProjectilesTowersTexture);
    }
    
    if(world.getAcidDrops().size() > 0)
    {
        m_spriteBatcher->beginBatch();
        
        for (std::vector<std::unique_ptr<AcidDrop>>::iterator itr = world.getAcidDrops().begin(); itr != world.getAcidDrops().end(); itr++)
        {
            renderGameObject((**itr), Assets::getAcidDropSource((**itr)));
        }
        
        m_spriteBatcher->endBatchWithTexture(*m_spawnPlatformsProjectilesTowersTexture);
    }
    
    if(world.getLazerBeams().size() > 0)
    {
        m_lineBatcher->beginBatch();
        for (std::vector<std::unique_ptr<LazerBeam>>::iterator itr = world.getLazerBeams().begin(); itr != world.getLazerBeams().end(); itr++)
        {
            if ((*itr)->isFiring())
            {
                Color color = (*itr)->getColor();
                m_lineBatcher->renderLine((*itr)->getPath(), color);
            }
        }
        
        m_lineBatcher->endBatch();
    }
    
    if(world.getElectricBolts().size() > 0)
    {
        m_spriteBatcher->beginBatch();
        
        for (std::vector<std::unique_ptr<ElectricBolt>>::iterator itr = world.getElectricBolts().begin(); itr != world.getElectricBolts().end(); itr++)
        {
            Color color = (**itr).getColor();
            m_spriteBatcher->drawSprite((**itr).getPosition().getX(), (**itr).getPosition().getY(), (**itr).getWidth(), (**itr).getHeight(), (**itr).getAngle(), color, Assets::getElectricBoltSource((**itr)));
        }
        
        m_spriteBatcher->endBatchWithTexture(*m_spawnPlatformsProjectilesTowersTexture);
    }
    
    if(world.getProjectiles().size() > 0)
    {
        m_spriteBatcher->beginBatch();
        
        for (std::vector<std::unique_ptr<Projectile>>::iterator itr = world.getProjectiles().begin(); itr != world.getProjectiles().end(); itr++)
        {
            Color color = (**itr).getColor();
            m_spriteBatcher->drawSprite((**itr).getPosition().getX(), (**itr).getPosition().getY(), (**itr).getWidth(), (**itr).getHeight(), (**itr).getAngle(), color, Assets::getProjectileSource((**itr)));
        }
        
        m_spriteBatcher->endBatchWithTexture(*m_spawnPlatformsProjectilesTowersTexture);
    }
    
    if(world.getExplosions().size() > 0)
    {
        m_spriteBatcher->beginBatch();
        
        for (std::vector<std::unique_ptr<Explosion>>::iterator itr = world.getExplosions().begin(); itr != world.getExplosions().end(); itr++)
        {
            renderGameObject((**itr), Assets::getExplosionSource((**itr)));
        }
        
        m_spriteBatcher->endBatchWithTexture(*m_looseObjectsTexture);
    }
    
    if(world.getToxicClouds().size() > 0)
    {
        for (std::vector<std::unique_ptr<ToxicCloud>>::iterator itr = world.getToxicClouds().begin(); itr != world.getToxicClouds().end(); itr++)
        {
            Color color = (*itr)->getColor();
            m_circleBatcher->renderCircle((*itr)->getRadius(), color);
        }
    }
    
    if(world.getCreepBodyParts().size() > 0)
    {
        m_spriteBatcher->beginBatch();
        
        for (std::vector<std::unique_ptr<CreepBodyPart>>::iterator itr = world.getCreepBodyParts().begin(); itr != world.getCreepBodyParts().end(); itr++)
        {
            Color color = (**itr).getColor();
            m_spriteBatcher->drawSprite((**itr).getPosition().getX(), (**itr).getPosition().getY(), (**itr).getWidth(), (**itr).getHeight(), (**itr).getAngle(), color, Assets::getCreepBodyPartSource((**itr)));
        }
        
        m_spriteBatcher->endBatchWithTexture(*m_looseObjectsTexture);
    }
    
    if(world.getCreeps().size() > 0)
    {
        bool renderAtLeastOneCreepHealthBar = false;
        for (std::vector<std::unique_ptr<Creep>>::iterator itr = world.getCreeps().begin(); itr != world.getCreeps().end(); itr++)
        {
            if((**itr).isHealthBarShowing())
            {
                renderAtLeastOneCreepHealthBar = true;
                break;
            }
        }
        
        if(renderAtLeastOneCreepHealthBar)
        {
            m_spriteBatcher->beginBatch();
            
            for (std::vector<std::unique_ptr<Creep>>::iterator itr = world.getCreeps().begin(); itr != world.getCreeps().end(); itr++)
            {
                if((**itr).isHealthBarShowing())
                {
                    m_spriteBatcher->drawSprite((**itr).getPosition().getX(), (**itr).getPosition().getY() + (**itr).getHeight() / 2, HEALTH_BAR_WIDTH, HEALTH_BAR_HEIGHT, 0, Assets::getCreepHealthBarSource(**itr));
                }
            }
            
            m_spriteBatcher->endBatchWithTexture(*m_creepsTexture);
        }
    }
    
    if(world.getProjectileParticles().size() > 0)
    {
        m_spriteBatcher->beginBatch();
        
        for (std::vector<std::unique_ptr<ProjectileParticle>>::iterator itr = world.getProjectileParticles().begin(); itr != world.getProjectileParticles().end(); itr++)
        {
            Color color = (**itr).getColor();
            m_spriteBatcher->drawSprite((**itr).getPosition().getX(), (**itr).getPosition().getY(), (**itr).getWidth(), (**itr).getHeight(), (**itr).getAngle(), color, Assets::getProjectileParticleSource((**itr)));
        }
        
        m_spriteBatcher->endBatchWithTexture(*m_spawnPlatformsProjectilesTowersTexture);
    }
    
    if(world.getTowers().size() > 0)
    {
        for (std::vector<std::unique_ptr<Tower>>::iterator itr = world.getTowers().begin(); itr != world.getTowers().end(); itr++)
        {
            if((*itr)->getState() == Tower_State::UPGRADING)
            {
                Color color = Tower::getUpgradeCursorColor();
                m_circleBatcher->renderPartialCircle((*itr)->getUpgradeCursor(), (*itr)->getUpgradeCursorArcDegrees(), color);
            }
        }
    }
    
    if(world.getSpawnPointsState() == World_Spawn_Points_State::COUNTING_DOWN)
    {
        for (std::vector<std::unique_ptr<Spawn>>::iterator itr = world.getSpawns().begin(); itr != world.getSpawns().end(); itr++)
        {
            Color color = World::getSpawnTimerColor();
            m_circleBatcher->renderPartialCircle((*itr)->getSpawnNextWaveTimer(), world.getSpawnNextWaveTimerArcDegrees(), color);
        }
    }
    
    if (touchCursor.isVisible())
    {
        Color color = touchCursor.getColor();
        m_circleBatcher->renderCircle(touchCursor.getDisplayCircle(), color);
    }
}