Revision: 2774
          http://rigsofrods.svn.sourceforge.net/rigsofrods/?rev=2774&view=rev
Author:   rorthomas
Date:     2012-06-02 21:10:48 +0000 (Sat, 02 Jun 2012)
Log Message:
-----------
skymanager fixes for the new terrain

Modified Paths:
--------------
    trunk/source/main/gameplay/RoRFrameListener.cpp
    trunk/source/main/gfx/SkyManager.cpp
    trunk/source/main/gfx/SkyManager.h
    trunk/source/main/terrain/TerrainGeometryManager.cpp
    trunk/source/main/terrain/TerrainGeometryManager.h
    trunk/source/main/terrain/TerrainManager.h

Modified: trunk/source/main/gameplay/RoRFrameListener.cpp
===================================================================
--- trunk/source/main/gameplay/RoRFrameListener.cpp     2012-06-02 20:04:00 UTC 
(rev 2773)
+++ trunk/source/main/gameplay/RoRFrameListener.cpp     2012-06-02 21:10:48 UTC 
(rev 2774)
@@ -3193,6 +3193,12 @@
                {
                        gEnv->terrainManager->getWater()->framestep(dt);
                }
+
+               // trigger updating of shadows etc
+               SkyManager *sky = gEnv->terrainManager->getSkyManager();
+               if(sky) sky->detectUpdate();
+               
+               gEnv->terrainManager->update(dt);
        }
 
        //update visual - antishaking
@@ -3205,6 +3211,7 @@
                        //BeamFactory::getSingleton().updateAI(dt);
        }
 
+
        if (!updateEvents(dt))
        {
                LOG("exiting...");

Modified: trunk/source/main/gfx/SkyManager.cpp
===================================================================
--- trunk/source/main/gfx/SkyManager.cpp        2012-06-02 20:04:00 UTC (rev 
2773)
+++ trunk/source/main/gfx/SkyManager.cpp        2012-06-02 21:10:48 UTC (rev 
2774)
@@ -22,13 +22,15 @@
 #include "SkyManager.h"
 
 #include "Settings.h"
+#include "TerrainManager.h"
+#include "TerrainGeometryManager.h"
 
 #include <Caelum.h>
 
 using namespace Ogre;
 
 //---------------------------------------------------------------------
-SkyManager::SkyManager() : mCaelumSystem(0)
+SkyManager::SkyManager() : mCaelumSystem(0), lc(0)
 {
        // Initialise CaelumSystem.
        mCaelumSystem = new Caelum::CaelumSystem (gEnv->ogreRoot, 
gEnv->sceneManager, Caelum::CaelumSystem::CAELUM_COMPONENTS_NONE);
@@ -63,6 +65,19 @@
                mCaelumSystem->updateSubcomponents(dt);
 }
 
+void SkyManager::detectUpdate()
+{
+       if (!mCaelumSystem || !gEnv->terrainManager) return;
+       Caelum::LongReal c = mCaelumSystem->getUniversalClock()->getJulianDay();
+
+       if(c - lc > 0.001f)
+       {
+               gEnv->terrainManager->getGeometryManager()->updateLightMap();
+       }
+
+       lc = c;
+}
+
 void SkyManager::loadScript(String script)
 {
        // load the caelum config

Modified: trunk/source/main/gfx/SkyManager.h
===================================================================
--- trunk/source/main/gfx/SkyManager.h  2012-06-02 20:04:00 UTC (rev 2773)
+++ trunk/source/main/gfx/SkyManager.h  2012-06-02 21:10:48 UTC (rev 2774)
@@ -47,8 +47,10 @@
        void forceUpdate(float dt);
 
        void notifyCameraChanged(Ogre::Camera *cam);
+
+       void detectUpdate();
 protected:
-
+       Caelum::LongReal lc;
     Caelum::CaelumSystem *mCaelumSystem;
        Caelum::CaelumSystem *getCaelumSystem() { return mCaelumSystem; };
 };

Modified: trunk/source/main/terrain/TerrainGeometryManager.cpp
===================================================================
--- trunk/source/main/terrain/TerrainGeometryManager.cpp        2012-06-02 
20:04:00 UTC (rev 2773)
+++ trunk/source/main/terrain/TerrainGeometryManager.cpp        2012-06-02 
21:10:48 UTC (rev 2774)
@@ -121,7 +121,35 @@
        mTerrainGroup->freeTemporaryResources();
 }
 
+void TerrainGeometryManager::updateLightMap()
+{
+       TerrainGroup::TerrainIterator ti = mTerrainGroup->getTerrainIterator();
+       while(ti.hasMoreElements())
+       {
+               Terrain *terrain = ti.getNext()->instance;
+               //ShadowManager::getSingleton().updatePSSM(terrain);
+               if(!terrain->isDerivedDataUpdateInProgress())
+               {
+                       terrain->dirtyLightmap();
+                       terrain->updateDerivedData();
+               }
+       }
+}
 
+void TerrainGeometryManager::update(float dt)
+{
+       Light *light = gEnv->terrainManager->getMainLight();
+       TerrainGlobalOptions *terrainOptions = 
TerrainGlobalOptions::getSingletonPtr();
+       if (light)
+       {
+               
terrainOptions->setLightMapDirection(light->getDerivedDirection());
+               
terrainOptions->setCompositeMapDiffuse(light->getDiffuseColour());
+       }
+       
terrainOptions->setCompositeMapAmbient(gEnv->sceneManager->getAmbientLight());
+
+       mTerrainGroup->update();
+}
+
 void TerrainGeometryManager::configureTerrainDefaults()
 {
        OGRE_NEW TerrainGlobalOptions();

Modified: trunk/source/main/terrain/TerrainGeometryManager.h
===================================================================
--- trunk/source/main/terrain/TerrainGeometryManager.h  2012-06-02 20:04:00 UTC 
(rev 2773)
+++ trunk/source/main/terrain/TerrainGeometryManager.h  2012-06-02 21:10:48 UTC 
(rev 2774)
@@ -60,6 +60,9 @@
        }
 
        Ogre::Vector3 getMaxTerrainSize();
+
+       void update(float dt);
+       void updateLightMap();
 protected:
 
        Ogre::ConfigFile terrainConfig;

Modified: trunk/source/main/terrain/TerrainManager.h
===================================================================
--- trunk/source/main/terrain/TerrainManager.h  2012-06-02 20:04:00 UTC (rev 
2773)
+++ trunk/source/main/terrain/TerrainManager.h  2012-06-02 21:10:48 UTC (rev 
2774)
@@ -54,6 +54,7 @@
        Ogre::Light *getMainLight() { return main_light; };
        Ogre::Vector3 getSpawnPos() { return start_position; };
        bool getTrucksLoaded() { return trucksLoaded; };
+       TerrainGeometryManager *getGeometryManager() { return geometry_manager; 
};
 
 protected:
        // members

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Rigsofrods-devel mailing list
Rigsofrods-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/rigsofrods-devel

Reply via email to