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

61 lines
1.6 KiB
C++

#include "animationChannel.h"
#include "animationController.h"
#include "animation.h"
using namespace std;
namespace vb01{
AnimationChannel::AnimationChannel(AnimationController *controller){
this->controller = controller;
}
AnimationChannel::~AnimationChannel(){
}
void AnimationChannel::update(){
if(canUpdate()){
if(firstFrame < currentFrame && currentFrame < numFrames)
currentFrame += (forward? 1 : -1);
else if(loop){
if(!forward && currentFrame <= firstFrame)
currentFrame = numFrames - 1;
else if(forward && currentFrame >= numFrames)
currentFrame = firstFrame + 1;
}
lastUpdateTime = getTime();
}
}
void AnimationChannel::setAnimationName(string animName){
this->animationName = animName;
Animation *animation = controller->getAnimation(animName);
KeyframeGroup *startGroup = animation->getKeyframeGroup(bones[0]);
int numStartKeyframes = startGroup->keyframeChannels[0].keyframes.size();
numFrames = startGroup->keyframeChannels[0].keyframes[numStartKeyframes - 1].frame;
//firstFrame = startGroup->keyframeChannels[0].keyframes[0].frame;
for(int i = 0; i < bones.size() ; i++){
KeyframeGroup *kg = animation->getKeyframeGroup(bones[i]);
for(int j = 0 ; j < kg->keyframeChannels.size(); j++){
KeyframeChannel ch = kg->keyframeChannels[j];
for(int k = 0; k < ch.keyframes.size(); k++){
int numKeyframes = ch.keyframes.size();
int maxFrame = ch.keyframes[numKeyframes - 1].frame;
int minFrame = ch.keyframes[0].frame;
if(numFrames < maxFrame)
numFrames = maxFrame;
/*
if(firstFrame > minFrame)
firstFrame = minFrame;
*/
}
}
}
}
}