    :collidable?    false                                    ; is set to ship-damage at first movement / shooting
    })
 
-(defn create-circle
-  ([pos speed]
-   {:type           :projectile
-
-    :size           (* 0.5 ship-size)
-    :shape          [[-1 -1] [1 1]]
-
-    :color          (Color. 10 200 220)
-    :paint-method   fill-circle
-
-    :position       pos
-    :speed          speed
-    :acceleration   0
-
-    :direction      0
-    :rotation-speed 0
-
-    :collidable?    'whatever
-    }))
-
 (defn create-shot [ammunition-type {:keys [position size direction speed] :as ship}]
   (let [dir-vec (m/rotate-vec direction [0 1])
         position (m/vec+vec position (m/num*vec size dir-vec))

  (proxy [JPanel ActionListener KeyListener] []
    (paintComponent [g]                                     ; <label id="code.game-panel.paintComponent"/>
      (proxy-super paintComponent g)
      (paint g @ship)
      (doseq [asteroid @asteroids]
        (paint g asteroid)))
    (actionPerformed [e]                                    ; <label id="code.game-panel.actionPerformed"/>
      (update-positions! ship asteroids)
      (resolve-collision! ship asteroids)

                :damage-taken nil)
    ship))

(defmethod handle-damage :shot [{:keys [type damage-taken position] :as shot}]
  (when damage-taken (play-sound (str (name type) "-hit")))
  (if damage-taken
    (create-explosion position (-> ammunition-types type :explosion))
    shot))

(defmethod handle-damage :asteroid [{:keys [damage-taken size position speed] :as asteroid}]
  (if damage-taken
    (create-asteroids damage-taken (/ size (sqrt damage-taken)) position speed)
    asteroid))

(defmethod handle-damage :other [object]
  object)

(defn resolve-all-collision [{shots :shots :as ship} asteroids]
  (let [[ship asteroids] (check-collision ship asteroids)
