| 
									
										
										
										
											2008-10-01 21:12:46 -04:00
										 |  |  | ! Copyright (C) 2006, 2007, 2008 Alex Chapman | 
					
						
							|  |  |  | ! See http://factorcode.org/license.txt for BSD license. | 
					
						
							| 
									
										
										
										
											2010-06-10 17:39:13 -04:00
										 |  |  | USING: accessors timers arrays calendar kernel make math math.rectangles | 
					
						
							|  |  |  | math.parser namespaces sequences system tetris.game tetris.gl ui.gadgets | 
					
						
							|  |  |  | ui.gadgets.labels ui.gadgets.worlds ui.gadgets.status-bar ui.gestures | 
					
						
							|  |  |  | ui.render ui ;
 | 
					
						
							| 
									
										
										
										
											2009-05-15 00:23:06 -04:00
										 |  |  | FROM: tetris.game => level>> ;
 | 
					
						
							| 
									
										
										
										
											2008-10-01 21:12:46 -04:00
										 |  |  | IN: tetris | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-06-10 17:39:13 -04:00
										 |  |  | TUPLE: tetris-gadget < gadget { tetris tetris } { timer } ;
 | 
					
						
							| 
									
										
										
										
											2008-10-01 21:12:46 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | : <tetris-gadget> ( tetris -- gadget )
 | 
					
						
							| 
									
										
										
										
											2009-02-16 05:04:32 -05:00
										 |  |  |     tetris-gadget new swap >>tetris ;
 | 
					
						
							| 
									
										
										
										
											2008-10-01 21:12:46 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | M: tetris-gadget pref-dim* drop { 200 400 } ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : update-status ( gadget -- )
 | 
					
						
							|  |  |  |     dup tetris>> [ | 
					
						
							| 
									
										
										
										
											2009-11-30 18:51:29 -05:00
										 |  |  |         [ "Level: " % level>> # ] | 
					
						
							|  |  |  |         [ " Score: " % score>> # ] | 
					
						
							|  |  |  |         [ paused?>> [ " (Paused)" % ] when ] tri
 | 
					
						
							| 
									
										
										
										
											2008-10-01 21:12:46 -04:00
										 |  |  |     ] "" make swap show-status ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: tetris-gadget draw-gadget* ( gadget -- )
 | 
					
						
							|  |  |  |     [ | 
					
						
							| 
									
										
										
										
											2009-02-05 04:28:41 -05:00
										 |  |  |         [ dim>> first2 ] [ tetris>> ] bi draw-tetris | 
					
						
							| 
									
										
										
										
											2008-10-01 21:12:46 -04:00
										 |  |  |     ] keep update-status ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : new-tetris ( gadget -- gadget )
 | 
					
						
							|  |  |  |     [ <new-tetris> ] change-tetris ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-30 18:51:29 -05:00
										 |  |  | : unless-paused ( tetris quot -- )
 | 
					
						
							|  |  |  |     over tetris>> paused?>> [ | 
					
						
							|  |  |  |         2drop
 | 
					
						
							|  |  |  |     ] [ | 
					
						
							|  |  |  |         call
 | 
					
						
							|  |  |  |     ] if ; inline
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-10-01 21:12:46 -04:00
										 |  |  | tetris-gadget H{ | 
					
						
							| 
									
										
										
										
											2008-12-15 21:31:55 -05:00
										 |  |  |     { T{ button-down f f 1 }     [ request-focus ] } | 
					
						
							| 
									
										
										
										
											2009-11-30 18:51:29 -05:00
										 |  |  |     { T{ key-down f f "UP" }     [ [ tetris>> rotate-right ] unless-paused ] } | 
					
						
							|  |  |  |     { T{ key-down f f "d" }      [ [ tetris>> rotate-left ] unless-paused ] } | 
					
						
							|  |  |  |     { T{ key-down f f "f" }      [ [ tetris>> rotate-right ] unless-paused ] } | 
					
						
							|  |  |  |     { T{ key-down f f "e" }      [ [ tetris>> rotate-left ] unless-paused ] } | 
					
						
							|  |  |  |     { T{ key-down f f "u" }      [ [ tetris>> rotate-right ] unless-paused ] } | 
					
						
							|  |  |  |     { T{ key-down f f "LEFT" }   [ [ tetris>> move-left ] unless-paused ] } | 
					
						
							|  |  |  |     { T{ key-down f f "RIGHT" }  [ [ tetris>> move-right ] unless-paused ] } | 
					
						
							|  |  |  |     { T{ key-down f f "DOWN" }   [ [ tetris>> move-down ] unless-paused ] } | 
					
						
							|  |  |  |     { T{ key-down f f " " }      [ [ tetris>> move-drop ] unless-paused ] } | 
					
						
							| 
									
										
										
										
											2008-10-01 21:12:46 -04:00
										 |  |  |     { T{ key-down f f "p" }      [ tetris>> toggle-pause ] } | 
					
						
							|  |  |  |     { T{ key-down f f "n" }      [ new-tetris drop ] } | 
					
						
							|  |  |  | } set-gestures | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : tick ( gadget -- )
 | 
					
						
							|  |  |  |     [ tetris>> ?update ] [ relayout-1 ] bi ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: tetris-gadget graft* ( gadget -- )
 | 
					
						
							| 
									
										
										
										
											2010-06-10 17:39:13 -04:00
										 |  |  |     [ [ tick ] curry 100 milliseconds every ] keep timer<< ;
 | 
					
						
							| 
									
										
										
										
											2008-10-01 21:12:46 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | M: tetris-gadget ungraft* ( gadget -- )
 | 
					
						
							| 
									
										
										
										
											2010-06-10 17:39:13 -04:00
										 |  |  |     [ stop-timer f ] change-timer drop ;
 | 
					
						
							| 
									
										
										
										
											2008-10-01 21:12:46 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-29 19:43:15 -04:00
										 |  |  | : tetris-window ( -- )
 | 
					
						
							| 
									
										
										
										
											2008-10-01 21:12:46 -04:00
										 |  |  |     [ | 
					
						
							|  |  |  |         <default-tetris> <tetris-gadget> | 
					
						
							|  |  |  |         "Tetris" open-status-window | 
					
						
							|  |  |  |     ] with-ui ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | MAIN: tetris-window |