From 0a41c5fff8e571bd37ce2d7f58059a684f8ab373 Mon Sep 17 00:00:00 2001 From: auria Date: Wed, 18 May 2011 01:00:26 +0000 Subject: [PATCH] Fix fog wrt LOD nodes git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/trunk@8633 178a84e3-b1eb-0310-8ba1-8eac791a3b58 --- src/tracks/track.cpp | 15 +++++++++++++-- src/tracks/track_object.hpp | 2 ++ src/tracks/track_object_manager.cpp | 19 +++++++++++++++++++ src/tracks/track_object_manager.hpp | 4 ++++ 4 files changed, 38 insertions(+), 2 deletions(-) diff --git a/src/tracks/track.cpp b/src/tracks/track.cpp index fdb2576ac..d0da12496 100644 --- a/src/tracks/track.cpp +++ b/src/tracks/track.cpp @@ -1274,9 +1274,11 @@ void Track::loadTrackModel(World* parent, unsigned int mode_id) { const unsigned int count = m_all_nodes.size(); for(unsigned int i=0; isetMaterialFlag(video::EMF_FOG_ENABLE, true); + { + adjustForFog(m_all_nodes[i]); + } } - + m_track_object_manager->enableFog(m_use_fog); // Sky dome and boxes support // -------------------------- @@ -1365,6 +1367,15 @@ void Track::loadTrackModel(World* parent, unsigned int mode_id) void Track::adjustForFog(scene::ISceneNode *node) { node->setMaterialFlag(video::EMF_FOG_ENABLE, m_use_fog); + + if (node->getType() == scene::ESNT_LOD_NODE) + { + std::vector& subnodes = ((LODNode*)node)->getAllNodes(); + for (unsigned int n=0; nsetMaterialFlag(video::EMF_FOG_ENABLE, true); + } + } } // adjustForFog //----------------------------------------------------------------------------- diff --git a/src/tracks/track_object.hpp b/src/tracks/track_object.hpp index fa534bfbb..3f8dc9dce 100644 --- a/src/tracks/track_object.hpp +++ b/src/tracks/track_object.hpp @@ -86,6 +86,8 @@ public: * e.g. be overwritten by physical objects etc. */ virtual void handleExplosion(const Vec3& pos, bool directHit) {}; void setEnable(bool mode); + + scene::ISceneNode* getNode() { return m_node; } }; // TrackObject #endif diff --git a/src/tracks/track_object_manager.cpp b/src/tracks/track_object_manager.cpp index 2494d9872..8ba6d6985 100644 --- a/src/tracks/track_object_manager.cpp +++ b/src/tracks/track_object_manager.cpp @@ -22,6 +22,7 @@ #include "config/user_config.hpp" #include "animations/billboard_animation.hpp" #include "animations/three_d_animation.hpp" +#include "graphics/lod_node.hpp" #include "io/xml_node.hpp" #include "physics/physical_object.hpp" #include "tracks/track_object.hpp" @@ -120,3 +121,21 @@ void TrackObjectManager::update(float dt) } // update // ---------------------------------------------------------------------------- + +void TrackObjectManager::enableFog(bool enable) +{ + const unsigned int count = m_all_objects.size(); + for(unsigned int i=0; igetNode()->setMaterialFlag(video::EMF_FOG_ENABLE, true); + + if (m_all_objects[i]->getNode()->getType() == scene::ESNT_LOD_NODE) + { + std::vector& nodes = ((LODNode*)m_all_objects[i]->getNode())->getAllNodes(); + for (unsigned int n=0; nsetMaterialFlag(video::EMF_FOG_ENABLE, enable); + } + } + } +} diff --git a/src/tracks/track_object_manager.hpp b/src/tracks/track_object_manager.hpp index ab6853479..b1019b477 100644 --- a/src/tracks/track_object_manager.hpp +++ b/src/tracks/track_object_manager.hpp @@ -49,6 +49,10 @@ public: void handleExplosion(const Vec3 &pos, const PhysicalObject *mp) const; void reset(); void init(); + + /** Enable or disable fog on objects */ + void enableFog(bool enable); + }; // class TrackObjectManager #endif