Show
Ignore:
Timestamp:
10/23/09 22:35:31 (5 years ago)
Author:
cedricpinson
Message:

From Cedric Pinson, Simplify update callback api in osgAnimation, the decision to link is on the manager or user

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/trunk/include/osgAnimation/UpdateCallback

    r10671 r10689  
    2727{ 
    2828 
    29     class AnimationUpdateCallbackBase 
     29    class AnimationUpdateCallbackBase : public virtual osg::Object 
    3030    { 
    3131    public: 
    32         virtual osg::Object* clone(const osg::CopyOp& copyop) const = 0; 
    33         virtual AnimationManagerBase* getAnimationManager() = 0; 
    34         virtual bool needLink() const = 0; 
    3532        virtual bool link(osgAnimation::Channel* channel) = 0; 
    3633        virtual int link(osgAnimation::Animation* animation) = 0; 
    37         virtual void updateLink() = 0; 
    38         virtual const std::string& getName() const = 0; 
    3934    }; 
    4035 
     
    4237    class AnimationUpdateCallback : public AnimationUpdateCallbackBase, public T 
    4338    { 
    44     protected: 
    45  
    46         osg::observer_ptr<osgAnimation::AnimationManagerBase> _manager; 
    47  
    4839    public: 
    4940        AnimationUpdateCallback(const std::string& name) { T::setName(name);} 
    5041        AnimationUpdateCallback(const AnimationUpdateCallback& apc,const osg::CopyOp& copyop): 
    51             T(apc, copyop), 
    52             _manager(apc._manager) {} 
     42            T(apc, copyop) {} 
    5343 
    54         osgAnimation::AnimationManagerBase* getAnimationManager() { return _manager.get(); } 
    55          
    5644        const std::string& getName() const { return T::getName(); } 
    5745        int link(osgAnimation::Animation* animation) 
     
    7361            } 
    7462            return nbLinks; 
    75         } 
    76  
    77         void updateLink() 
    78         { 
    79             if (_manager.valid()) 
    80             { 
    81                 if (needLink()) 
    82                 { 
    83                     /** this item is not linked yet then we do it for all animation 
    84                         registered in the manager. 
    85                         Maybe this function should be on the manager side like 
    86                         _manager->linkItem(Bone); 
    87                     */ 
    88                     const AnimationList& animationList = _manager->getAnimationList(); 
    89                     for (AnimationList::const_iterator it = animationList.begin(); it != animationList.end(); it++)  
    90                     { 
    91                         AnimationUpdateCallbackBase* a = this; 
    92                         a->link(it->get()); 
    93                     } 
    94                     _manager->buildTargetReference(); 
    95                 } 
    96             } 
    9763        } 
    9864    }; 
     
    11985        void update(osg::MatrixTransform& mat); 
    12086        void update(osg::PositionAttitudeTransform& pat); 
    121         bool needLink() const; 
    12287        bool link(osgAnimation::Channel* channel); 
    12388 
     
    144109        virtual void operator () (osg::StateAttribute*, osg::NodeVisitor*); 
    145110        void update(osg::Material& material); 
    146         bool needLink() const; 
    147111        bool link(osgAnimation::Channel* channel); 
    148112        osgAnimation::Vec4Target* getDiffuse();