]> gitweb.factorcode.org Git - factor.git/blob - extra/tetris/gl/gl.factor
f8f6a5a9454793443b9fdf95f45429607932ceb1
[factor.git] / extra / tetris / gl / gl.factor
1 ! Copyright (C) 2006, 2007, 2008 Alex Chapman
2 ! See http://factorcode.org/license.txt for BSD license.
3
4 USING: accessors arrays colors combinators kernel math opengl
5 opengl.gl sequences tetris.game tetris.piece ;
6
7 IN: tetris.gl
8
9 ! OpenGL rendering for tetris
10
11 : draw-block ( block -- )
12     { 1 1 } gl-fill-rect ;
13
14 : draw-piece-blocks ( piece -- )
15     piece-blocks [ draw-block ] each ;
16
17 : draw-piece ( piece -- )
18     dup tetromino>> colour>> gl-color draw-piece-blocks ;
19
20 : draw-next-piece ( piece -- )
21     dup tetromino>> colour>>
22     >rgba-components drop 0.2 <rgba> gl-color draw-piece-blocks ;
23
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* ;
27
28 : draw-row ( y row -- )
29     [ length <iota> swap ] keep [ (draw-row) ] 2curry each ;
30
31 : draw-board ( board -- )
32     rows>> [ swap draw-row ] each-index ;
33
34 : scale-board ( width height board -- )
35     [ width>> ] [ height>> ] bi swapd [ / ] dup 2bi* 1 glScalef ;
36
37 : set-background-color ( tetris -- )
38     dup running?>> [
39         paused?>> COLOR: light-gray COLOR: white ?
40     ] [ drop COLOR: black ] if gl-color ;
41
42 : draw-background ( board -- )
43     [ 0 0 ] dip [ width>> ] [ height>> ] bi glRectf ;
44
45 : draw-tetris ( width height tetris -- )
46     ! width and height are in pixels
47     [
48         {
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 ]
55         } cleave
56     ] do-matrix ;