From 789c850049774160bad1ffc9124c301a4e1d9d86 Mon Sep 17 00:00:00 2001 From: Matei Date: Thu, 31 Aug 2006 23:56:12 +0000 Subject: [PATCH] # Updates to fog of war rendering. This was SVN commit r4270. --- source/renderer/TerrainRenderer.cpp | 3 +++ source/simulation/TerritoryManager.cpp | 26 ++++++++++++++++++++++++-- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/source/renderer/TerrainRenderer.cpp b/source/renderer/TerrainRenderer.cpp index 97b663c68e..7ae0eb4936 100644 --- a/source/renderer/TerrainRenderer.cpp +++ b/source/renderer/TerrainRenderer.cpp @@ -455,6 +455,7 @@ void TerrainRenderer::RenderWater() const int DZ[] = {0,1,1,0}; GLint vertexDepth = 0; // water depth attribute, if using fancy water + GLint losMultiplier = 0; // LOS multiplier, if using fancy water if(fancy) { @@ -504,6 +505,7 @@ void TerrainRenderer::RenderWater() pglUniform3fvARB( cameraPos, 1, &camPos.X ); vertexDepth = ogl_program_get_attrib_location( m->fancyWaterShader, "vertexDepth" ); + losMultiplier = ogl_program_get_attrib_location( m->fancyWaterShader, "losMultiplier" ); } float repeatPeriod = (fancy ? WaterMgr->m_RepeatPeriod : 16.0f); @@ -570,6 +572,7 @@ void TerrainRenderer::RenderWater() if(fancy) { pglVertexAttrib1fARB( vertexDepth, WaterMgr->m_WaterHeight - terrainHeight ); + pglVertexAttrib1fARB( losMultiplier, losMod ); } else { diff --git a/source/simulation/TerritoryManager.cpp b/source/simulation/TerritoryManager.cpp index 96509440de..9088464a6d 100644 --- a/source/simulation/TerritoryManager.cpp +++ b/source/simulation/TerritoryManager.cpp @@ -8,6 +8,7 @@ #include "graphics/GameView.h" #include "Entity.h" #include "EntityManager.h" +#include "LOSManager.h" #include "graphics/Unit.h" #include "maths/Bound.h" #include "graphics/Model.h" @@ -226,6 +227,8 @@ void CTerritoryManager::renderTerritories() glEnable(GL_LINE_SMOOTH); glLineWidth(1.5f); + CLOSManager* losMgr = g_Game->GetWorld()->GetLOSManager(); + const CTerrain* pTerrain = g_Game->GetWorld()->GetTerrain(); CFrustum frustum = g_Game->GetView()->GetCamera()->GetFrustum(); std::vector::iterator terr=m_Territories.begin(); @@ -255,16 +258,22 @@ void CTerritoryManager::renderTerritories() boundary[i] += (dir1 + dir2).normalize() * 0.3f / cosf(angle/2); } + float r, g, b; + if ( (*terr)->owner->GetPlayerID() == 0 ) { // Use a dark gray for Gaia territories since white looks a bit weird - glColor3f( 0.65f, 0.65f, 0.65f ); + //glColor3f( 0.65f, 0.65f, 0.65f ); + r = g = b = 0.65f; } else { // Use the player's colour const SPlayerColour& col = (*terr)->owner->GetColour(); - glColor3f(col.r, col.g, col.b); + //glColor3f(col.r, col.g, col.b); + r = col.r; + g = col.g; + b = col.b; } for ( std::vector::iterator it = boundary.begin(); it != boundary.end(); it++ ) @@ -280,13 +289,26 @@ void CTerritoryManager::renderTerritories() continue; glBegin(GL_LINE_STRIP); + float iterf = (end - start).GetLength() / TERRITORY_PRECISION_STEP; for ( float i=0; i < iterf; i += TERRITORY_PRECISION_STEP ) { CVector2D pos( Interpolate(start, end, i/iterf) ); + ELOSStatus los = losMgr->GetStatus(pos.x, pos.y, g_Game->GetLocalPlayer()); + float m = 1.0f; + if(los == LOS_UNEXPLORED) m = 0.0f; + else if(los == LOS_EXPLORED) m = 0.7f; + glColor3f(m*r, m*g, m*b); glVertex3f(pos.x, pTerrain->getExactGroundLevel(pos)+.25f, pos.y); } + + ELOSStatus los = losMgr->GetStatus(end.X, end.Z, g_Game->GetLocalPlayer()); + float m = 1.0f; + if(los == LOS_UNEXPLORED) m = 0.0f; + else if(los == LOS_EXPLORED) m = 0.7f; + glColor3f(m*r, m*g, m*b); glVertex3f(end.X, pTerrain->getExactGroundLevel(end.X, end.Z)+.25f, end.Z); + glEnd(); } }