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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
#pragma once
#include "math/ik_solver.h"
#include "model/animation/modelanimation.h"
namespace animation {
class ModelAnimationMoveableOrientation : public ModelAnimationMoveable {
std::shared_ptr<ModelAnimationSubmodel> m_submodel;
angles m_defaultPosOrient;
public:
static std::shared_ptr<ModelAnimationMoveable> parser();
ModelAnimationMoveableOrientation(std::shared_ptr<ModelAnimationSubmodel> submodel, const angles& defaultOrient);
void update(polymodel_instance* pmi, const std::vector<linb::any>& args) override;
void initialize(ModelAnimationSet* parentSet, polymodel_instance* pmi) override;
};
class ModelAnimationMoveableRotation : public ModelAnimationMoveable {
std::shared_ptr<ModelAnimationSubmodel> m_submodel;
angles m_defaultPosOrient;
angles m_velocity;
tl::optional<angles> m_acceleration;
public:
static std::shared_ptr<ModelAnimationMoveable> parser();
ModelAnimationMoveableRotation(std::shared_ptr<ModelAnimationSubmodel> submodel, const angles& defaultOrient, const angles& velocity, const tl::optional<angles>& acceleration);
void update(polymodel_instance* pmi, const std::vector<linb::any>& args) override;
void initialize(ModelAnimationSet* parentSet, polymodel_instance* pmi) override;
};
class ModelAnimationMoveableTranslation : public ModelAnimationMoveable {
std::shared_ptr<ModelAnimationSubmodel> m_submodel;
vec3d m_defaultOffset;
vec3d m_velocity;
tl::optional<vec3d> m_acceleration;
public:
static std::shared_ptr<ModelAnimationMoveable> parser();
ModelAnimationMoveableTranslation(std::shared_ptr<ModelAnimationSubmodel> submodel, const vec3d& defaultOffset, const vec3d& velocity, const tl::optional<vec3d>& acceleration);
void update(polymodel_instance* pmi, const std::vector<linb::any>& args) override;
void initialize(ModelAnimationSet* parentSet, polymodel_instance* pmi) override;
};
class ModelAnimationMoveableAxisRotation : public ModelAnimationMoveable {
std::shared_ptr<ModelAnimationSubmodel> m_submodel;
float m_velocity;
tl::optional<float> m_acceleration;
vec3d m_axis;
public:
static std::shared_ptr<ModelAnimationMoveable> parser();
ModelAnimationMoveableAxisRotation(std::shared_ptr<ModelAnimationSubmodel> submodel, const float& velocity, const tl::optional<float>& acceleration, const vec3d& axis);
void update(polymodel_instance* pmi, const std::vector<linb::any>& args) override;
void initialize(ModelAnimationSet* parentSet, polymodel_instance* pmi) override;
};
class ModelAnimationMoveableIK : public ModelAnimationMoveable {
float m_time;
struct moveable_chainlink {
std::shared_ptr<ModelAnimationSubmodel> submodel;
std::shared_ptr<ik_constraint> constraint;
tl::optional<angles> acceleration;
};
std::vector<moveable_chainlink> m_chain;
public:
static std::shared_ptr<ModelAnimationMoveable> parser();
ModelAnimationMoveableIK(std::vector<moveable_chainlink> chain, float time);
void update(polymodel_instance* pmi, const std::vector<linb::any>& args) override;
void initialize(ModelAnimationSet* parentSet, polymodel_instance* pmi) override;
};
}
|