Add more assertions to core.clj
This commit is contained in:
@@ -466,13 +466,11 @@ via the screen map.
|
|||||||
(println (:distance screen)) ; the end distance between fingers
|
(println (:distance screen)) ; the end distance between fingers
|
||||||
entities))"
|
entities))"
|
||||||
[n & options]
|
[n & options]
|
||||||
; make sure the options are valid
|
(let [s (format "Unexpected value in (defscreen %s). You need to give it
|
||||||
(let [s (format "Unexpected value in (defscreen %s). Make sure you give it
|
|
||||||
keywords and functions in pairs."
|
keywords and functions in pairs."
|
||||||
(str n))]
|
(str n))]
|
||||||
(assert (even? (count options)) s)
|
(assert (even? (count options)) s)
|
||||||
(assert (= 0 (count (remove keyword? (keys (apply hash-map options))))) s))
|
(assert (= 0 (count (remove keyword? (keys (apply hash-map options))))) s))
|
||||||
; return form calling defscreen*
|
|
||||||
`(let [fn-syms# (->> (for [[k# v#] ~(apply hash-map options)]
|
`(let [fn-syms# (->> (for [[k# v#] ~(apply hash-map options)]
|
||||||
[k# (intern *ns* (symbol (str '~n "-" (name k#))) v#)])
|
[k# (intern *ns* (symbol (str '~n "-" (name k#))) v#)])
|
||||||
flatten
|
flatten
|
||||||
@@ -506,6 +504,8 @@ keywords and functions in pairs."
|
|||||||
|
|
||||||
(set-screen! my-game main-screen text-screen)"
|
(set-screen! my-game main-screen text-screen)"
|
||||||
[^Game game-object & screen-objects]
|
[^Game game-object & screen-objects]
|
||||||
|
(assert (isa? (type game-object) Game) "The first argument in set-screen!
|
||||||
|
must be the defgame object.")
|
||||||
(let [run-fn! (fn [k & args]
|
(let [run-fn! (fn [k & args]
|
||||||
(doseq [screen screen-objects]
|
(doseq [screen screen-objects]
|
||||||
(apply (get screen k) args)))]
|
(apply (get screen k) args)))]
|
||||||
@@ -547,8 +547,13 @@ is the atom storing the screen map behind the scenes. Returns the updated
|
|||||||
`screen` map.
|
`screen` map.
|
||||||
|
|
||||||
(update! screen :renderer (stage))"
|
(update! screen :renderer (stage))"
|
||||||
[{:keys [update-fn!] :as screen} & args]
|
[screen & args]
|
||||||
(update-fn! assoc args))
|
(assert (some? (:update-fn! screen)) "The first argument in update! must be
|
||||||
|
the screen map.")
|
||||||
|
(assert (even? (count args)) "You need to give update! your screen followed by
|
||||||
|
pairs of values, such as
|
||||||
|
(update! screen :renderer (stage) :camera (orthographic)).")
|
||||||
|
((:update-fn! screen) assoc args))
|
||||||
|
|
||||||
(defn run!
|
(defn run!
|
||||||
"Runs a function defined in another screen. You may optionally pass a series
|
"Runs a function defined in another screen. You may optionally pass a series
|
||||||
@@ -557,6 +562,10 @@ of key-value pairs, which will be given to the function via its screen map.
|
|||||||
(run! my-other-screen :on-show)
|
(run! my-other-screen :on-show)
|
||||||
(run! my-other-screen :on-change-color :color :blue)"
|
(run! my-other-screen :on-change-color :color :blue)"
|
||||||
[screen-object fn-name & options]
|
[screen-object fn-name & options]
|
||||||
|
(assert (some? (:screen screen-object)) "The first argument in run! must be
|
||||||
|
a defscreen object, such as main-screen.")
|
||||||
|
(assert (keyword? fn-name) "The second argument in run! must be a keyword.")
|
||||||
|
(assert (even? (count options)) "Unexpected argument count in run!.")
|
||||||
(let [execute-fn! (-> screen-object :screen deref :execute-fn!)
|
(let [execute-fn! (-> screen-object :screen deref :execute-fn!)
|
||||||
screen-fn (-> screen-object :options (get fn-name))]
|
screen-fn (-> screen-object :options (get fn-name))]
|
||||||
(apply execute-fn! screen-fn options)
|
(apply execute-fn! screen-fn options)
|
||||||
|
|||||||
Reference in New Issue
Block a user