Files
vb01/driver.cpp
T
2021-10-19 19:06:41 +03:00

54 lines
1.5 KiB
C++

#include "driver.h"
#include "animatable.h"
#include <algorithm>
using namespace std;
namespace vb01{
Driver::Driver(KeyframeChannel keyframeChannel, VariableType type){
this->keyframeChannel = keyframeChannel;
this->type = type;
}
void Driver::drive(float driverValue){
Keyframe pastKeyframe = KeyframeChannel::findKeyframe(driverValue, keyframeChannel, true);
Keyframe nextKeyframe = KeyframeChannel::findKeyframe(driverValue, keyframeChannel, false);
float pastFrame = pastKeyframe.frame;
float nextFrame = nextKeyframe.frame;
float ratio = (float)(driverValue - pastFrame) / (nextFrame - pastFrame);
if(ratio < 0)
ratio = 0;
Keyframe::Interpolation interp = pastKeyframe.interpolation;
float value = KeyframeChannel::interpolate(pastKeyframe, nextKeyframe, ratio);
keyframeChannel.animatable->animate(value, keyframeChannel);
}
Driver::VariableType Driver::getDriverVariableType(string typeString){
VariableType type;
if(typeString == "LOC_X")
type = Driver::POS_X;
else if(typeString == "LOC_Y")
type = Driver::POS_Y;
else if(typeString == "LOC_Z")
type = Driver::POS_Z;
else if(typeString == "ROT_W")
type = Driver::ROT_W;
else if(typeString == "ROT_X")
type = Driver::ROT_X;
else if(typeString == "ROT_Y")
type = Driver::ROT_Y;
else if(typeString == "ROT_Z")
type = Driver::ROT_Z;
else if(typeString == "SCALE_X")
type = Driver::SCALE_X;
else if(typeString == "SCALE_Y")
type = Driver::SCALE_Y;
else if(typeString == "SCALE_Z")
type = Driver::SCALE_Z;
return type;
}
}