Skip to content

Commit 2304103

Browse files
committed
ClojureScript support
1 parent b526361 commit 2304103

40 files changed

+121
-53
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,6 @@ pom.xml.asc
1111
.hg/
1212
*.iml
1313
.idea
14+
/figwheel_server.log
15+
/resources/public/js
1416

project.clj

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,37 @@
44
:license {:name "Eclipse Public License"
55
:url "http://www.eclipse.org/legal/epl-v10.html"}
66
:dependencies [[org.clojure/clojure "1.9.0"]
7+
[org.clojure/clojurescript "1.10.439"]
8+
[figwheel-sidecar "0.5.15"]
79
[org.clojure/test.check "0.10.0-alpha3"]
810
[quil "2.7.1"]
911
[org.clojure/math.combinatorics "0.1.4"]]
12+
:plugins [[lein-cljsbuild "1.1.7"]
13+
[lein-figwheel "0.5.15"]]
1014
:profiles {:dev {:dependencies [[midje "1.9.2"]]}
1115
;; You can add dependencies that apply to `lein midje` below.
1216
;; An example would be changing the logging destination for test runs.
1317
;; Note that Midje itself is in the `dev` profile to support
1418
;; running autotest in the repl.
1519
:midje {}}
16-
:main spacewar.core)
17-
18-
20+
:main spacewar.core
21+
:clean-targets ^{:protect false} [:target-path "resources/public/js"]
22+
:cljsbuild
23+
{:builds [; development build with figwheel hot swap
24+
{:id "development"
25+
:source-paths ["src"]
26+
:figwheel true
27+
:compiler
28+
{:main "spacewar.core"
29+
:output-to "resources/public/js/main.js"
30+
:output-dir "resources/public/js/development"
31+
:asset-path "js/development"}}
32+
; minified and bundled build for deployment
33+
{:id "optimized"
34+
:source-paths ["src"]
35+
:compiler
36+
{:main "spacewar.core"
37+
:output-to "resources/public/js/main.js"
38+
:output-dir "resources/public/js/optimized"
39+
:asset-path "js/optimized"
40+
:optimizations :advanced}}]})

resources/public/index.html

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<title>Space War</title>
5+
</head>
6+
<body>
7+
<canvas id="space-war"></canvas>
8+
<script src="js/main.js"></script>
9+
<script>spacewar.core._main()</script>
10+
</body>
11+
</html>
Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
(ns spacewar.core
2-
(:require [quil.core :as q]
2+
(:require [quil.core :as q #?@(:cljs [:include-macros true])]
33
[quil.middleware :as m]
44
[spacewar.ui.complex :as main-viewer]
55
[spacewar.ui.view-frame :as view-frame]
@@ -16,7 +16,8 @@
1616
[spacewar.game-logic.romulans :as romulans]
1717
[spacewar.util :as util]
1818
[clojure.spec.alpha :as s]
19-
[clojure.java.io :as io]))
19+
[clojure.tools.reader.edn :as edn]
20+
#?(:clj [clojure.java.io :as io])))
2021

2122
(s/def ::update-time number?)
2223
(s/def ::transport-check-time number?)
@@ -64,13 +65,16 @@
6465
:game-over false}))
6566

6667
(defn game-saved? []
67-
(.exists (io/file "spacewar.world")))
68+
#?(:clj (.exists (io/file "spacewar.world"))
69+
:cljs (and (exists? js/localStorage)
70+
(.getItem js/localStorage "spacewar.world"))))
6871

6972
(defn setup []
7073
(let [vmargin 30
7174
hmargin 5
7275
world (if (game-saved?)
73-
(read-string (slurp "spacewar.world"))
76+
#?(:clj (read-string (slurp "spacewar.world"))
77+
:cljs (edn/read-string (.getItem js/localStorage "spacewar.world")))
7478
(make-initial-world))]
7579
(q/frame-rate glc/frame-rate)
7680
(q/color-mode :rgb)
@@ -171,7 +175,9 @@
171175
(conj messages {:text "Game Over!" :duration 10000000})
172176
messages)]
173177
(when game-ending?
174-
(.delete (io/file "spacewar.world")))
178+
#?(:clj (.delete (io/file "spacewar.world"))
179+
:cljs (when (exists? js/localStorage)
180+
(.removeItem js/localStorage "spacewar.world"))))
175181
(assoc world :game-over game-over
176182
:explosions explosions
177183
:messages messages)
@@ -266,7 +272,9 @@
266272
(update-world-per-second world)
267273
world)]
268274
(when (and new-minute? (not (:game-over world)))
269-
(spit "spacewar.world" world))
275+
#?(:clj (spit "spacewar.world" world)
276+
:cljs (when (exists? js/localStorage)
277+
(.setItem js/localStorage "spacewar.world" world))))
270278
(assoc context
271279
:state complex
272280
:world world)))
@@ -279,11 +287,13 @@
279287
(p/draw state))
280288

281289
(declare space-war)
282-
(defn -main [& args]
290+
(defn ^:export -main [& args]
283291

284292
(q/defsketch space-war
285293
:title "Space War"
286-
:size [(- (q/screen-width) 10) (- (q/screen-height) 40)]
294+
:size #?(:clj [(- (q/screen-width) 10) (- (q/screen-height) 40)]
295+
:cljs [(max (- (.-scrollWidth (.-body js/document)) 20) 900)
296+
(max (- (.-innerHeight js/window) 25) 700)])
287297
:setup setup
288298
:update update-state
289299
:draw draw-state

0 commit comments

Comments
 (0)