   [state x y cell]
   ;; determine trap advancement mechanics
   (log/info "x" x "y" y "cell" cell)
+  ;; TODO: only trigger once
   (let [{{min-x :min-x
           min-y :min-y
           max-x :max-x


(defn conj-trap-in-current-place
  [state trap]
  (rw/update-current-place state (fn [place] (update place :traps (fn [traps] (conj traps trap))))))

(defn room-bound-xys
  [min-x min-y max-x max-y]


(defn update-traps
  [state]
  (as-> state state
    (reduce update-trap state (map-indexed vector (current-place-traps state)))
    (if-let [place-id (rw/current-place-id state)]
      (update-in state
                 [:world :places place-id :traps]
                 (fn [traps]
                   (reduce (fn [traps trap]
                             ;; remove expended crusing wall traps
                             (if (and (= (get trap :type) :crushing-wall)
                                      (empty? (get trap :locations)))
                               traps
                               (vec (conj traps trap))))
                           []
                           traps)))
      state)))

