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