mirror of
https://github.com/devZoGok/vb01.git
synced 2026-08-26 19:43:30 +00:00
60 lines
1.6 KiB
C++
60 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);
|
|
if(currentFrame < firstFrame)
|
|
currentFrame = (loop ? numFrames : firstFrame);
|
|
else if(currentFrame > numFrames)
|
|
currentFrame = (loop ? firstFrame : numFrames);
|
|
|
|
lastUpdateTime = getTime();
|
|
}
|
|
}
|
|
|
|
void AnimationChannel::setAnimationName(string animName){
|
|
this->animationName = animName;
|
|
numFrames = getMaxKeyframeNum(animName);
|
|
}
|
|
|
|
int AnimationChannel::getMaxKeyframeNum(string animName){
|
|
int maxKeyframeNum;
|
|
|
|
Animation *animation = controller->getAnimation(animName);
|
|
KeyframeGroup *startGroup = animation->getKeyframeGroup(bones[0]);
|
|
int numStartKeyframes = startGroup->keyframeChannels[0].keyframes.size();
|
|
maxKeyframeNum = startGroup->keyframeChannels[0].keyframes[numStartKeyframes - 1].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;
|
|
|
|
if(numFrames < maxFrame)
|
|
maxKeyframeNum = maxFrame;
|
|
}
|
|
}
|
|
}
|
|
|
|
return maxKeyframeNum;
|
|
}
|
|
}
|