factor/extra/jamshred/jamshred.factor

67 lines
2.0 KiB
Factor
Raw Normal View History

! Copyright (C) 2007, 2008 Alex Chapman
2008-01-22 23:13:08 -05:00
! See http://factorcode.org/license.txt for BSD license.
USING: accessors alarms arrays calendar jamshred.game jamshred.gl jamshred.log kernel math math.constants namespaces sequences ui ui.gadgets ui.gestures ui.render math.vectors ;
2007-09-30 02:48:43 -04:00
IN: jamshred
TUPLE: jamshred-gadget jamshred last-hand-loc alarm ;
2007-09-30 02:48:43 -04:00
: <jamshred-gadget> ( jamshred -- gadget )
jamshred-gadget construct-gadget swap >>jamshred ;
2007-09-30 02:48:43 -04:00
: default-width ( -- x ) 1024 ;
: default-height ( -- y ) 768 ;
M: jamshred-gadget pref-dim*
drop default-width default-height 2array ;
M: jamshred-gadget draw-gadget* ( gadget -- )
[ jamshred>> ] [ rect-dim first2 draw-jamshred ] bi ;
2007-09-30 02:48:43 -04:00
: tick ( gadget -- )
[ jamshred>> jamshred-update ] [ relayout-1 ] bi ;
2007-09-30 02:48:43 -04:00
M: jamshred-gadget graft* ( gadget -- )
[
[ tick ] curry 10 milliseconds from-now 10 milliseconds add-alarm
] keep (>>alarm) ;
2007-09-30 02:48:43 -04:00
M: jamshred-gadget ungraft* ( gadget -- )
[ alarm>> cancel-alarm ] [ f >>alarm drop ] bi ;
2007-09-30 02:48:43 -04:00
: jamshred-restart ( jamshred-gadget -- )
<jamshred> >>jamshred drop ;
2007-09-30 02:48:43 -04:00
: pix>radians ( n m -- theta )
2007-10-03 08:26:51 -04:00
2 / / pi 2 * * ;
2007-09-30 02:48:43 -04:00
: x>radians ( x gadget -- theta )
#! translate motion of x pixels to an angle
rect-dim first pix>radians neg ;
: y>radians ( y gadget -- theta )
#! translate motion of y pixels to an angle
rect-dim second pix>radians ;
: (handle-mouse-motion) ( jamshred-gadget mouse-motion -- )
over jamshred>> >r
2007-09-30 02:48:43 -04:00
[ first swap x>radians ] 2keep second swap y>radians
r> mouse-moved ;
: handle-mouse-motion ( jamshred-gadget -- )
hand-loc get [
over last-hand-loc>> [
2007-09-30 02:48:43 -04:00
v- (handle-mouse-motion)
] [ 2drop ] if*
] 2keep >>last-hand-loc drop ;
2007-09-30 02:48:43 -04:00
jamshred-gadget H{
2008-03-13 07:15:11 -04:00
{ T{ key-down f f "r" } [ jamshred-restart ] }
{ T{ key-down f f " " } [ jamshred>> toggle-running ] }
2007-09-30 02:48:43 -04:00
{ T{ motion } [ handle-mouse-motion ] }
} set-gestures
: jamshred-window ( -- )
[ <jamshred> <jamshred-gadget> "Jamshred" open-window ] with-ui ;
MAIN: jamshred-window