From 8c1a9fc988c1cfe146474fbf39d43e0bb2c302ab Mon Sep 17 00:00:00 2001
From: David Williams <dwilliams@nobiastx.com>
Date: Tue, 6 Dec 2022 16:57:27 -0800
Subject: [PATCH] Correctly check for duration "once" for fixed or computed
 duration

---
 src/mol-plugin-state/animation/built-in/model-index.ts | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/src/mol-plugin-state/animation/built-in/model-index.ts b/src/mol-plugin-state/animation/built-in/model-index.ts
index bc969c86f..ecec3d638 100644
--- a/src/mol-plugin-state/animation/built-in/model-index.ts
+++ b/src/mol-plugin-state/animation/built-in/model-index.ts
@@ -124,6 +124,11 @@ export const AnimateModelIndex = PluginStateAnimation.create({
                         ? params.duration.params.durationInS * 1000
                         : Math.ceil(1000 * traj.data.frameCount / params.duration.params.targetFps);
 
+                    if (params.mode.name === 'once' && t.current >= durationInMs) {
+                        isEnd = true;
+                        return { modelIndex: traj.data.frameCount-1 };
+                    }
+                    
                     let phase: number = (t.current % durationInMs) / durationInMs;
                     if (params.mode.name === 'loop') {
                         if (params.mode.params.direction === 'backward') {
@@ -135,7 +140,6 @@ export const AnimateModelIndex = PluginStateAnimation.create({
                     }
 
                     const modelIndex = Math.min(Math.floor(traj.data.frameCount * phase), traj.data.frameCount - 1);
-                    isEnd = isEnd || modelIndex === traj.data.frameCount - 1;
                     return { modelIndex };
                 }
             });
-- 
GitLab