Our game will have only two entities – one representing the spaceship and the other representing bullets. To better organize the code, we will put all entity-related code in its own file, src/reagi_game/entities.cljs. This file will also contain some of the rendering logic, so we'll need to require monet:
(ns reagi-game.entities (:require [monet.canvas :as canvas] [monet.geometry :as geom]))
Next, we'll add a few helper functions so that we avoid repeating ourselves too much:
(defn shape-x [shape] (-> shape :pos deref :x)) (defn shape-y [shape] (-> shape :pos deref :y)) (defn shape-angle [shape] @(:angle shape)) (defn shape-data [x y angle] {:pos (atom {:x x :y y}) :angle (atom angle)})
The first three functions are simply ...