Game entities

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 ...

Get Hands-On Reactive Programming with Clojure - Second Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.