mirror of https://github.com/OpenMW/openmw.git
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.3 KiB
C++
50 lines
1.3 KiB
C++
#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
|