diff options
-rw-r--r-- | examples/game-controller.scm | 68 |
1 files changed, 38 insertions, 30 deletions
diff --git a/examples/game-controller.scm b/examples/game-controller.scm index fe1a681..252f368 100644 --- a/examples/game-controller.scm +++ b/examples/game-controller.scm @@ -1,5 +1,6 @@ (use-modules (chickadee) (chickadee math vector) + (chickadee render color) (chickadee render font) (chickadee render sprite) (chickadee render texture) @@ -23,6 +24,9 @@ (right-stick ,(vec2 450.0 20.0) 13 31) (left-shoulder ,(vec2 110.0 390.0) 4 22) (right-shoulder ,(vec2 450.0 390.0) 5 23))) +(define trigger-icons + `((trigger-left ,(vec2 10.0 390.0) 22) + (trigger-right ,(vec2 550.0 390.0) 23))) (define no-controller-msg "no controller detected :'(") (define no-controller-msg-pos #f) (define controller-name-pos #f) @@ -40,38 +44,42 @@ (set! controller-name-pos (vec2 (center-text (controller-name controller)) 440.0))) -;; FIXME: I couldn't think of a decent way to display the analog -;; left/right trigger buttons, so they are omitted. (define (draw alpha) (if controller - (begin - (draw-text (controller-name controller) controller-name-pos) - (for-each (match-lambda - (((and (or 'left-stick 'right-stick) button) - p released pressed) - (let ((pressed? (controller-button-pressed? controller - button)) - (x (controller-axis controller - (if (eq? button 'left-stick) - 'left-x - 'right-x))) - (y (controller-axis controller - (if (eq? button 'left-stick) - 'left-y - 'right-y)))) - (draw-sprite (texture-atlas-ref atlas released) - p) - (when (or pressed? (not (zero? x)) (not (zero? y))) - (draw-sprite (texture-atlas-ref atlas pressed) - (vec2+ p (vec2 (* x 16.0) (* y -16.0))))))) - ((button p released pressed) - (let ((pressed? (controller-button-pressed? controller - button))) - (draw-sprite (texture-atlas-ref - atlas - (if pressed? pressed released)) - p)))) - button-icons)) + (with-batched-sprites + (draw-text (controller-name controller) controller-name-pos) + (for-each (match-lambda + ((axis p tile) + (let ((alpha (controller-axis controller axis))) + (draw-sprite (texture-atlas-ref atlas tile) p + #:tint (color 1.0 1.0 1.0 alpha))))) + trigger-icons) + (for-each (match-lambda + (((and (or 'left-stick 'right-stick) button) + p released pressed) + (let ((pressed? (controller-button-pressed? controller + button)) + (x (controller-axis controller + (if (eq? button 'left-stick) + 'left-x + 'right-x))) + (y (controller-axis controller + (if (eq? button 'left-stick) + 'left-y + 'right-y)))) + (draw-sprite (texture-atlas-ref atlas released) + p) + (when (or pressed? (not (zero? x)) (not (zero? y))) + (draw-sprite (texture-atlas-ref atlas pressed) + (vec2+ p (vec2 (* x 16.0) (* y -16.0))))))) + ((button p released pressed) + (let ((pressed? (controller-button-pressed? controller + button))) + (draw-sprite (texture-atlas-ref + atlas + (if pressed? pressed released)) + p)))) + button-icons)) (draw-text no-controller-msg no-controller-msg-pos))) (run-game #:load load #:draw draw #:controller-add controller-add) |