// Camera: deriva constante por baixo de tudo e um soco em cada batida. O quadro nunca fica parado. // `batidas` são quadros absolutos do vídeo. Parâmetros do kit em base.ts (CAMERA). import React from 'react'; import {AbsoluteFill, useCurrentFrame} from 'remotion'; import {CAMERA} from '../base'; export type CameraProps = {batidas?: number[]; forca?: number; children: React.ReactNode}; export const posCamera = (f: number, batidas: number[], forca = 1) => { const C = CAMERA; let z = C.z + C.zOsc * Math.sin(f / 90) + f * C.push, dx = Math.sin(f / 37) * C.dx, dy = Math.cos(f / 51) * C.dy; const rot = Math.sin(f / 83) * C.rot; for (const h of batidas) if (f >= h) { const d = Math.exp(-(f - h) / 7) * forca; z += C.soco * d; dx += C.dx * 0.8 * d * Math.sin((f - h) * 2.7 + h); dy += C.dy * 0.8 * d * Math.cos((f - h) * 3.3 + h); } return {z, dx, dy, rot}; }; export const Camera: React.FC = ({batidas = [], forca = 1, children}) => { const c = posCamera(useCurrentFrame(), batidas, forca); return {children}; };