diff org/body.org @ 55:8b95180f5c69

getting basic hinges to work
author Robert McIntyre <rlm@mit.edu>
date Tue, 15 Nov 2011 17:48:10 -0700
parents 7bc3b22c507b
children 8b571c137f81
line wrap: on
line diff
     1.1 --- a/org/body.org	Tue Nov 15 00:53:06 2011 -0700
     1.2 +++ b/org/body.org	Tue Nov 15 17:48:10 2011 -0700
     1.3 @@ -119,9 +119,6 @@
     1.4            ["mid2" "tail" "head" "mid1" "mid3" "mid4" "Dummy-Root" ""]
     1.5             ;;"mid2" "mid3" "tail" "head"]
     1.6          )))
     1.7 -
     1.8 -
     1.9 -    
    1.10      (.addControl node krc)
    1.11      (.setRagdollMode krc)
    1.12      )
    1.13 @@ -157,7 +154,6 @@
    1.14                  (println (.getName b)
    1.15                           " -- " (f b)))
    1.16                bones))
    1.17 -
    1.18    (dorun
    1.19     (map #(.attachChild
    1.20            debug-node 
    1.21 @@ -194,11 +190,8 @@
    1.22                               ;;              0
    1.23                                            
    1.24                              (Vector3f. 1 1 1))
    1.25 -
    1.26          )
    1.27        
    1.28 -
    1.29 -      
    1.30        (println-repl "hi! <3"))))
    1.31  
    1.32  
    1.33 @@ -242,10 +235,53 @@
    1.34      
    1.35  
    1.36  
    1.37 -    
    1.38  
    1.39 +(defn joint-control
    1.40 +  [joint]
    1.41 +  (let [physics-space (ref nil)
    1.42 +        enabled? (ref true)]
    1.43 +    (reify PhysicsControl
    1.44 +      (setPhysicsSpace [this space]
    1.45 +        (dosync
    1.46 +         (ref-set physics-space space))
    1.47 +        (.addJoint space joint))
    1.48 +      (update [this tpf])
    1.49 +      (setSpatial [this spatial])
    1.50 +      (render [this rm vp])
    1.51 +      (getPhysicsSpace [this] (deref physics-space))
    1.52 +      (isEnabled [this] (deref enabled?))
    1.53 +      (setEnabled [this state]
    1.54 +        (dosync (ref-set enabled? state))))))
    1.55  
    1.56 +(defn add-joint
    1.57 +  "Add a joint to a particular object. When the object is added to the
    1.58 +  PhysicsSpace of a simulation, the joint will also be added"
    1.59 +  [object joint]
    1.60 +  (let [control (joint-control joint)]
    1.61 +    (.addControl object control))
    1.62 +  object)
    1.63  
    1.64 +(defn hinge-world
    1.65 +  []
    1.66 +  (let [sphere1 (sphere)
    1.67 +        sphere2 (sphere 1 :position (Vector3f. 3 3 3))
    1.68 +        joint (Point2PointJoint.
    1.69 +               (.getControl sphere1 RigidBodyControl)
    1.70 +               (.getControl sphere2 RigidBodyControl) 
    1.71 +               Vector3f/ZERO (Vector3f. 3 3 3))]
    1.72 +    (add-joint sphere1 joint)
    1.73 +    (doto (Node. "hinge-world")
    1.74 +      (.attachChild sphere1)
    1.75 +      (.attachChild sphere2))))
    1.76 +        
    1.77 +
    1.78 +(defn test-joint 
    1.79 +  []
    1.80 +  (.start
    1.81 +   (world
    1.82 +    (doto (Node.)
    1.83 +      (.attachChild
    1.84 +       
    1.85  
    1.86  
    1.87