From 2e354c9e235b382c1870dcaad166b846dbc7287e Mon Sep 17 00:00:00 2001 From: David Thompson Date: Wed, 12 Sep 2018 17:58:21 -0400 Subject: Add support for transitions in sequence scene. --- starling/transition.scm | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/starling/transition.scm b/starling/transition.scm index 826032e..3a544f9 100644 --- a/starling/transition.scm +++ b/starling/transition.scm @@ -32,6 +32,8 @@ #:use-module (starling scene) #:export ( scenes + last-scene + transition scene-from @@ -49,16 +51,31 @@ ;; transitioning scenes. (define-class () - (scenes #:accessor scenes #:init-keyword #:scenes)) + (scenes #:accessor scenes #:init-keyword #:scenes) + (last-scene #:accessor last-scene #:init-form #f) + (transition #:accessor transition #:init-keyword #:transition + #:init-form default-sequence-transition)) + +(define (default-sequence-transition from to) + ;; Return the 'to' scene as-is, which means there is no transition + ;; at all. + to) (define-method (on-enter (sequence )) + (define (next-scene-transition scene) + (let ((last (last-scene sequence))) + (if last + ((transition sequence) last scene) + scene))) (match (scenes sequence) ((scene) ;; If we've reached the last scene, we're done! - (replace-scene scene)) + (replace-scene (next-scene-transition scene))) ((scene . rest) - (set! (scenes sequence) rest) - (push-scene scene)))) + (let ((next-scene (next-scene-transition scene))) + (set! (scenes sequence) rest) + (set! (last-scene sequence) scene) + (push-scene next-scene))))) ;;; -- cgit v1.2.3