1 ! Copyright (C) 2006, 2007, 2008 Alex Chapman
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors arrays colors colors.constants combinators
4 kernel math opengl opengl.gl sequences tetris.game tetris.piece
9 ! OpenGL rendering for tetris
11 : draw-block ( block -- )
12 { 1 1 } gl-fill-rect ;
14 : draw-piece-blocks ( piece -- )
15 piece-blocks [ draw-block ] each ;
17 : draw-piece ( piece -- )
18 dup tetromino>> colour>> gl-color draw-piece-blocks ;
20 : draw-next-piece ( piece -- )
21 dup tetromino>> colour>>
22 >rgba-components drop 0.2 <rgba> gl-color draw-piece-blocks ;
24 ! TODO: move implementation specific stuff into tetris-board
25 : (draw-row) ( x y row -- )
26 overd nth [ gl-color 2array draw-block ] [ 2drop ] if* ;
28 : draw-row ( y row -- )
29 [ length <iota> swap ] keep [ (draw-row) ] 2curry each ;
31 : draw-board ( board -- )
32 rows>> [ swap draw-row ] each-index ;
34 : scale-board ( width height board -- )
35 [ width>> ] [ height>> ] bi swapd [ / ] dup 2bi* 1 glScalef ;
37 : set-background-color ( tetris -- )
39 paused?>> COLOR: light-gray COLOR: white ?
40 ] [ drop COLOR: black ] if gl-color ;
42 : draw-background ( board -- )
43 [ 0 0 ] dip [ width>> ] [ height>> ] bi glRectf ;
45 : draw-tetris ( width height tetris -- )
46 ! width and height are in pixels
49 [ board>> scale-board ]
50 [ set-background-color ]
51 [ board>> draw-background ]
52 [ board>> draw-board ]
53 [ next-piece draw-next-piece ]
54 [ current-piece draw-piece ]