From 30b4ddbab771296d33c410386e06d08c014b9834 Mon Sep 17 00:00:00 2001 From: David Thompson Date: Wed, 14 Apr 2021 21:05:12 -0400 Subject: node-2d: Reimplement some animation methods using new virtual slot accessors. --- starling/node-2d.scm | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/starling/node-2d.scm b/starling/node-2d.scm index 5ee75fe..d66615c 100644 --- a/starling/node-2d.scm +++ b/starling/node-2d.scm @@ -309,10 +309,8 @@ (define-method (move-to (node ) x y) - (let ((p (position node))) - (set-vec2-x! p x) - (set-vec2-y! p y) - (dirty! node))) + (set! (position-x node) x) + (set! (position-y node) y)) (define-method (move-to (node ) x y duration ease) (let ((p (position node))) @@ -360,8 +358,7 @@ (compute-matrices! node)) (define-method (rotate-to (node ) theta) - (set! (rotation node) theta) - (dirty! node)) + (set! (rotation node) theta)) (define-method (rotate-to (node ) theta duration ease) (tween duration (rotation node) theta @@ -382,26 +379,27 @@ (rotate-by node dtheta duration smoothstep)) (define-method (scale-to (node ) sx sy) - (let ((s (scale node))) - (set-vec2-x! s sx) - (set-vec2-y! s sy) - (dirty! node))) + (set! (scale-x node) sx) + (set! (scale-y node) sy)) + +(define-method (scale-to (node ) s) + (scale-to node s s)) (define-method (scale-to (node ) sx sy duration ease) - (let ((s (scale node))) - (scale-by node (- sx (vec2-x s)) (- sy (vec2-y s)) duration ease))) + (scale-by node (- sx (scale-x node)) (- sy (scale-y node)) duration ease)) (define-method (scale-to (node ) sx sy duration) (scale-to node sx sy duration smoothstep)) (define-method (scale-by (node ) dsx dsy) - (let ((s (scale node))) - (scale-to node (+ (vec2-x s) dsx) (+ (vec2-y s) dsy)))) + (scale-to node (+ (scale-x node) dsx) (+ (scale-y node) dsy))) + +(define-method (scale-by (node ) ds) + (scale-by node ds ds)) (define-method (scale-by (node ) dsx dsy duration ease) - (let* ((s (scale node)) - (start-x (vec2-x s)) - (start-y (vec2-y s))) + (let ((start-x (scale-x node)) + (start-y (scale-y node))) (tween duration 0.0 1.0 (lambda (n) (scale-to node @@ -412,6 +410,9 @@ (define-method (scale-by (node ) dsx dsy duration) (scale-by node dsx dsy duration smoothstep)) +(define-method (scale-by (node ) ds duration (ease )) + (scale-by node ds ds duration ease)) + (define-method (follow-bezier-path (node ) path duration forward?) (let ((p (position node)) (path (if forward? path (reverse path)))) -- cgit v1.2.3