Skip to content

Instantly share code, notes, and snippets.

@timsgardner
Created May 19, 2017 01:10
Show Gist options
  • Save timsgardner/f571e17095b86633d11e3b51898e14f0 to your computer and use it in GitHub Desktop.
Save timsgardner/f571e17095b86633d11e3b51898e14f0 to your computer and use it in GitHub Desktop.
(use 'arcadia.core
'arcadia.linear
'[magic.api :as m])
(defmacro fast-cmpt [obj bndgs & body]
(let [objsym (with-meta (gensym "obj_") {:tag 'UnityEngine.GameObject})
dcls (->> bndgs
(partition 2)
(mapcat (fn [[sym t]]
(let [sym2 (with-meta sym {:tag t})]
[sym2 `(.GetComponent ~objsym ~t)]))))]
`(let [~objsym ~obj
~@dcls]
~@body)))
(defmacro sets! [obj & field-vals]
(let [objsym (gensym "obj_")]
`(let [~objsym ~obj]
~@(for [[field val] (partition 2 field-vals)]
`(set! (. ~objsym ~field) ~val))
~objsym)))
(defn patroller-advance [^GameObject obj _]
(fast-cmpt obj [tr Transform]
(m/faster
(let [targ (v3 20)
speed 0.1
diff (v3- targ (.position tr))
dist (.magnitude diff)]
(sets! tr
position (if (= (.position tr) targ)
(v3+ (.position tr)
(v3 speed 0 0))
(v3- (.position tr)
(v3* (.normalized diff)
(Mathf/Min (float speed) dist)))))
(when (<= (float 20) dist)
;; (log "retreating!")
::retreat)))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment