1+ const BOARD_OFFSET_X = 16
2+ const BOARD_OFFSET_Y = 16
3+
14class Renderer {
25
36 constructor ( options ) {
47 const canvas = document . getElementById ( options . canvasId ) ;
58 this . ctx = canvas . getContext ( '2d' ) ;
69 this . sprites = options . sprites ;
710 this . state = options . state ;
8- }
9-
10- spr ( spriteX , spriteY , x , y ) {
11- const spriteImage = this . sprites . getSpriteImageData ( spriteX , spriteY ) ;
12- this . ctx . putImageData ( spriteImage , x , y ) ;
11+ this . onReady = options . onReady ;
12+ this . prepare ( ) ;
1313 }
1414
1515
16+ prepare ( ) {
1617
18+ this . bgCanvas = document . createElement ( 'canvas' )
19+ this . bgCanvas . width = 192
20+ this . bgCanvas . height = 192
21+ this . bgCtx = this . bgCanvas . getContext ( '2d' ) ;
22+ this . drawBg ( ) ;
1723
24+ this . bgImage = this . bgCtx . getImageData ( 0 , 0 , 192 , 192 )
1825
19- render ( ) {
20- this . drawBg ( ) ;
21- this . drawMinos ( ) ;
26+ this . onReady ( this )
2227 }
2328
2429 drawBg ( ) {
25- this . ctx . fillStyle = '#eee' ;
26- this . ctx . fillRect ( 0 , 0 , CANVAS_WIDTH , CANVAS_HEIGHT ) ;
30+ this . bgCtx . fillStyle = '#eee' ;
31+ this . bgCtx . fillRect ( 0 , 0 , CANVAS_WIDTH , CANVAS_HEIGHT ) ;
32+
33+
34+ for ( let y = 0 ; y < CANVAS_HEIGHT / SPRITE_SIZE ; y ++ ) {
35+ for ( let x = 0 ; x < CANVAS_WIDTH / SPRITE_SIZE ; x ++ ) {
36+ this . spr ( this . bgCtx , 10 , 0 , x * SPRITE_SIZE , y * SPRITE_SIZE )
37+ }
38+ }
2739
2840 for ( let y = 0 ; y < BOARD_HEIGHT ; y ++ ) {
2941 for ( let x = 0 ; x < BOARD_WIDTH ; x ++ ) {
30- this . spr ( 4 , 0 , x * SPRITE_SIZE , y * SPRITE_SIZE )
42+ this . spr ( this . bgCtx , 4 , 0 , x * SPRITE_SIZE + BOARD_OFFSET_X , y * SPRITE_SIZE + BOARD_OFFSET_Y )
3143 }
3244 }
3345 }
3446
47+
48+
49+ spr ( ctx , spriteX , spriteY , x , y ) {
50+ const spriteImage = this . sprites . getSpriteImageData ( spriteX , spriteY ) ;
51+ ctx . putImageData ( spriteImage , x , y ) ;
52+ }
53+
54+
55+
56+
57+
58+ render ( ) {
59+ this . ctx . putImageData ( this . bgImage , 0 , 0 ) ;
60+ this . drawMinos ( ) ;
61+ }
62+
3563 drawMino ( mino ) {
3664 mino . blocks . forEach ( ( block ) => {
3765 let sX , sY
@@ -43,9 +71,9 @@ class Renderer {
4371 sX = spriteMap [ block . col ] [ 0 ]
4472 sY = spriteMap [ block . col ] [ 1 ]
4573 }
46- this . spr (
74+ this . spr ( this . ctx ,
4775 sX , sY ,
48- block . entity . x * SPRITE_SIZE , block . entity . y * SPRITE_SIZE ) ;
76+ block . entity . x * SPRITE_SIZE + BOARD_OFFSET_X , block . entity . y * SPRITE_SIZE + BOARD_OFFSET_Y ) ;
4977 } ) ;
5078 }
5179
0 commit comments