Haunted House

Origo is a funnyface (0,0)

New live coding project 2: a day of fiddling

Posted by Gasten on December 4, 2007

(read the first post here)

I’d love to write more, but I’m too tired. Some of the results from todays fiddling is pasted at the end.

Boy, isn’t Scheme well suited for live coding? It’s very algorithmic, and you can develop fast and abstract. And it’s the most beautiful language out there (is in looking at code as if it was a picture)!

Boy, isn’t Scheme badly suited for live coding. It’s a pain to write, a pain to read, and hell of a pain to debug!

Was a lot harder than I expected, but I managed to hack a cool script for my Xbox360 which will ease joysticking. Pasted below.

I’ve also started to swap the keyboard-controls to joystick-control in the asteroids-example. Unfortunally I managed to break it a little a couple of minutes ago, so you will have to live without it for now.


;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; joypad
; a joypad input listener, for use with oscjoy
; (http://www.lcscanada.com/oscjoy/index.html)
;
; usage:
; (osc-source oscjoy-portnumber)
; (define my-joypad (make-object joypad%))
; ... every frame loop ...
; (send my-joypad update)
; (display (send my-joypad get-button 0))(newline)
; (display (send my-joypad get-axis 0 0))(newline) ; returns a the value
                                            ;  of the axis as a float (-1 to 1)

(require (lib "class.ss"))

(define joypad%
  (class object%
    (public
      update ;; update the joylistener
      get-button ;; get the current values for a button
      get-axis ;; get the current value for an axis
      )

    (define buttons '())
    (define axes '())
    (define button-state '())

    (define (joypad-new)
      (super-new)
      (set! buttons (make-buttons 16 '()))
      (set! axes (make-axes 16))
      (set! button-state (make-buttons 16 '())))

    (define (make-axes n)
      (make-vector n 0))

    (define (make-buttons n l)
      (if (zero? n)
          l
          (make-buttons (- n 1) (cons 0 l))))

     (define ax-map (vector
        (vector 0 1)    ; left stick
        (vector 3 4)    ; right stick
        (vector 2 5)))  ; l/r triggers

    (define (get-button n)
      (list-ref buttons n))

    (define (button-changed n)
      (list-ref button-state n))

    (define (get-axis n1 n2)    ; return the correct axis. Mapped in ax-map.
      (vector-ref axes (vector-ref (vector-ref ax-map n1) n2)))

    (define (get-axes)      ; can probably be deleted pretty painless
      axes)

    (define (set-button! n s)
      (list-set! buttons n s))

    (define (update)
      (define (drain path value)       ; drains all osc events for a message and
        (if (osc-msg path)             ; only reports the last one which is ok for
            (drain path (osc 0))       ; this sort of control
            value))

      (define (do-axes n)
        (let ((value (drain (string-append "/oscjoy.0.axis." (number->string n)) #f)))
          (cond
            ((number? value)
             ; get a vector of all the axes
             ; and set the value (make usre it's in range).
             (vector-set! (get-axes)
                          n
                          (* 2 (- value 0.5) )))))
        (if (zero? n)
            0
            (do-axes (- n 1))))

      (define (do-buttons n)
        (let ((value (drain (string-append "/oscjoy.0.button." (number->string n)) #f)))
          (cond
            ((number? value)
             ; have we changed?
             (if (not (eq? (get-button n) value))
                 (list-set! button-state n #t)
                 (list-set! button-state n #f))
             (set-button! n value))))
        (if (zero? n)
            0
            (do-buttons (- n 1))))

      ;(display (osc-peek)) (newline)

      (do-axes 16)
      (do-buttons 16))

    (joypad-new)))

Night.

3 Responses to “New live coding project 2: a day of fiddling”

  1. [...] they say New live coding project 2: a day of fiddling « Haunted House on New live coding projectGasten on Vim-tip #1Gasten on A walk in the valley of bugs [...]

  2. sandrar said

    Hi! I was surfing and found your blog post… nice! I love your blog. :) Cheers! Sandra. R.

  3. jenna said

    Sign: yyams Hello!!! punht and 843dhursyvpxd and 7004 My Comments: Cool!

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>