parent
f0e66456b1
commit
fff66a6e54
@ -0,0 +1,7 @@
|
|||||||
|
var CLOSURE_UNCOMPILED_DEFINES = null;
|
||||||
|
if(typeof goog == "undefined") document.write('<script src="out/goog/base.js"></script>');
|
||||||
|
document.write('<script src="out/cljs_deps.js"></script>');
|
||||||
|
document.write('<script>if (typeof goog == "undefined") console.warn("ClojureScript could not load :main, did you forget to specify :asset-path?");</script>');
|
||||||
|
|
||||||
|
document.write("<script>if (typeof goog != \"undefined\") { goog.require(\"figwheel.connect.build_default\"); }</script>");
|
||||||
|
document.write('<script>goog.require("topdown2d.core");</script>');
|
@ -0,0 +1,40 @@
|
|||||||
|
(defproject topdown2d "0.1.0-SNAPSHOT"
|
||||||
|
:description "FIXME: write description"
|
||||||
|
:url "http://example.com/FIXME"
|
||||||
|
:license {:name "Eclipse Public License"
|
||||||
|
:url "http://www.eclipse.org/legal/epl-v10.html"}
|
||||||
|
|
||||||
|
:dependencies [
|
||||||
|
[org.clojure/clojure "1.8.0"]
|
||||||
|
[org.clojure/clojurescript "1.9.521"]
|
||||||
|
]
|
||||||
|
|
||||||
|
:plugins [
|
||||||
|
[lein-cljsbuild "1.1.7"]
|
||||||
|
[lein-figwheel "0.5.14"]
|
||||||
|
]
|
||||||
|
|
||||||
|
:cljsbuild {
|
||||||
|
:builds [{
|
||||||
|
:id "default"
|
||||||
|
:source-paths ["src/cljs"]
|
||||||
|
:figwheel true
|
||||||
|
:compiler {
|
||||||
|
:main topdown2d.core
|
||||||
|
:output-to "resources/public/js/cljsbuild-main.js"
|
||||||
|
:output-dir "resources/public/js/out"
|
||||||
|
:asset-path "js/out"
|
||||||
|
:pretty-print true
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
|
||||||
|
:figwheel {
|
||||||
|
:css-dirs ["resources/css"]
|
||||||
|
}
|
||||||
|
|
||||||
|
;:hooks [leiningen.cljsbuild]
|
||||||
|
|
||||||
|
:main ^:skip-aot topdown2d.core
|
||||||
|
:target-path "target/%s"
|
||||||
|
:profiles {:uberjar {:aot :all}})
|
@ -0,0 +1,10 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<canvas id="gamecanvas" height="400" width="600"></canvas>
|
||||||
|
<script src="js/cljsbuild-main.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -0,0 +1,7 @@
|
|||||||
|
var CLOSURE_UNCOMPILED_DEFINES = null;
|
||||||
|
if(typeof goog == "undefined") document.write('<script src="js/out/goog/base.js"></script>');
|
||||||
|
document.write('<script src="js/out/cljs_deps.js"></script>');
|
||||||
|
document.write('<script>if (typeof goog == "undefined") console.warn("ClojureScript could not load :main, did you forget to specify :asset-path?");</script>');
|
||||||
|
|
||||||
|
document.write("<script>if (typeof goog != \"undefined\") { goog.require(\"figwheel.connect.build_default\"); }</script>");
|
||||||
|
document.write('<script>goog.require("topdown2d.core");</script>');
|
@ -0,0 +1,85 @@
|
|||||||
|
(ns topdown2d.core
|
||||||
|
(:require [topdown2d.demoscene]))
|
||||||
|
|
||||||
|
(def gamestate {
|
||||||
|
:canvas (.getElementById js/document "gamecanvas")
|
||||||
|
:2d (.getContext (.getElementById js/document "gamecanvas") "2d")
|
||||||
|
:timing {
|
||||||
|
:prev 0
|
||||||
|
:now 0
|
||||||
|
:fps 0
|
||||||
|
}
|
||||||
|
:scene :demo
|
||||||
|
:scenes {
|
||||||
|
:demo {
|
||||||
|
:update topdown2d.demoscene/update
|
||||||
|
:draw topdown2d.demoscene/draw
|
||||||
|
:data {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
(aset (:2d gamestate) "font" "10px monospace")
|
||||||
|
|
||||||
|
(def keysdown (atom []))
|
||||||
|
|
||||||
|
(defn keydown? [keycode]
|
||||||
|
(some #{keycode} @keysdown))
|
||||||
|
|
||||||
|
(.addEventListener js/document
|
||||||
|
"keydown"
|
||||||
|
(fn [event]
|
||||||
|
(let [code (symbol (.-code event))]
|
||||||
|
(swap! keysdown #(set (conj %1 code))))))
|
||||||
|
|
||||||
|
(.addEventListener js/document
|
||||||
|
"keyup"
|
||||||
|
(fn [event]
|
||||||
|
(let [code (symbol (.-code event))]
|
||||||
|
(swap! keysdown
|
||||||
|
(fn [coll]
|
||||||
|
(remove #(= % code) coll))))))
|
||||||
|
|
||||||
|
(defn set-timing [state timingkey]
|
||||||
|
(update-in state
|
||||||
|
[:timing timingkey]
|
||||||
|
#(.now js/performance)))
|
||||||
|
|
||||||
|
(defn set-fps [state]
|
||||||
|
(let [newstate (set-timing state :now)
|
||||||
|
now (get-in newstate [:timing :now])
|
||||||
|
prev (get-in newstate [:timing :prev])
|
||||||
|
duration (- now prev)
|
||||||
|
fps (/ 1000 duration)]
|
||||||
|
(update-in newstate [:timing :fps] (fn [] fps))))
|
||||||
|
|
||||||
|
(defn update-scene [gamestate]
|
||||||
|
(let [scenekey (:scene gamestate)
|
||||||
|
scenedata (get-in gamestate [:scenes scenekey])
|
||||||
|
updatefunc (:update scenedata)
|
||||||
|
newdata (updatefunc gamestate scenedata)]
|
||||||
|
(update-in gamestate [:scenes scenekey] (fn [] newdata))))
|
||||||
|
|
||||||
|
(defn update-step [gamestate]
|
||||||
|
(-> gamestate
|
||||||
|
(set-fps)
|
||||||
|
(set-timing :prev)
|
||||||
|
(update-scene)))
|
||||||
|
|
||||||
|
(defn draw-step [gamestate]
|
||||||
|
(.clearRect (:2d gamestate) 0 0 400 600)
|
||||||
|
(.fillText
|
||||||
|
(:2d gamestate)
|
||||||
|
(int (get-in gamestate [:timing :fps]))
|
||||||
|
0 10))
|
||||||
|
|
||||||
|
(defn mainloop [gamestate]
|
||||||
|
(let [newstate (update-step gamestate)]
|
||||||
|
(draw-step newstate)
|
||||||
|
(.setTimeout js/window
|
||||||
|
(fn []
|
||||||
|
(.requestAnimationFrame js/window
|
||||||
|
#(mainloop newstate)))
|
||||||
|
(/ 1000 30))))
|
||||||
|
|
||||||
|
(mainloop gamestate)
|
@ -0,0 +1,7 @@
|
|||||||
|
(ns topdown2d.demoscene)
|
||||||
|
|
||||||
|
(defn update [gamestate scenedata]
|
||||||
|
(.debug js/console "a")
|
||||||
|
scenedata)
|
||||||
|
|
||||||
|
(defn draw [gamestate scenedata])
|
@ -0,0 +1,7 @@
|
|||||||
|
(ns topdown2d.core-test
|
||||||
|
(:require [clojure.test :refer :all]
|
||||||
|
[topdown2d.core :refer :all]))
|
||||||
|
|
||||||
|
(deftest a-test
|
||||||
|
(testing "FIXME, I fail."
|
||||||
|
(is (= 0 1))))
|
Loading…
Reference in new issue