summaryrefslogtreecommitdiff
path: root/src/scenes/first_box.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/scenes/first_box.tsx')
-rw-r--r--src/scenes/first_box.tsx153
1 files changed, 21 insertions, 132 deletions
diff --git a/src/scenes/first_box.tsx b/src/scenes/first_box.tsx
index 4927157..5508a41 100644
--- a/src/scenes/first_box.tsx
+++ b/src/scenes/first_box.tsx
@@ -1,156 +1,45 @@
-import {
- Img,
- Rect,
- Node,
- Video,
- makeScene2D,
- Txt,
- Line,
- LineSegment,
-} from "@motion-canvas/2d";
+import { makeScene2D } from "@motion-canvas/2d";
import {
Direction,
beginSlide,
createRef,
- map,
slideTransition,
- tween,
all,
waitFor,
} from "@motion-canvas/core";
-import { CodeBlock } from "@motion-canvas/2d/lib/components/CodeBlock";
-import { theme } from "../theme";
-
-const fibonacciFn = (n: number): number => {
- if (n <= 2) {
- return 1;
- }
- return fibonacciFn(n - 1) + fibonacciFn(n - 2);
-};
+import { FunctionBox } from "../components/function_box";
-const fibonacci = `
-const fibonacci = (n: number): number => {
- if (n <= 2) {
- return 1;
- }
- return fibonacci(n - 1) + fibonacci(n - 2);
-};
-`
- .split("\n")
- .filter((x) => x.trim())
- .join("\n");
+const add = `(a: number, b: number) => {
+ return a + b;
+}`;
export default makeScene2D(function* (view) {
- const block = createRef<CodeBlock>();
- const node = createRef<Node>();
- const rect = createRef<Rect>();
+ const functionBox = createRef<FunctionBox>();
- const boxMoji = createRef<Txt>();
- const inSegment = createRef<Line>();
- const outSegment = createRef<Line>();
- const input = createRef<Txt>();
- const output = createRef<Txt>();
+ view.add(<FunctionBox arity={2} source={add} ref={functionBox} />);
- yield* view.add(
- <>
- <Rect
- ref={rect}
- radius={4}
- stroke={theme.overlay0.hex}
- fill={theme.crust.hex}
- lineWidth={4}
- padding={60}
- layout
- >
- <Node ref={node} opacity={0}>
- <CodeBlock
- fontFamily={theme.font}
- language="typescript"
- ref={block}
- fontSize={1}
- code={fibonacci}
- ></CodeBlock>
- </Node>
- </Rect>
- <Txt fontFamily={theme.font} fill={theme.text.hex} ref={boxMoji}>
- 😴
- </Txt>
- <Line
- points={[]}
- ref={inSegment}
- stroke={theme.green.hex}
- lineWidth={8}
- radius={40}
- endArrow
- ></Line>
- <Line
- points={[]}
- ref={outSegment}
- stroke={theme.red.hex}
- lineWidth={8}
- radius={40}
- endArrow
- ></Line>
- <Txt
- opacity={0}
- fontFamily={theme.font}
- fill={theme.text.hex}
- ref={input}
- ></Txt>
- <Txt
- opacity={0}
- fontFamily={theme.font}
- fill={theme.text.hex}
- ref={output}
- ></Txt>
- </>,
- );
-
- yield boxMoji().position(rect().middle());
yield* slideTransition(Direction.Left);
yield* beginSlide("Black Box");
- const padding = 100;
- const left = rect().left();
- const right = rect().right();
- yield* all(
- inSegment().points([left.addX(-padding), left], 0.5),
- outSegment().points([right, right.addX(padding)], 0.5),
- );
- yield input().position(left.addX(-padding));
- yield output().position(right);
- for (const i of [1, 2, 3]) {
- yield* all(
- input().opacity(1, 0.5),
- input().text(i.toString(), 0.5),
- input().position(left.addX(-padding - 20), 0.5),
- );
-
- yield* beginSlide("Input " + i);
+ for (const [a, b] of [
+ [-1, 2],
+ [3, 4],
+ [5, 6],
+ ] as [number, number][]) {
+ const inputId = "(" + [a, b].join(",") + ")";
- yield* input().position(left, 0.5);
- yield* all(input().opacity(0, 0.2), boxMoji().text("👷‍♀️⚙️", 0.2));
- yield* waitFor(0.5);
+ yield* all(functionBox().reset(0.25));
+ yield* functionBox().setInputs([{ val: a }, { val: b }], 0.5);
- const result = fibonacciFn(i);
- yield* all(
- output().opacity(1, 0.5),
- output().text(result.toString(), 0.5),
- output().position(right, 0.5),
- );
+ yield* beginSlide("Add Inputs " + inputId);
- yield* all(boxMoji().text("😴", 0.2));
+ yield* functionBox().propogateInput(0.5);
+ yield* waitFor(0.3);
+ yield* functionBox().propogateOutput(0.5);
- yield* beginSlide("Output " + i);
+ yield* beginSlide("Propogate Outputs of " + inputId);
+ yield* beginSlide("Propogate Outputs of 1" + inputId);
}
-
- yield* all(
- boxMoji().opacity(0, 0.2),
- block().fontSize(30, 1),
- node().opacity(1, 1),
- );
-
- yield* beginSlide("Revealing");
});