proper modulus of animation frame

This commit is contained in:
Andrew Meadows 2017-12-18 12:21:23 -08:00
parent 559cb33563
commit bad2c1df76
2 changed files with 8 additions and 11 deletions

View file

@ -993,16 +993,15 @@ void ModelEntityRenderer::animate(const TypedEntityPointer& entity) {
} }
{ {
// the current frame is set on the server in update() in ModelEntityItem.cpp float currentFrame = fmod(entity->getAnimationCurrentFrame(), (float)(frameCount));
int animationCurrentFrame = (int)(glm::floor(entity->getAnimationCurrentFrame())); if (currentFrame < 0.0f) {
if (animationCurrentFrame < 0 || animationCurrentFrame >= frameCount) { currentFrame += (float)frameCount;
animationCurrentFrame = 0;
} }
int currentIntegerFrame = (int)(glm::floor(currentFrame));
if (animationCurrentFrame == _lastKnownCurrentFrame) { if (currentIntegerFrame == _lastKnownCurrentFrame) {
return; return;
} }
_lastKnownCurrentFrame = animationCurrentFrame; _lastKnownCurrentFrame = currentIntegerFrame;
} }
if (_jointMapping.size() != _model->getJointStateCount()) { if (_jointMapping.size() != _model->getJointStateCount()) {

View file

@ -245,7 +245,7 @@ void ModelEntityItem::updateFrameCount() {
if (_currentFrame < 0.0f) { if (_currentFrame < 0.0f) {
return; return;
} }
if (!_lastAnimated) { if (!_lastAnimated) {
_lastAnimated = usecTimestampNow(); _lastAnimated = usecTimestampNow();
return; return;
@ -263,7 +263,7 @@ void ModelEntityItem::updateFrameCount() {
} }
int updatedFrameCount = getAnimationLastFrame() - getAnimationFirstFrame() + 1; int updatedFrameCount = getAnimationLastFrame() - getAnimationFirstFrame() + 1;
if (!getAnimationHold() && getAnimationIsPlaying()) { if (!getAnimationHold() && getAnimationIsPlaying()) {
float deltaTime = (float)interval / (float)USECS_PER_SECOND; float deltaTime = (float)interval / (float)USECS_PER_SECOND;
_currentFrame += (deltaTime * getAnimationFPS()); _currentFrame += (deltaTime * getAnimationFPS());
@ -283,8 +283,6 @@ void ModelEntityItem::updateFrameCount() {
// qCDebug(entities) << "in update frame " << _currentFrame; // qCDebug(entities) << "in update frame " << _currentFrame;
setAnimationCurrentFrame(_currentFrame); setAnimationCurrentFrame(_currentFrame);
} }
} }
void ModelEntityItem::debugDump() const { void ModelEntityItem::debugDump() const {