From 56a8dc7c9243f41851da4b811d84f4c6ada4787d Mon Sep 17 00:00:00 2001 From: Cedric Pinson Date: Wed, 23 Feb 2011 22:52:01 +0000 Subject: [PATCH] Cedric Pinson: Fix divide by zero when Action has 0 frames, and add a warning message because it means something wrong on input data --- src/osgAnimation/Action.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/osgAnimation/Action.cpp b/src/osgAnimation/Action.cpp index 0c4648d8a..f28d261c8 100644 --- a/src/osgAnimation/Action.cpp +++ b/src/osgAnimation/Action.cpp @@ -64,19 +64,25 @@ Action::Callback* Action::getFrameCallback(double time) bool osgAnimation::Action::evaluateFrame(unsigned int frame, unsigned int& resultframe, unsigned int& nbloop ) { - nbloop = frame / getNumFrames(); + unsigned int nbFrames = getNumFrames(); + if (!nbFrames) { + nbFrames = 1; + osg::notify(osg::WARN) << "osgAnimation::Action::evaluateFrame your action " << getName() << " has 0 frames, it seems like an error in the data" << std::endl; + } + + nbloop = frame / nbFrames; resultframe = frame; - if (frame > getNumFrames()-1) + if (frame > nbFrames-1) { if (!getLoop()) - resultframe = frame % getNumFrames(); + resultframe = frame % nbFrames; else { if (nbloop >= getLoop()) return false; else - resultframe = frame % getNumFrames(); + resultframe = frame % nbFrames; } } return true;