NL3D::CPointLightNamedArray Class Reference

#include <point_light_named_array.h>


Detailed Description

A class used bi CInstanceGroup and CZone. Just a list of pointLights, grouped by name.
Author:
Lionel Berenguier

Nevrax France

Date:
2001

Definition at line 45 of file point_light_named_array.h.

Public Member Functions

void build (const std::vector< CPointLightNamed > &pointLights, std::vector< uint > &indexRemap)
void clear ()
 clear All: pointLights and map.

 CPointLightNamedArray ()
 Constructor.

std::vector< CPointLightNamed > & getPointLights ()
 get the pointLights sorted (mutable version). Be sure what you do!

const std::vector< CPointLightNamed > & getPointLights () const
 get the pointLights sorted (const version).

void initAnimatedLightIndex (const CScene &scene)
void serial (NLMISC::IStream &f)
void setPointLightFactor (const CScene &scene)
 update the Light factor for all pointLights (animated and unanimated one)


Private Types

typedef std::vector< CPointLightGroupTPLGVec

Private Attributes

TPLGVec _PointLightGroupMap
 Info for LightGroupName and setPointLightFactor.

std::vector< CPointLightNamed_PointLights
 List of pointLight.


Member Typedef Documentation

typedef std::vector<CPointLightGroup> NL3D::CPointLightNamedArray::TPLGVec [private]
 

Definition at line 125 of file point_light_named_array.h.


Constructor & Destructor Documentation

NL3D::CPointLightNamedArray::CPointLightNamedArray  ) 
 

Constructor.

Definition at line 40 of file point_light_named_array.cpp.

00041 {
00042 }


Member Function Documentation

void NL3D::CPointLightNamedArray::build const std::vector< CPointLightNamed > &  pointLights,
std::vector< uint > &  indexRemap
 

sort pointLights and make Groups by name for setFactor(). indexRemap gets news Ids for pointLights. eg: old PointLight nb 0 is now at indexRemap[0].

Definition at line 71 of file point_light_named_array.cpp.

References _PointLightGroupMap, _PointLights, and uint.

Referenced by NL3D::CZone::build(), and NL3D::CInstanceGroup::buildPointLightList().

00072 {
00073         uint    i;
00074 
00075         // sort by name.
00076         //----------
00077         // Fill Sort array
00078         vector<CPointLightNamedSort>    pointLightSorts;
00079         pointLightSorts.resize(pointLights.size());
00080         for(i=0; i<pointLightSorts.size(); i++)
00081         {
00082                 pointLightSorts[i].PointLight= &pointLights[i];
00083                 pointLightSorts[i].SrcId= i;
00084         }
00085         // sort
00086         sort(pointLightSorts.begin(), pointLightSorts.end());
00087         // Copy data, and Fill indexRemap array
00088         _PointLights.resize(pointLights.size());
00089         indexRemap.resize(pointLights.size());
00090         for(i=0; i<pointLightSorts.size(); i++)
00091         {
00092                 // Copy yhe PointLight to its new destination
00093                 _PointLights[i]= *pointLightSorts[i].PointLight;
00094                 // set the new index at the old position.
00095                 indexRemap[pointLightSorts[i].SrcId]= i;
00096         }
00097 
00098         // Regroup.
00099         // ---------
00100         _PointLightGroupMap.clear();
00101         if(_PointLights.size() > 0 )
00102         {
00103                 bool    first= true;
00104                 string  precName;
00105                 uint precGroup;
00106                 // for all sorted pointLights
00107                 uint i;
00108                 for(i=0;i<_PointLights.size();i++)
00109                 {
00110                         const   std::string &curName = _PointLights[i].AnimatedLight;
00111                         const   uint curGroup = _PointLights[i].LightGroup;
00112                         if ( first || (precName!=curName) || (precGroup != curGroup) )
00113                         {
00114                                 // End last group
00115                                 if(first)
00116                                         first= false;
00117                                 else
00118                                         _PointLightGroupMap.back ().EndId= i;
00119 
00120                                 // Start new group
00121                                 _PointLightGroupMap.push_back (CPointLightGroup ());
00122                                 _PointLightGroupMap.back ().StartId= i;
00123                                 _PointLightGroupMap.back ().AnimationLight = curName;
00124                                 _PointLightGroupMap.back ().LightGroup = curGroup;
00125                                 precName = curName;
00126                                 precGroup = curGroup;
00127                         }
00128                 }
00129                 // End last group.
00130                 _PointLightGroupMap.back ().EndId= i;
00131         }
00132 }

void NL3D::CPointLightNamedArray::clear  ) 
 

clear All: pointLights and map.

Definition at line 63 of file point_light_named_array.cpp.

References _PointLightGroupMap, and _PointLights.

Referenced by NL3D::CInstanceGroup::serial().

00064 {
00065         _PointLights.clear();
00066         _PointLightGroupMap.clear();
00067 }

std::vector<CPointLightNamed>& NL3D::CPointLightNamedArray::getPointLights  )  [inline]
 

get the pointLights sorted (mutable version). Be sure what you do!

Definition at line 66 of file point_light_named_array.h.

References _PointLights.

00066 {return _PointLights;}

const std::vector<CPointLightNamed>& NL3D::CPointLightNamedArray::getPointLights  )  const [inline]
 

get the pointLights sorted (const version).

Definition at line 63 of file point_light_named_array.h.

References _PointLights.

Referenced by NL3D::CInstanceGroup::addToSceneWhenAllShapesLoaded(), NL3D::CPatch::appendTileLightInfluences(), NL3D::CZone::build(), NL3D::CInstanceGroup::buildPointLightList(), NL3D::CPatch::getCurrentTileTLIColors(), NL3D::CInstanceGroup::getNumPointLights(), NL3D::CInstanceGroup::getPointLightList(), NL3D::CInstanceGroup::getPointLightNamed(), NL3D::CInstanceGroup::removeFromScene(), and NL3D::CZone::retrieve().

00063 {return _PointLights;}

void NL3D::CPointLightNamedArray::initAnimatedLightIndex const CScene scene  ) 
 

Definition at line 183 of file point_light_named_array.cpp.

References _PointLightGroupMap, NL3D::CPointLightNamedArray::CPointLightGroup::AnimationLight, NL3D::CPointLightNamedArray::CPointLightGroup::AnimationLightIndex, count, NL3D::CScene::getAnimatedLightNameToIndex(), and uint.

Referenced by NL3D::CInstanceGroup::addToScene(), NL3D::CInstanceGroup::addToSceneAsync(), and NL3D::CLandscape::addZone().

00184 {
00185         // Search in the map.
00186         const uint count = _PointLightGroupMap.size ();
00187         uint i;
00188         for (i=0; i<count; i++)
00189         {
00190                 // Ref
00191                 CPointLightGroup &lightGroup = _PointLightGroupMap[i];
00192                 lightGroup.AnimationLightIndex = scene.getAnimatedLightNameToIndex (lightGroup.AnimationLight);
00193         }
00194 }

void NL3D::CPointLightNamedArray::serial NLMISC::IStream f  ) 
 

Definition at line 164 of file point_light_named_array.cpp.

References _PointLightGroupMap, _PointLights, NLMISC::IStream::serialCont(), NLMISC::IStream::serialVersion(), and sint.

00165 {
00166         sint ver = f.serialVersion(1);
00167 
00168         f.serialCont(_PointLights);
00169 
00170         if (ver == 0)
00171         {
00172                 std::map<string, CPointLightGroupV0> oldMap;
00173                 f.serialCont(oldMap);
00174         }
00175         else
00176         {
00177                 f.serialCont(_PointLightGroupMap);
00178         }
00179 }

void NL3D::CPointLightNamedArray::setPointLightFactor const CScene scene  ) 
 

update the Light factor for all pointLights (animated and unanimated one)

Definition at line 135 of file point_light_named_array.cpp.

References _PointLightGroupMap, _PointLights, NL3D::CPointLightNamedArray::CPointLightGroup::AnimationLightIndex, count, NL3D::CPointLightNamedArray::CPointLightGroup::EndId, NL3D::CScene::getAnimatedLightFactor(), NL3D::CScene::getLightmapGroupColor(), NL3D::CPointLightNamedArray::CPointLightGroup::LightGroup, nlassert, NL3D::CPointLightNamedArray::CPointLightGroup::StartId, and uint.

Referenced by NL3D::CLandscape::addZone(), and NL3D::CInstanceGroup::setPointLightFactor().

00136 {
00137         // Search in the map.
00138         const uint count = _PointLightGroupMap.size ();
00139         uint i;
00140         for (i=0; i<count; i++)
00141         {
00142                 // Ref
00143                 CPointLightGroup &lightGroup = _PointLightGroupMap[i];
00144                 
00145                 // Get the factor
00146                 CRGBA factorAnimated=    scene.getAnimatedLightFactor (lightGroup.AnimationLightIndex, lightGroup.LightGroup);
00147                 CRGBA factorNotAnimated= scene.getLightmapGroupColor (lightGroup.LightGroup);;
00148 
00149                 // Found the group. what entries in the array?
00150                 uint    startId= lightGroup.StartId;
00151                 const uint      endId= lightGroup.EndId;
00152                 nlassert(endId<=_PointLights.size());
00153 
00154                 // for all entries, setLightFactor
00155                 for(uint i=startId;i<endId;i++)
00156                 {
00157                         _PointLights[i].setLightFactor (factorAnimated, factorNotAnimated);
00158                 }
00159         }
00160 }


Field Documentation

TPLGVec NL3D::CPointLightNamedArray::_PointLightGroupMap [private]
 

Info for LightGroupName and setPointLightFactor.

Definition at line 127 of file point_light_named_array.h.

Referenced by build(), clear(), initAnimatedLightIndex(), serial(), and setPointLightFactor().

std::vector<CPointLightNamed> NL3D::CPointLightNamedArray::_PointLights [private]
 

List of pointLight.

Definition at line 84 of file point_light_named_array.h.

Referenced by build(), clear(), getPointLights(), serial(), and setPointLightFactor().


The documentation for this class was generated from the following files:
Generated on Tue Mar 16 07:02:33 2004 for NeL by doxygen 1.3.6