     (get-in entity [:brain :intended-move-direction])
     (not-empty (human-controlled-entity-movement-directions entity))))
 
-(def should-update-velocity? should-update-orientation?)
-
 (sm/defn update-orientation :- Entity
   [entity :- Entity]
   ; TODO - currently only implemented for player-controlled entities, doesn't handle monsters

                            (apply + (map Math/cos intended-direction-values)))))
    entity))

(sm/defn update-velocity :- Entity
  [entity :- Entity]
  ; TODO - currently only implemented for player-controlled entities, doesn't handle monsters
  (if-let [acceleration (when (should-update-velocity? entity)
                          (safe-get-in entity [:motion :max-acceleration]))]
    (let [orientation (safe-get-in entity [:shape :orientation])
          update-axis-velocity (fn [trig-fn axis-velocity]
                                 (let [new-velocity (min (safe-get-in entity [:motion :max-speed])
                                                         (+ axis-velocity
                                                            (* acceleration
                                                               (trig-fn orientation))))]
                                   (if (> (Math/abs new-velocity) min-velocity)
                                     new-velocity
                                     0)))]
      (-> entity
          (update-in [:motion :velocity :x]
                     (partial update-axis-velocity Math/cos))
          (update-in [:motion :velocity :y]
                     (partial update-axis-velocity Math/sin))))
    entity))

(sm/defn apply-friction :- Entity
  [entity :- Entity]

(sm/defn relevant-to-movement-system? :- s/Bool
  [entity :- Entity]
  (or
    (seq (get-in entity [:brain :intended-move-direction]))
    (not= (get-in entity [:motion :velocity :x] 0) 0)
    (not= (get-in entity [:motion :velocity :y] 0) 0)))

