# HG changeset patch # User Robert McIntyre # Date 1328171551 25200 # Node ID 22444eb20eccd75a5af1d5cf2170c0f3ffcc232f # Parent ffbab4199c0d2be4d77e1a399c05a4aa3da5c125 de-macrofication complete. diff -r ffbab4199c0d -r 22444eb20ecc org/body.org --- a/org/body.org Thu Feb 02 00:57:18 2012 -0700 +++ b/org/body.org Thu Feb 02 01:32:31 2012 -0700 @@ -345,56 +345,54 @@ -(defmacro with-movement +(defn with-movement [object [up down left right roll-up roll-down :as keyboard] forces - [world-invocation - root-node + [root-node keymap intilization world-loop]] (let [add-keypress (fn [state keymap key] - `(merge ~keymap - {~key - (fn [_# pressed?#] - (reset! ~state pressed?#))})) - move-left? (gensym "move-left?") - move-right? (gensym "move-right?") - move-up? (gensym "move-up?") - move-down? (gensym "move-down?") - roll-left? (gensym "roll-left?") - roll-right? (gensym "roll-right?") - directions [[0 1 0][0 -1 0][0 0 1][0 0 -1][-1 0 0][1 0 0]] - symbols [move-left? move-right? move-up? move-down? + (merge keymap + {key + (fn [_ pressed?] + (reset! state pressed?))})) + move-up? (atom false) + move-down? (atom false) + move-left? (atom false) + move-right? (atom false) + roll-left? (atom false) + roll-right? (atom false) + + directions [(Vector3f. 0 1 0)(Vector3f. 0 -1 0) + (Vector3f. 0 0 1)(Vector3f. 0 0 -1) + (Vector3f. -1 0 0)(Vector3f. 1 0 0)] + atoms [move-left? move-right? move-up? move-down? roll-left? roll-right?] - keymap* (vec (map #(add-keypress %1 keymap %2) - symbols - keyboard)) + keymap* (reduce merge + (map #(add-keypress %1 keymap %2) + atoms + keyboard)) - splice-loop (map (fn [sym direction force] - `(if (deref ~sym) - (tap ~object - (Vector3f. ~@direction) - ~force))) - symbols directions forces) + splice-loop (fn [] + (dorun + (map + (fn [sym direction force] + (if @sym + (tap object direction force))) + atoms directions forces))) - world-loop* `(fn [world# tpf#] - (~world-loop world# tpf#) - ~@splice-loop)] - `(let [~move-up? (atom false) - ~move-down? (atom false) - ~move-left? (atom false) - ~move-right? (atom false) - ~roll-left? (atom false) - ~roll-right? (atom false)] - (~world-invocation - ~root-node - (reduce merge ~keymap*) - ~intilization - ~world-loop*)))) + world-loop* (fn [world tpf] + (world-loop world tpf) + (splice-loop))] + + [root-node + keymap* + intilization + world-loop*])) (defn test-proprioception @@ -427,15 +425,15 @@ controls (merge standard-debug-controls - {"key-y" + {"key-o" (fn [_ _] (.setEnabled finger-control true)) - "key-u" + "key-p" (fn [_ _] (.setEnabled finger-control false)) + "key-k" + (fn [_ _] (.setEnabled hand-control true)) + "key-l" + (fn [_ _] (.setEnabled hand-control false)) "key-i" - (fn [_ _] (.setEnabled hand-control true)) - "key-o" - (fn [_ _] (.setEnabled hand-control false)) - "key-q" (fn [world _] (set-gravity world (Vector3f. 0 0 0))) } ) @@ -446,27 +444,24 @@ (.getControl hand RigidBodyControl) PhysicsCollisionObject/COLLISION_GROUP_NONE) ) - - (with-movement - hand - ["key-w" "key-e" "key-s" "key-d" "key-x" "key-c"] - [10 10 10 10 1 1] - (with-movement - finger - ["key-r" "key-t" "key-f" "key-g" "key-v" "key-b"] - [10 10 10 10 1 1] - (world - root - controls - (fn [world] - (.setTimer world (com.aurellem.capture.RatchetTimer. 60)) - (set-gravity world (Vector3f. 0 0 0)) - (light-up-everything world)) - (fn [_ _] (prop-view (list (prop))))))))) + (apply + world + (with-movement + hand + ["key-y" "key-u" "key-h" "key-j" "key-n" "key-m"] + [10 10 10 10 1 1] + (with-movement + finger + ["key-r" "key-t" "key-f" "key-g" "key-v" "key-b"] + [10 10 10 10 1 1] + [root + controls + (fn [world] + (.setTimer world (com.aurellem.capture.RatchetTimer. 60)) + (set-gravity world (Vector3f. 0 0 0)) + (light-up-everything world)) + (fn [_ _] (prop-view (list (prop))))]))))) - - - #+end_src #+results: test-body