Browse Source

wip animations

David Sehnal 6 years ago
parent
commit
f9828bc0d3
2 changed files with 44 additions and 0 deletions
  1. 7 0
      src/mol-plugin/state/animation/manager.ts
  2. 37 0
      src/mol-plugin/state/animation/model.ts

+ 7 - 0
src/mol-plugin/state/animation/manager.ts

@@ -0,0 +1,7 @@
+/**
+ * Copyright (c) 2019 mol* contributors, licensed under MIT, See LICENSE file for more info.
+ *
+ * @author David Sehnal <david.sehnal@gmail.com>
+ */
+
+// TODO

+ 37 - 0
src/mol-plugin/state/animation/model.ts

@@ -0,0 +1,37 @@
+/**
+ * Copyright (c) 2019 mol* contributors, licensed under MIT, See LICENSE file for more info.
+ *
+ * @author David Sehnal <david.sehnal@gmail.com>
+ */
+
+import { ParamDefinition as PD } from 'mol-util/param-definition';
+import { PluginContext } from 'mol-plugin/context';
+
+export { PluginStateAnimation }
+
+interface PluginStateAnimation<P extends PD.Params, S> {
+    id: string,
+    params: (ctx: PluginContext) => P,
+    initialState(params: PD.Values<P>, ctx: PluginContext): S,
+
+    /**
+     * Apply the current frame and modify the state.
+     * @param t Current absolute time since the animation started.
+     */
+    apply(state: S, t: number, ctx: PluginStateAnimation.Context<P>): Promise<PluginStateAnimation.ApplyResult<S>>,
+
+    /**
+     * The state must be serializable to JSON. If JSON.stringify is not enough,
+     * custom serializer can be provided.
+     */
+    stateSerialization?: { toJson?(state: S): any, fromJson?(data: any): S }
+}
+
+namespace PluginStateAnimation {
+    export type ApplyResult<S> = { kind: 'finished' } | { kind: 'next', state: S }
+    export interface Context<P extends PD.Params> {
+        params: PD.Values<P>,
+        plugin: PluginContext
+    }
+}
+