 (defmethod move :missile [missile]
   (basic-move missile false))
 
+(defmethod move :fire [{:keys [life-time color] :as fire}]
+  (if (< life-time turn-millis)
+    nil
+    (let [fire (basic-move fire false)
+          alpha (int (* (.getAlpha color) (- 1 (/ turn-millis life-time))))
+          color (Color. (.getRed color) (.getGreen color) (.getBlue color) alpha)
+          life-time (- life-time turn-millis)]
+      (assoc fire :life-time life-time
+                  :color color))))
+
 (defmethod move :asteroid [asteroid]
   (basic-move asteroid))
 

   :cockpit-shape  [[-0.143 0.714] [0.143 0.714] [0.286 -0.143] [-0.286 -0.143]]
   :cockpit-color  (Color. 0 0 80)

   :weapons        {:machinegun (create-weapon :projectile)
                    :launcher   (create-weapon :missile)}
   :shots          []



(defn do-action!
  ([ship {:keys [acceleration rotation fire-weapon] :as action} activate?]
   (when acceleration (dosync (alter ship assoc :acceleration (if activate? acceleration 0) :collidable? ship-damage)
                              (alter ship toggle-shooting :engine activate?)))
   (when rotation (dosync (alter ship set-rotation rotation activate?)))
   (when fire-weapon (dosync (alter ship toggle-shooting fire-weapon activate?))))
  ([ship action]
