(require scheme/class) (clear) (random-seed 0) (define tendril% (class object% (init part-count_ part-size_) (field (part-count part-count_) (part-size part-size_)) (define parts '()) (define (initialise) (for ([i (in-range part-count)]) (let ([obj (build-cube)]) (with-primitive obj (translate (vector 0 (+ (* -1 i part-size) (/ part-size 2)) 0)) (scale (vector .1 (+ part-size .1) .1))) (active-box obj) (if (zero? i) (build-fixedjoint obj) (let ([j (build-balljoint obj (car parts) (vector 0 (* -1 part-size (sub1 i)) 0))]) (joint-param j "Bounce" 0))) (set! parts (cons obj parts))))) (define/public (kick-tendril v) (kick (list-ref parts (random (length parts))) v)) (initialise) (super-new))) (define tendril (make-object tendril% 10 .5)) (send tendril kick-tendril (vmul (crndvec) 10))