OSG  3.4.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
AnimationUpdateCallback.h
Go to the documentation of this file.
1 /* -*-c++-*-
2  * Copyright (C) 2009 Cedric Pinson <cedric.pinson@plopbyte.net>
3  *
4  * This library is open source and may be redistributed and/or modified under
5  * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
6  * (at your option) any later version. The full license is in LICENSE file
7  * included with this distribution, and on the openscenegraph.org website.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * OpenSceneGraph Public License for more details.
13 */
14 
15 #ifndef OSGANIMATION_ANIMATION_UPDATE_CALLBACK
16 #define OSGANIMATION_ANIMATION_UPDATE_CALLBACK 1
17 
18 #include <osg/Object>
19 #include <osgAnimation/Channel>
20 #include <osgAnimation/Animation>
21 #include <string>
22 
23 namespace osgAnimation
24 {
25 
27  {
28  public:
29  virtual bool link(Channel* channel) = 0;
30  virtual int link(Animation* animation) = 0;
31  };
32 
33 
34  template <class T>
36  {
37  public:
39  AnimationUpdateCallback(const std::string& name) { T::setName(name);}
40  AnimationUpdateCallback(const AnimationUpdateCallback& apc,const osg::CopyOp& copyop): T(apc, copyop) {}
41 
43 
44  const std::string& getName() const { return T::getName(); }
45  bool link(Channel* /*channel*/) { return 0; }
46  int link(Animation* animation)
47  {
48  if (T::getName().empty())
49  {
50  osg::notify(osg::WARN) << "An update callback has no name, it means it could link only with \"\" named Target, often an error, discard" << std::endl;
51  return 0;
52  }
53  int nbLinks = 0;
54  for (ChannelList::iterator it = animation->getChannels().begin();
55  it != animation->getChannels().end();
56  ++it)
57  {
58  std::string targetName = (*it)->getTargetName();
59  if (targetName == T::getName())
60  {
62  a->link((*it).get());
63  nbLinks++;
64  }
65  }
66  return nbLinks;
67  }
68  };
69 
70 }
71 
72 #endif
ChannelList & getChannels()
META_Object(osgAnimation, AnimationUpdateCallback< T >)
OSG_EXPORT std::ostream & notify(const NotifySeverity severity)
virtual bool link(Channel *channel)=0
AnimationUpdateCallback(const std::string &name)
AnimationUpdateCallback(const AnimationUpdateCallback &apc, const osg::CopyOp &copyop)