| 254 | } |
| 255 | |
| 256 | void Animation::addKeyframe(const Keyframe& keyframe) |
| 257 | { |
| 258 | FALCOR_ASSERT(keyframe.time <= mDuration); |
| 259 | |
| 260 | if (mKeyframes.size() == 0 || mKeyframes[0].time > keyframe.time) |
| 261 | { |
| 262 | mKeyframes.insert(mKeyframes.begin(), keyframe); |
| 263 | } |
| 264 | else if (mKeyframes.back().time < keyframe.time) |
| 265 | { |
| 266 | mKeyframes.push_back(keyframe); |
| 267 | } |
| 268 | else |
| 269 | { |
| 270 | for (size_t i = 0; i < mKeyframes.size(); i++) |
| 271 | { |
| 272 | auto& current = mKeyframes[i]; |
| 273 | // If we already have a key-frame at the same time, replace it |
| 274 | if (current.time == keyframe.time) |
| 275 | { |
| 276 | current = keyframe; |
| 277 | return; |
| 278 | } |
| 279 | |
| 280 | // If this is not the last frame, Check if we are in between frames |
| 281 | if (i < mKeyframes.size() - 1) |
| 282 | { |
| 283 | auto& Next = mKeyframes[i + 1]; |
| 284 | if (current.time < keyframe.time && Next.time > keyframe.time) |
| 285 | { |
| 286 | mKeyframes.insert(mKeyframes.begin() + i + 1, keyframe); |
| 287 | return; |
| 288 | } |
| 289 | } |
| 290 | } |
| 291 | |
| 292 | // If we got here, need to push it to the end of the list |
| 293 | mKeyframes.push_back(keyframe); |
| 294 | } |
| 295 | } |
| 296 | |
| 297 | const Animation::Keyframe& Animation::getKeyframe(double time) const |
| 298 | { |
no test coverage detected