                 a (vec- (:pos (nodes (:node-a h))) (:pos (nodes (:node-b h))))
                 c (vec- (:pos (nodes (:node-c h))) (:pos (nodes (:node-b h))))]
                 (angle a c))
-            :strength 20000))
+            :modifier-angle 0.0
+            :strength 1000000))
         hinges)
 })
 

    {
        :head (make-node 250 150)
        :tail (make-node 50 150)
        :h-l-k (make-node 270 75)
        :h-l-f (make-node 270 0)
        :h-t-k (make-node 230 75)
        :h-t-f (make-node 230 0)
        :t-l-k (make-node 70 75)
        :t-l-f (make-node 70 0)
        :t-t-k (make-node 30 75)
        :t-t-f (make-node 30 0)
    }
    (map (partial apply make-spring) [
        [:head :tail]

                        (conj keys (.keyCode event))
                    :else keys)})))

(defn hinge-nodes [h]
    (map h [:node-a :node-b :node-c]))

(defn tick-imp [state tick-step input-state]
    (assoc state
        :hinges
            (let
                [[q w i o a s k l] (map (:keys input-state) [
                    KeyCodes/Q KeyCodes/W KeyCodes/I KeyCodes/O
                    KeyCodes/A KeyCodes/S KeyCodes/K KeyCodes/L
                    ])]
                (map (fn [h] (let [hn (hinge-nodes h)]
                    (assoc h :modifier-angle
                        (clamp (+ (:modifier-angle h)
                            (cond
                                (= hn [:tail :head :h-l-k])
                                    (+ (if q 0.05 0.0) (if w -0.05 0.0))
                                (= hn [:head :h-l-k :h-l-f])
                                    (+ (if i 0.05 0.0) (if o -0.05 0.0))
                                (= hn [:tail :head :h-t-k])
                                    (+ (if q -0.05 0.0) (if w 0.05 0.0))
                                (= hn [:head :h-t-k :h-t-f])
                                    (+ (if i -0.05 0.0) (if o 0.05 0.0))
                                (= hn [:head :tail :t-l-k])
                                    (+ (if a 0.05 0.0) (if s -0.05 0.0))
                                (= hn [:tail :t-l-k :t-l-f])
                                    (+ (if k 0.05 0.0) (if l -0.05 0.0))
                                (= hn [:head :tail :t-t-k])
                                    (+ (if a -0.05 0.0) (if s 0.05 0.0))
                                (= hn [:tail :t-t-k :t-t-f])
                                    (+ (if k -0.05 0.0) (if l 0.05 0.0))
                                :else
                                    0.0))
                            (:min-modifier-angle h) (:max-modifier-angle h)))))
                    (:hinges state)))
        :nodes
            (update-node-positions
                (update-node-velocities
