1 #ifndef GAME_RENDER_ACTORANIMATION_H
2 #define GAME_RENDER_ACTORANIMATION_H
3 
4 #include <map>
5 
6 #include <osg/ref_ptr>
7 
8 #include "../mwworld/containerstore.hpp"
9 
10 #include "animation.hpp"
11 
12 namespace osg
13 {
14     class Node;
15 }
16 
17 namespace MWWorld
18 {
19     class ConstPtr;
20 }
21 
22 namespace SceneUtil
23 {
24     class LightSource;
25     class LightListCallback;
26 }
27 
28 namespace MWRender
29 {
30 
31 class ActorAnimation : public Animation, public MWWorld::ContainerStoreListener
32 {
33     public:
34         ActorAnimation(const MWWorld::Ptr &ptr, osg::ref_ptr<osg::Group> parentNode, Resource::ResourceSystem* resourceSystem);
35         virtual ~ActorAnimation();
36 
37         void itemAdded(const MWWorld::ConstPtr& item, int count) override;
38         void itemRemoved(const MWWorld::ConstPtr& item, int count) override;
isArrowAttached() const39         virtual bool isArrowAttached() const { return false; }
40         bool useShieldAnimations() const override;
41         bool updateCarriedLeftVisible(const int weaptype) const override;
42 
43     protected:
44         osg::Group* getBoneByName(const std::string& boneName);
45         virtual void updateHolsteredWeapon(bool showHolsteredWeapons);
46         virtual void updateHolsteredShield(bool showCarriedLeft);
47         virtual void updateQuiver();
48         virtual std::string getShieldMesh(MWWorld::ConstPtr shield) const;
49         virtual std::string getHolsteredWeaponBoneName(const MWWorld::ConstPtr& weapon);
50         virtual PartHolderPtr attachMesh(const std::string& model, const std::string& bonename, bool enchantedGlow, osg::Vec4f* glowColor);
attachMesh(const std::string & model,const std::string & bonename)51         virtual PartHolderPtr attachMesh(const std::string& model, const std::string& bonename)
52         {
53             osg::Vec4f stubColor = osg::Vec4f(0,0,0,0);
54             return attachMesh(model, bonename, false, &stubColor);
55         };
56 
57         PartHolderPtr mScabbard;
58         PartHolderPtr mHolsteredShield;
59 
60     private:
61         void addHiddenItemLight(const MWWorld::ConstPtr& item, const ESM::Light* esmLight);
62         void removeHiddenItemLight(const MWWorld::ConstPtr& item);
63         void resetControllers(osg::Node* node);
64 
65         typedef std::map<MWWorld::ConstPtr, osg::ref_ptr<SceneUtil::LightSource> > ItemLightMap;
66         ItemLightMap mItemLights;
67 };
68 
69 }
70 
71 #endif
72