I always wanted to teach. And I have always wasted time to find the right tool.

I have always revolved around motioncanvas, animotion, remotion and even revealjs.

As the title suggest I gave up and chose motioncanvas.

Yesterday I missed a day of dev. But I really enjoyed what I learnt, I'll probably show the my update here.

Here we go [initial commit]

The code for the above


import { Circle, CODE, Code, CubicBezier, Layout, LezerHighlighter, makeScene2D, Path, Rect } from '@motion-canvas/2d';
import { all, createEffect, createRef, Reference, sequence, spawn, waitFor, createSignal } from '@motion-canvas/core';
import { parser } from "@lezer/python";
import { PathBuilder } from "owd-path-builder";

Code.defaultHighlighter = new LezerHighlighter(
  parser.configure({
    dialect: 'py',
  })
)

const emails = [
  'vheller@yahoo.com',
  'edgar.jacobson@yahoo.com',
  'plebsack@gmail.com',
  'medhurst.elsie@homenick.com',
  'tyler41@yahoo.com',
  'greenholt.dorthy@gmail.com',
  'nola11@braun.com',
  'monte62@yahoo.com',
  'nader.ivory@grady.net',
  'lillie.kunde@stamm.com'
]

const regexpEg = `email = re.findall(r'[w.-]+@[w.-]+(.[w]+)+',line)` 

const regexpEgWords = regexpEg.split(`=`)

const regexpLeft = regexpEgWords[0]
const regexpRight = regexpEgWords[1]

const bg = "#272822"

export default makeScene2D(function* (view) {
  // Create your animations here
  view.fill(bg)

  const code = createRef<Code>();
  const codeContainer = createSignal<Layout>()
  const codeSignal = createSignal(code)

  const bottom = {
    ref : createRef<Path>(),
    path : new PathBuilder(),
  }
  const top = {
    ref : createRef<Path>(),
    path : new PathBuilder(),
  }
  const left = {
    ref : createRef<Path>(),
    path : new PathBuilder(),
  }
  const right = {
    ref : createRef<Path>(),
    path : new PathBuilder(),
  }

  createEffect(() => {
    
  })

  view.add(
    <>
      <Code
        ref={code}
        fontSize={50}
        code={``}
      />,
      <Path
        ref={bottom.ref}
        lineWidth={26}
        stroke={"#fff"}
        data={bottom.path.absolute().moveTo(-3000, 550).toString()}
        scale={0.25}
      />,
      <Path
        ref={top.ref}
        lineWidth={26}
        stroke={"#fff"}
        data={top.path.absolute().moveTo(3000, -550).toString()}
        scale={0.25}
      />,
      <Path
        ref={right.ref}
        lineWidth={26}
        stroke={"#fff"}
        data={right.path.absolute().moveTo(3000, 550).toString()}
        scale={0.25}
      />
      <Path
        ref={left.ref}
        lineWidth={26}
        stroke={"#fff"}
        data={left.path.absolute().moveTo(-3000, -550).toString()}
        scale={0.25}
      />
    </>
  )

  yield* all(
    bottom.ref().data(
      bottom.path.horizontalLine(3000).toString(),
      3,
    ),
    top.ref().data(
      top.path.horizontalLine(-3000).toString(),
      3,
    ),
    right.ref().data(
      right.path.verticalLine(-550).toString(),
      1,
    ),
    left.ref().data(
      left.path.verticalLine(550).toString(),
      1,
    ),
    code().code.append(regexpRight, 3),
    waitFor(1)
  )

});