Merge branch 'master' of git://factorcode.org/git/wrunt
commit
b85096a24d
|
@ -74,3 +74,17 @@ PRIVATE>
|
||||||
-> locationInWindow f -> convertPoint:fromView:
|
-> locationInWindow f -> convertPoint:fromView:
|
||||||
dup NSPoint-x swap NSPoint-y
|
dup NSPoint-x swap NSPoint-y
|
||||||
r> -> frame NSRect-h swap - 2array ;
|
r> -> frame NSRect-h swap - 2array ;
|
||||||
|
|
||||||
|
USE: opengl.gl
|
||||||
|
USE: alien.syntax
|
||||||
|
|
||||||
|
: NSOpenGLCPSwapInterval 222 ;
|
||||||
|
|
||||||
|
LIBRARY: OpenGL
|
||||||
|
|
||||||
|
TYPEDEF: int CGLError
|
||||||
|
TYPEDEF: void* CGLContextObj
|
||||||
|
TYPEDEF: int CGLContextParameter
|
||||||
|
|
||||||
|
FUNCTION: CGLError CGLSetParameter ( CGLContextObj ctx, CGLContextParameter pname, GLint* params ) ;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
! Copyright (C) 2007 Alex Chapman
|
! Copyright (C) 2007 Alex Chapman
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: accessors kernel opengl arrays sequences jamshred.log jamshred.player jamshred.sound jamshred.tunnel math.vectors ;
|
USING: accessors kernel opengl arrays sequences jamshred.log jamshred.player jamshred.sound jamshred.tunnel math math.constants math.vectors ;
|
||||||
IN: jamshred.game
|
IN: jamshred.game
|
||||||
|
|
||||||
TUPLE: jamshred sounds tunnel players running quit ;
|
TUPLE: jamshred sounds tunnel players running quit ;
|
||||||
|
@ -29,3 +29,12 @@ TUPLE: jamshred sounds tunnel players running quit ;
|
||||||
: mouse-moved ( x-radians y-radians jamshred -- )
|
: mouse-moved ( x-radians y-radians jamshred -- )
|
||||||
jamshred-player -rot turn-player ;
|
jamshred-player -rot turn-player ;
|
||||||
|
|
||||||
|
: units-per-full-roll ( -- n ) 50 ;
|
||||||
|
|
||||||
|
: jamshred-roll ( jamshred n -- )
|
||||||
|
[ jamshred-player ] dip 2 pi * * units-per-full-roll / roll-player ;
|
||||||
|
|
||||||
|
: mouse-scroll-x ( jamshred x -- ) jamshred-roll ;
|
||||||
|
|
||||||
|
: mouse-scroll-y ( jamshred y -- )
|
||||||
|
neg swap jamshred-player change-player-speed ;
|
||||||
|
|
|
@ -51,18 +51,18 @@ IN: jamshred.gl
|
||||||
GL_LIGHT0 glEnable
|
GL_LIGHT0 glEnable
|
||||||
GL_FOG glEnable
|
GL_FOG glEnable
|
||||||
GL_FOG_DENSITY 0.09 glFogf
|
GL_FOG_DENSITY 0.09 glFogf
|
||||||
|
GL_FRONT GL_AMBIENT_AND_DIFFUSE glColorMaterial
|
||||||
GL_COLOR_MATERIAL glEnable
|
GL_COLOR_MATERIAL glEnable
|
||||||
GL_FRONT_AND_BACK GL_AMBIENT_AND_DIFFUSE glColorMaterial
|
GL_LIGHT0 GL_POSITION F{ 0.0 0.0 0.0 1.0 } >c-float-array glLightfv
|
||||||
GL_LIGHT0 GL_POSITION F{ 0.0 0.0 -3.0 1.0 } >c-float-array glLightfv
|
|
||||||
GL_LIGHT0 GL_AMBIENT F{ 0.2 0.2 0.2 1.0 } >c-float-array glLightfv
|
GL_LIGHT0 GL_AMBIENT F{ 0.2 0.2 0.2 1.0 } >c-float-array glLightfv
|
||||||
GL_LIGHT0 GL_DIFFUSE F{ 1.0 1.0 1.0 1.0 } >c-float-array glLightfv
|
GL_LIGHT0 GL_DIFFUSE F{ 1.0 1.0 1.0 1.0 } >c-float-array glLightfv
|
||||||
GL_LIGHT0 GL_SPECULAR F{ 1.0 1.0 1.0 1.0 } >c-float-array glLightfv ;
|
GL_LIGHT0 GL_SPECULAR F{ 1.0 1.0 1.0 1.0 } >c-float-array glLightfv ;
|
||||||
|
|
||||||
: player-view ( player -- )
|
: player-view ( player -- )
|
||||||
[ location>> first3 ]
|
[ location>> ]
|
||||||
[ [ location>> ] [ forward>> ] bi v+ first3 ]
|
[ [ location>> ] [ forward>> ] bi v+ ]
|
||||||
[ up>> first3 ] tri gluLookAt ;
|
[ up>> ] tri gl-look-at ;
|
||||||
|
|
||||||
: draw-jamshred ( jamshred width height -- )
|
: draw-jamshred ( jamshred width height -- )
|
||||||
init-graphics jamshred-player dup player-view draw-tunnel ;
|
init-graphics jamshred-player [ player-view ] [ draw-tunnel ] bi ;
|
||||||
|
|
||||||
|
|
|
@ -21,9 +21,9 @@ M: jamshred-gadget draw-gadget* ( gadget -- )
|
||||||
dup jamshred>> quit>> [
|
dup jamshred>> quit>> [
|
||||||
drop
|
drop
|
||||||
] [
|
] [
|
||||||
dup [ jamshred>> jamshred-update ]
|
[ jamshred>> jamshred-update ]
|
||||||
[ relayout-1 ] bi
|
[ relayout-1 ]
|
||||||
yield jamshred-loop
|
[ yield jamshred-loop ] tri
|
||||||
] if ;
|
] if ;
|
||||||
|
|
||||||
: fullscreen ( gadget -- )
|
: fullscreen ( gadget -- )
|
||||||
|
@ -45,7 +45,7 @@ M: jamshred-gadget ungraft* ( gadget -- )
|
||||||
<jamshred> >>jamshred drop ;
|
<jamshred> >>jamshred drop ;
|
||||||
|
|
||||||
: pix>radians ( n m -- theta )
|
: pix>radians ( n m -- theta )
|
||||||
2 / / pi 2 * * ;
|
/ pi 4 * * ; ! 2 / / pi 2 * * ;
|
||||||
|
|
||||||
: x>radians ( x gadget -- theta )
|
: x>radians ( x gadget -- theta )
|
||||||
#! translate motion of x pixels to an angle
|
#! translate motion of x pixels to an angle
|
||||||
|
@ -68,8 +68,9 @@ M: jamshred-gadget ungraft* ( gadget -- )
|
||||||
] 2keep >>last-hand-loc drop ;
|
] 2keep >>last-hand-loc drop ;
|
||||||
|
|
||||||
: handle-mouse-scroll ( jamshred-gadget -- )
|
: handle-mouse-scroll ( jamshred-gadget -- )
|
||||||
jamshred>> jamshred-player scroll-direction get
|
jamshred>> scroll-direction get
|
||||||
second neg swap change-player-speed ;
|
[ first mouse-scroll-x ]
|
||||||
|
[ second mouse-scroll-y ] 2bi ;
|
||||||
|
|
||||||
: quit ( gadget -- )
|
: quit ( gadget -- )
|
||||||
[ no-fullscreen ] [ close-window ] bi ;
|
[ no-fullscreen ] [ close-window ] bi ;
|
||||||
|
@ -78,6 +79,10 @@ jamshred-gadget H{
|
||||||
{ T{ key-down f f "r" } [ jamshred-restart ] }
|
{ T{ key-down f f "r" } [ jamshred-restart ] }
|
||||||
{ T{ key-down f f " " } [ jamshred>> toggle-running ] }
|
{ T{ key-down f f " " } [ jamshred>> toggle-running ] }
|
||||||
{ T{ key-down f f "f" } [ find-world toggle-fullscreen ] }
|
{ T{ key-down f f "f" } [ find-world toggle-fullscreen ] }
|
||||||
|
{ T{ key-down f f "UP" } [ jamshred>> jamshred-player 1 swap change-player-speed ] }
|
||||||
|
{ T{ key-down f f "DOWN" } [ jamshred>> jamshred-player -1 swap change-player-speed ] }
|
||||||
|
{ T{ key-down f f "LEFT" } [ jamshred>> 1 jamshred-roll ] }
|
||||||
|
{ T{ key-down f f "RIGHT" } [ jamshred>> -1 jamshred-roll ] }
|
||||||
{ T{ key-down f f "q" } [ quit ] }
|
{ T{ key-down f f "q" } [ quit ] }
|
||||||
{ T{ motion } [ handle-mouse-motion ] }
|
{ T{ motion } [ handle-mouse-motion ] }
|
||||||
{ T{ mouse-scroll } [ handle-mouse-scroll ] }
|
{ T{ mouse-scroll } [ handle-mouse-scroll ] }
|
||||||
|
|
|
@ -29,6 +29,9 @@ C: <oint> oint
|
||||||
: up-pivot ( oint theta -- )
|
: up-pivot ( oint theta -- )
|
||||||
over up>> rotate-oint ;
|
over up>> rotate-oint ;
|
||||||
|
|
||||||
|
: forward-pivot ( oint theta -- )
|
||||||
|
over forward>> rotate-oint ;
|
||||||
|
|
||||||
: random-float+- ( n -- m )
|
: random-float+- ( n -- m )
|
||||||
#! find a random float between -n/2 and n/2
|
#! find a random float between -n/2 and n/2
|
||||||
dup 10000 * >fixnum random 10000 / swap 2 / - ;
|
dup 10000 * >fixnum random 10000 / swap 2 / - ;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
! Copyright (C) 2007 Alex Chapman
|
! Copyright (C) 2007 Alex Chapman
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: accessors colors jamshred.log jamshred.oint jamshred.sound jamshred.tunnel kernel math math.constants math.order math.ranges shuffle sequences system ;
|
USING: accessors colors combinators jamshred.log jamshred.oint jamshred.sound jamshred.tunnel kernel math math.constants math.order math.ranges shuffle sequences system ;
|
||||||
IN: jamshred.player
|
IN: jamshred.player
|
||||||
|
|
||||||
TUPLE: player < oint name sounds tunnel nearest-segment last-move speed ;
|
TUPLE: player < oint name sounds tunnel nearest-segment last-move speed ;
|
||||||
|
@ -16,6 +16,9 @@ TUPLE: player < oint name sounds tunnel nearest-segment last-move speed ;
|
||||||
: turn-player ( player x-radians y-radians -- )
|
: turn-player ( player x-radians y-radians -- )
|
||||||
>r over r> left-pivot up-pivot ;
|
>r over r> left-pivot up-pivot ;
|
||||||
|
|
||||||
|
: roll-player ( player z-radians -- )
|
||||||
|
forward-pivot ;
|
||||||
|
|
||||||
: to-tunnel-start ( player -- )
|
: to-tunnel-start ( player -- )
|
||||||
[ tunnel>> first dup location>> ]
|
[ tunnel>> first dup location>> ]
|
||||||
[ tuck (>>location) (>>nearest-segment) ] bi ;
|
[ tuck (>>location) (>>nearest-segment) ] bi ;
|
||||||
|
@ -35,6 +38,9 @@ TUPLE: player < oint name sounds tunnel nearest-segment last-move speed ;
|
||||||
: change-player-speed ( inc player -- )
|
: change-player-speed ( inc player -- )
|
||||||
[ + speed-range clamp-to-range ] change-speed drop ;
|
[ + speed-range clamp-to-range ] change-speed drop ;
|
||||||
|
|
||||||
|
: multiply-player-speed ( n player -- )
|
||||||
|
[ * speed-range clamp-to-range ] change-speed drop ;
|
||||||
|
|
||||||
: distance-to-move ( player -- distance )
|
: distance-to-move ( player -- distance )
|
||||||
[ speed>> ] [ last-move>> millis dup >r swap - 1000 / * r> ]
|
[ speed>> ] [ last-move>> millis dup >r swap - 1000 / * r> ]
|
||||||
[ (>>last-move) ] tri ;
|
[ (>>last-move) ] tri ;
|
||||||
|
@ -43,8 +49,12 @@ DEFER: (move-player)
|
||||||
|
|
||||||
: ?bounce ( distance-remaining player -- )
|
: ?bounce ( distance-remaining player -- )
|
||||||
over 0 > [
|
over 0 > [
|
||||||
[ dup nearest-segment>> bounce ] [ sounds>> bang ]
|
{
|
||||||
[ (move-player) ] tri
|
[ dup nearest-segment>> bounce ]
|
||||||
|
[ sounds>> bang ]
|
||||||
|
[ 3/4 swap multiply-player-speed ]
|
||||||
|
[ (move-player) ]
|
||||||
|
} cleave
|
||||||
] [
|
] [
|
||||||
2drop
|
2drop
|
||||||
] if ;
|
] if ;
|
||||||
|
|
|
@ -154,7 +154,7 @@ MACRO: set-draw-buffers ( buffers -- )
|
||||||
swap glPushAttrib call glPopAttrib ; inline
|
swap glPushAttrib call glPopAttrib ; inline
|
||||||
|
|
||||||
: gl-look-at ( eye focus up -- )
|
: gl-look-at ( eye focus up -- )
|
||||||
>r >r first3 r> first3 r> first3 gluLookAt ;
|
[ first3 ] tri@ gluLookAt ;
|
||||||
|
|
||||||
TUPLE: sprite loc dim dim2 dlist texture ;
|
TUPLE: sprite loc dim dim2 dlist texture ;
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
! Copyright (C) 2006, 2008 Slava Pestov
|
! Copyright (C) 2006, 2008 Slava Pestov
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: alien arrays assocs cocoa kernel math cocoa.messages
|
USING: alien alien.c-types arrays assocs cocoa kernel math cocoa.messages
|
||||||
cocoa.subclassing cocoa.classes cocoa.views cocoa.application
|
cocoa.subclassing cocoa.classes cocoa.views cocoa.application
|
||||||
cocoa.pasteboard cocoa.types cocoa.windows sequences ui
|
cocoa.pasteboard cocoa.types cocoa.windows sequences ui ui.gadgets
|
||||||
ui.gadgets ui.gadgets.worlds ui.gestures core-foundation
|
ui.gadgets.worlds ui.gestures core-foundation threads combinators ;
|
||||||
threads combinators ;
|
|
||||||
IN: ui.cocoa.views
|
IN: ui.cocoa.views
|
||||||
|
|
||||||
: send-mouse-moved ( view event -- )
|
: send-mouse-moved ( view event -- )
|
||||||
|
@ -360,8 +359,14 @@ CLASS: {
|
||||||
]
|
]
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
: sync-refresh-to-screen ( GLView -- )
|
||||||
|
-> openGLContext -> CGLContextObj NSOpenGLCPSwapInterval 1 <int>
|
||||||
|
CGLSetParameter drop ;
|
||||||
|
|
||||||
: <FactorView> ( world -- view )
|
: <FactorView> ( world -- view )
|
||||||
FactorView over rect-dim <GLView> [ register-window ] keep ;
|
FactorView over rect-dim <GLView>
|
||||||
|
[ sync-refresh-to-screen ] keep
|
||||||
|
[ register-window ] keep ;
|
||||||
|
|
||||||
CLASS: {
|
CLASS: {
|
||||||
{ +superclass+ "NSObject" }
|
{ +superclass+ "NSObject" }
|
||||||
|
|
Loading…
Reference in New Issue