1- import { State , ViewportPattern } from '../types'
1+ import { AbsolutePattern , RelativePattern , State , ViewportPattern } from '../types'
2+ import { streamBatchedDrawablePatterns } from './stream-batched-drawable-patterns'
23
34type WorkerState =
45 | {
5- type : 'idle '
6+ type : 'stopped '
67 }
78 | {
89 type : 'generating'
910 state : State
1011 }
11- | {
12- type : 'paused'
13- state : State
14- }
1512
1613type WorkerMessageInput =
14+ | {
15+ type : 'initialize'
16+ ctx : OffscreenCanvasRenderingContext2D
17+ }
1718 | {
1819 type : 'generate'
1920 state : State
2021 }
2122 | {
2223 type : 'stop'
2324 }
25+
26+ type WorkerMessageOutput =
2427 | {
25- type : 'pause'
28+ type : 'batch'
29+ depth : number
30+ patterns : ViewportPattern [ ]
2631 }
2732 | {
28- type : 'resume '
33+ type : 'done '
2934 }
3035
31- type WorkerMessageOutput = {
32- type : 'batch'
33- patterns : ViewportPattern [ ]
34- }
35-
3636let state : WorkerState = {
37- type : 'idle ' ,
37+ type : 'stopped ' ,
3838}
3939
4040function handleMessage ( message : WorkerMessageInput ) {
4141 switch ( message . type ) {
4242 case 'generate' : {
43+ if ( state . type === 'generating' ) {
44+ console . warn ( 'Already generating patterns' )
45+ break
46+ }
47+
4348 // Start generating patterns
4449 state = {
4550 type : 'generating' ,
@@ -49,7 +54,9 @@ function handleMessage(message: WorkerMessageInput) {
4954 break
5055 }
5156 case 'stop' : {
52- // Stop
57+ state = {
58+ type : 'stopped' ,
59+ }
5360 break
5461 }
5562 default : {
@@ -68,9 +75,26 @@ self.onmessage = event => {
6875}
6976
7077function generatePatterns ( ) {
71- // Post batches of patterns back to main thread
78+ for ( const { depth, patterns } of streamBatchedDrawablePatterns ( {
79+ state : {
80+ patterns : [ { anchor : [ 0 , 0 ] , target : [ 0.5 , 0.5 ] } as RelativePattern ] ,
81+ screens : [ { anchor : [ 0.2 , 0.2 ] , target : [ 0.8 , 0.8 ] } as AbsolutePattern ] ,
82+ } ,
83+ chunkSize : 5 ,
84+ screenSize : [ 600 , 400 ] ,
85+ } ) ) {
86+ if ( state . type !== 'generating' ) {
87+ break
88+ }
89+
90+ sendMessage ( {
91+ type : 'batch' ,
92+ depth,
93+ patterns,
94+ } )
95+ }
96+
7297 sendMessage ( {
73- type : 'batch' ,
74- patterns : [ ] , // TODO: Generate actual patterns
98+ type : 'done' ,
7599 } )
76100}
0 commit comments