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); } }
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()); }
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); } }