document game.worlds, tweak GAME: syntax
parent
296c3206b2
commit
98d143fde1
|
|
@ -0,0 +1 @@
|
||||||
|
Joe Groff
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
World class that integrates game loop and game input
|
||||||
|
|
@ -0,0 +1,35 @@
|
||||||
|
! (c)2009 Joe Groff bsd license
|
||||||
|
USING: game.loop help.markup help.syntax kernel math ui ui.gadgets.worlds words ;
|
||||||
|
IN: game.worlds
|
||||||
|
|
||||||
|
HELP: GAME:
|
||||||
|
{ $syntax """GAME: word { attributes }
|
||||||
|
attribute-code ;""" }
|
||||||
|
{ $description "Similar to " { $link POSTPONE: MAIN-WINDOW: } ", defines a main entry point " { $snippet "word" } " for the current vocabulary that opens a UI window with the provided " { $snippet "attributes" } ". In addition to the standard " { $link world-attributes } ", additional " { $link game-attributes } " can be specified to specify game-specific attributes. Unlike " { $link POSTPONE: MAIN-WINDOW: } ", the " { $snippet "attributes" } " for " { $snippet "GAME:" } " must provide values for the " { $snippet "world-class" } " and " { $snippet "tick-interval-micros" } " slots." } ;
|
||||||
|
|
||||||
|
HELP: game-attributes
|
||||||
|
{ $class-description "Extends the " { $link world-attributes } " tuple class with extra attributes for " { $link game-world } "s:" }
|
||||||
|
{ $list
|
||||||
|
{ { $snippet "tick-interval-micros" } " specifies the number of microseconds between consecutive calls to the world's " { $link tick* } " method by the game loop." }
|
||||||
|
} ;
|
||||||
|
|
||||||
|
HELP: game-world
|
||||||
|
{ $class-description "" } ;
|
||||||
|
|
||||||
|
HELP: tick-interval-micros
|
||||||
|
{ $values
|
||||||
|
{ "world" game-world }
|
||||||
|
{ "micros" integer }
|
||||||
|
}
|
||||||
|
{ $description "Subclasses of " { $link game-world } " can override this class to specify the number of microseconds between consecutive calls to the game world's " { $link tick* } " method by the game loop. Using the " { $link POSTPONE: GAME: } " syntax will define this method for you." } ;
|
||||||
|
|
||||||
|
ARTICLE: "game.worlds" "Game worlds"
|
||||||
|
"The " { $vocab-link "game.worlds" } " vocabulary provides a " { $link world } " subclass that integrates with " { $vocab-link "game.loop" } " and " { $vocab-link "game.input" } " to quickly provide game infrastructure."
|
||||||
|
{ $subsections
|
||||||
|
game-world
|
||||||
|
game-attributes
|
||||||
|
POSTPONE: GAME:
|
||||||
|
}
|
||||||
|
;
|
||||||
|
|
||||||
|
ABOUT: "game.worlds"
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
! (c)2009 Joe Groff bsd license
|
||||||
USING: accessors combinators fry game.input game.loop generic kernel math
|
USING: accessors combinators fry game.input game.loop generic kernel math
|
||||||
parser sequences ui ui.gadgets ui.gadgets.worlds ui.gestures threads
|
parser sequences ui ui.gadgets ui.gadgets.worlds ui.gestures threads
|
||||||
words ;
|
words ;
|
||||||
|
|
@ -25,9 +26,19 @@ M: game-world end-world
|
||||||
TUPLE: game-attributes < world-attributes
|
TUPLE: game-attributes < world-attributes
|
||||||
{ tick-interval-micros fixnum read-only } ;
|
{ tick-interval-micros fixnum read-only } ;
|
||||||
|
|
||||||
|
<PRIVATE
|
||||||
|
|
||||||
: verify-game-attributes ( attributes -- )
|
: verify-game-attributes ( attributes -- )
|
||||||
world-class>> { f world } member?
|
{
|
||||||
[ "GAME: must be given a custom world-class" throw ] when ;
|
[
|
||||||
|
world-class>> { f world } member?
|
||||||
|
[ "GAME: must be given a custom world-class" throw ] when
|
||||||
|
]
|
||||||
|
[
|
||||||
|
tick-interval-micros>> 0 <=
|
||||||
|
[ "GAME: must be given a nonzero tick-interval-micros" throw ] when
|
||||||
|
]
|
||||||
|
} cleave ;
|
||||||
|
|
||||||
: define-game-tick-interval-micros ( attributes -- )
|
: define-game-tick-interval-micros ( attributes -- )
|
||||||
[ world-class>> \ tick-interval-micros create-method ]
|
[ world-class>> \ tick-interval-micros create-method ]
|
||||||
|
|
@ -40,11 +51,14 @@ TUPLE: game-attributes < world-attributes
|
||||||
[ define-game-tick-interval-micros ]
|
[ define-game-tick-interval-micros ]
|
||||||
} cleave ;
|
} cleave ;
|
||||||
|
|
||||||
: define-game ( word attributes -- )
|
: define-game ( word attributes quot -- )
|
||||||
[ [ ] define-main-window ]
|
[ define-main-window ]
|
||||||
[ nip define-game-methods ] 2bi ;
|
[ drop nip define-game-methods ] 3bi ;
|
||||||
|
|
||||||
|
PRIVATE>
|
||||||
|
|
||||||
SYNTAX: GAME:
|
SYNTAX: GAME:
|
||||||
CREATE
|
CREATE
|
||||||
game-attributes parse-main-window-attributes
|
game-attributes parse-main-window-attributes
|
||||||
|
parse-definition
|
||||||
define-game ;
|
define-game ;
|
||||||
|
|
|
||||||
|
|
@ -308,4 +308,4 @@ GAME: bunny-game {
|
||||||
{ grab-input? t }
|
{ grab-input? t }
|
||||||
{ pref-dim { 1024 768 } }
|
{ pref-dim { 1024 768 } }
|
||||||
{ tick-interval-micros $[ 1,000,000 60 /i ] }
|
{ tick-interval-micros $[ 1,000,000 60 /i ] }
|
||||||
}
|
} ;
|
||||||
|
|
|
||||||
|
|
@ -104,4 +104,4 @@ GAME: raytrace-game {
|
||||||
{ grab-input? t }
|
{ grab-input? t }
|
||||||
{ pref-dim { 1024 768 } }
|
{ pref-dim { 1024 768 } }
|
||||||
{ tick-interval-micros $[ 1,000,000 60 /i ] }
|
{ tick-interval-micros $[ 1,000,000 60 /i ] }
|
||||||
}
|
} ;
|
||||||
|
|
|
||||||
|
|
@ -298,4 +298,4 @@ GAME: terrain-game {
|
||||||
{ grab-input? t }
|
{ grab-input? t }
|
||||||
{ pref-dim { 1024 768 } }
|
{ pref-dim { 1024 768 } }
|
||||||
{ tick-interval-micros $[ 1,000,000 60 /i ] }
|
{ tick-interval-micros $[ 1,000,000 60 /i ] }
|
||||||
}
|
} ;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue