1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
#ifndef OPENMW_COMPONENTS_SCENEUTIL_ANIMBLENDRULES_HPP
#define OPENMW_COMPONENTS_SCENEUTIL_ANIMBLENDRULES_HPP
#include <optional>
#include <string>
#include <vector>
#include <osg/Object>
#include <components/vfs/manager.hpp>
namespace SceneUtil
{
class AnimBlendRules : public osg::Object
{
public:
struct BlendRule
{
std::string mFromGroup;
std::string mFromKey;
std::string mToGroup;
std::string mToKey;
float mDuration;
std::string mEasing;
};
AnimBlendRules() = default;
AnimBlendRules(const std::vector<BlendRule>& rules);
AnimBlendRules(const AnimBlendRules& copy, const osg::CopyOp& copyop);
META_Object(SceneUtil, AnimBlendRules)
void addOverrideRules(const AnimBlendRules& overrideRules);
std::optional<BlendRule> findBlendingRule(
std::string fromGroup, std::string fromKey, std::string toGroup, std::string toKey) const;
const std::vector<BlendRule>& getRules() const { return mRules; }
static osg::ref_ptr<AnimBlendRules> fromFile(const VFS::Manager* vfs, VFS::Path::NormalizedView yamlpath);
private:
std::vector<BlendRule> mRules;
inline bool fitsRuleString(const std::string_view str, const std::string_view ruleStr) const;
};
}
#endif
|