start :: Start
start = do
    removeChildren

    setRepeatingAction (1/5) $ do
        note <- randomNote
        sendSynth "note" (Atom $ realToFrac note)
        pose <- getPose
        childID <- spawnEntity $ do
            myPose ==> pose & translation +~
                (pose ^. _m33) !* (V3 0 0.3 0)
            myShape ==> Sphere
            mySize ==> 0.03
            myMass ==> 0.1
            myColor ==> colorHSL (note / 12) 0.9 0.8
        inEntity childID $ do
            setLifetime 10
            applyForce $ (pose ^. _m33) !* (V3 0 3.9 0)
start :: Start
start = do
    removeChildren

    setRepeatingAction (1/5) $ do
        note <- randomNote
        sendSynth "note" (Atom $ realToFrac note)
        pose <- getPose
        childID <- spawnEntity $ do
            myPose ==> pose & translation +~
                (pose ^. _m33) !* (V3 0 0.3 0)
            myShape ==> Sphere
            mySize ==> 0.03
            myMass ==> 0.1
            myColor ==> colorHSL (note / 12) 0.9 0.8
        inEntity childID $ do
            setLifetime 10
            applyForce $ (pose ^. _m33) !* (V3 0 3.9 0)
start = do
    removeChildren

    setRepeatingAction (1/5) $ do
        note <- randomNote
        sendSynth "note" (Atom $ realToFrac note)
        pose <- getPose
        childID <- spawnEntity $ do
            myPose ==> pose & translation +~
                (pose ^. _m33) !* (V3 0 0.3 0)
            myShape ==> Sphere
            mySize ==> 0.03
            myMass ==> 0.1
            myColor ==> colorHSL (note / 12) 0.9 0.8
        inEntity childID $ do
            setLifetime 10
            applyForce $ (pose ^. _m33) !* (V3 0 3.9 0)