66 lines
1.8 KiB
Factor
66 lines
1.8 KiB
Factor
|
! Copyright (C) 2008 Jeff Bigot
|
||
|
! See http://factorcode.org/license.txt for BSD license.
|
||
|
USING: adsoda
|
||
|
xml
|
||
|
xml.utilities
|
||
|
accessors
|
||
|
combinators
|
||
|
sequences
|
||
|
math.parser
|
||
|
kernel
|
||
|
splitting
|
||
|
values
|
||
|
continuations
|
||
|
;
|
||
|
IN: 4DNav.space-file-decoder
|
||
|
|
||
|
: decode-number-array ( x -- y ) "," split [ string>number ] map ;
|
||
|
|
||
|
PROCESS: adsoda-read-model ( tag -- )
|
||
|
|
||
|
TAG: dimension adsoda-read-model children>> first string>number ;
|
||
|
TAG: direction adsoda-read-model children>> first decode-number-array ;
|
||
|
TAG: color adsoda-read-model children>> first decode-number-array ;
|
||
|
TAG: name adsoda-read-model children>> first ;
|
||
|
TAG: face adsoda-read-model children>> first decode-number-array ;
|
||
|
|
||
|
TAG: solid adsoda-read-model
|
||
|
<solid> swap
|
||
|
{
|
||
|
[ "dimension" tag-named adsoda-read-model >>dimension ]
|
||
|
[ "name" tag-named adsoda-read-model >>name ]
|
||
|
[ "color" tag-named adsoda-read-model >>color ]
|
||
|
[ "face" tags-named [ adsoda-read-model cut-solid ] each ]
|
||
|
} cleave
|
||
|
ensure-adjacencies
|
||
|
;
|
||
|
|
||
|
TAG: light adsoda-read-model
|
||
|
<light> swap
|
||
|
{
|
||
|
[ "direction" tag-named adsoda-read-model >>direction ]
|
||
|
[ "color" tag-named adsoda-read-model >>color ]
|
||
|
} cleave
|
||
|
;
|
||
|
|
||
|
TAG: space adsoda-read-model
|
||
|
<space> swap
|
||
|
{
|
||
|
[ "dimension" tag-named adsoda-read-model >>dimension ]
|
||
|
[ "name" tag-named adsoda-read-model >>name ]
|
||
|
[ "color" tag-named adsoda-read-model >>ambient-color ]
|
||
|
[ "solid" tags-named [ adsoda-read-model suffix-solids ] each ]
|
||
|
[ "light" tags-named [ adsoda-read-model suffix-lights ] each ]
|
||
|
} cleave
|
||
|
;
|
||
|
|
||
|
: read-model-file ( path -- x )
|
||
|
dup
|
||
|
[
|
||
|
[ file>xml "space" tags-named first adsoda-read-model ]
|
||
|
[ drop <space> ] recover
|
||
|
] [ drop <space> ] if
|
||
|
|
||
|
;
|
||
|
|