forked from visgl/hubble.gl
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathquick-animation.tsx
More file actions
76 lines (72 loc) · 1.86 KB
/
quick-animation.tsx
File metadata and controls
76 lines (72 loc) · 1.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
// hubble.gl
// SPDX-License-Identifier: MIT
// Copyright (c) vis.gl contributors
import React, {useState, useRef, useMemo} from 'react';
import DeckGL, {DeckGLRef} from '@deck.gl/react';
import BasicControls from './basic-controls';
import {useDeckAdapter, useNextFrame} from '../hooks';
import {FormatConfigs} from '@hubble.gl/core';
export const QuickAnimation = ({
initialViewState,
animation,
timecode,
resolution = {width: 640, height: 480},
formatConfigs = {},
deckProps = {}
}) => {
const deckRef = useRef<DeckGLRef>(null);
const deck = useMemo(() => deckRef.current && deckRef.current.deck, [deckRef.current]);
const [busy, setBusy] = useState(false);
const onNextFrame = useNextFrame();
const {adapter, layers, cameraFrame, setCameraFrame} = useDeckAdapter(
animation,
initialViewState
);
const mergedFormatConfigs: Partial<FormatConfigs> = {
webm: {
quality: 0.8
},
png: {
archive: 'zip'
},
jpeg: {
archive: 'zip',
quality: 0.8
},
gif: {
sampleInterval: 1,
width: resolution.width,
height: resolution.height
},
...formatConfigs
};
const mergedTimecode = {
framerate: 30,
start: 0,
...timecode
};
return (
<>
<div style={{position: 'relative'}}>
<DeckGL
ref={deckRef}
style={{position: 'unset'}}
viewState={cameraFrame}
onViewStateChange={({viewState: vs}) => setCameraFrame(vs)}
controller={true}
width={resolution.width}
height={resolution.height}
layers={layers}
{...adapter.getProps({deck, onNextFrame, extraProps: deckProps})}
/>
</div>
<BasicControls
adapter={adapter}
busy={busy}
setBusy={setBusy}
formatConfigs={mergedFormatConfigs}
timecode={mergedTimecode}
/>
</>
);
};