USING: accessors io.backend kernel sequences ui.gadgets
ui.gadgets.borders ui.gadgets.labels ui.gadgets.packs
ui.gadgets.presentations ui.gadgets.tracks ui.images ui.pens
ui.pens.image pair-rocket unicode combinators ui.gestures
juere-engine
juere-engine.stage
juere-engine.utils
juere-engine.rendering
juere-engine.ui
juere-engine.physics
juere-engine.level-editor ;
IN: juere-engine.level-editor.ui
TUPLE: mat-entry < track ;
M: mat-entry pref-dim* drop { 100 200 } ;
: <image-pen>* ( pathname -- pen )
normalize-path <image-name> cached-image <image-pen>
t >>fill? ;
: <mat-entry> ( material -- gadget )
! TODO: Operations to select active-mat & edit material values
vertical mat-entry new-track swap
[ top-tex>> ] [ side-tex>> ] bi
[ "" over <presentation>
swap <image-pen>* >>interior 0.5 track-add
] bi@ ;
TUPLE: mat-editor < track ;
TUPLE: active-mat-gadget < gadget
level ;
SINGLETON: active-mat-pen
: <active-mat-gadget> ( level-editor -- gadget )
[ active-mat-gadget new ] dip >>level
active-mat-pen >>interior ;
M: active-mat-gadget pref-dim* drop { 100 100 } ;
M: active-mat-pen draw-interior
drop dup level>> [ active-mat>> ] [ mat-atlas>> ] bi
nth side-tex>> [ draw-background ] curry with-3dgl ;
! TUPLE: new-mat-gadget ...
: <mat-editor> ( level-editor -- gadget )
vertical mat-editor new-track
<shelf> ! Update at runtime.
pick mat-atlas>> [ <mat-entry> add-gadget ] each
f track-add
over <active-mat-gadget> { 0 15 } <border>
f track-add
{ 0 0 } <border>
nip ;
TUPLE: lv-edit-gadget < track ;
: <edit-level> ( stage -- lv-edit-gadget )
! Todo: save dropped slots into scraps
>stage drop lv-editor <stage-as>
0 "almaide.png" <rsrc> 1/360 { 1.5 1.5 } f f f cursor boa
add-entity
[ horizontal lv-edit-gadget new-track ] dip
[ <mat-editor> f track-add ] keep
[ <stage-gadget> f track-add ] keep
drop ;
: (play-level) ( stage -- stage scraps )
>stage [ physical <stage-as> ] dip ;
: (restore-editor) ( stage scraps -- stage )
lv-editor restore-substage ;
: play-level ( stage-gadget -- stage-gadget )
dup stage>> (play-level) [ >>stage ] [ >>scraps ] bi* ;
: restore-editor ( stage-gadget -- stage-gadget )
dup [ stage>> >stage drop ] [ scraps>> ] bi
lv-editor restore-substage >>stage ;
: play-level* ( lv-editor-gadget -- lv-editor-gadget )
1 over nth-gadget play-level drop ;
: restore-editor* ( lv-editor-gadget -- lv-editor-gadget )
1 over nth-gadget restore-editor drop ;
: <edit-level>* ( stage -- lv-editor )
<edit-level> run-juere 1 swap nth-gadget stage>> ;
M: lv-edit-gadget handle-gesture ( gesture gadget -- ? )
! Todo: gets shadowed by stage-gadget
swap dup key-gesture? [ dup sym>> >lower {
{ "o" [ [ play-level* drop ] if-down ] }
{ "p" [ [ restore-editor* drop ] if-down ] }
[ 3drop f ]
} case ] [ 2drop f ] if ;