/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2003 Robert Osfield 
 *
 * This library is open source and may be redistributed and/or modified under  
 * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or 
 * (at your option) any later version.  The full license is in LICENSE file
 * included with this distribution, and on the openscenegraph.org website.
 * 
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
 * OpenSceneGraph Public License for more details.
*/

#ifndef OSGSIM_LIGHTPOINTNODE
#define OSGSIM_LIGHTPOINTNODE 1

#include <osgSim/Export>
#include <osgSim/LightPoint>

#include <osg/Node>
#include <osg/NodeVisitor>
#include <osg/BoundingBox>
#include <osg/Quat>
#include <osg/Vec4>

#include <vector>
#include <set>

namespace osgSim {


class OSGSIM_EXPORT LightPointNode : public osg::Node
{
    public :

        typedef std::vector< LightPoint > LightPointList;

        LightPointNode();
        
        /** Copy constructor using CopyOp to manage deep vs shallow copy.*/
        LightPointNode(const LightPointNode&,const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY);

        META_Node(osgSim,LightPointNode);

        virtual void traverse(osg::NodeVisitor& nv);

        
        unsigned int addLightPoint(const LightPoint& lp);
	
	LightPoint& getLightPoint(unsigned int pos) { return _lightPointList[pos]; }

	const LightPoint& getLightPoint(unsigned int pos) const { return _lightPointList[pos]; }
        
        void removeLightPoint(unsigned int pos);
        
        void removeLightPoints(LightPointList::iterator start,LightPointList::iterator end);

        LightPointList  _lightPointList;

    protected:
    
        ~LightPointNode() {}

        // used to cache the bouding box of the lightpoints as a tighter
        // view frustum check. 
        mutable osg::BoundingBox _bbox;

        virtual bool computeBound() const;

        
        
};

}

#endif
