Last active
May 4, 2017 19:26
-
-
Save timsgardner/c9ac871bed142cc81326e32fd8ee08c0 to your computer and use it in GitHub Desktop.
example use of roles and keyed hooks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(defn move-towards [obj1, obj2, speed] | |
(with-cmpt obj1 [tr1 Transform] | |
(with-cmpt obj2 [tr2 Transform] | |
(m/faster | |
(let [diff (v3- (.position tr2) (.position tr1))] | |
(set! (.position tr1) | |
(v3+ (.position tr1) | |
(v3* (.normalized diff) | |
(Mathf/Min speed (.magnitude diff)))))))))) | |
(defn move-away-from [obj1, obj2, speed] | |
(with-cmpt obj1 [tr1 Transform] | |
(with-cmpt obj2 [tr2 Transform] | |
(m/faster | |
(let [diff (v3- (.position tr2) (.position tr1))] | |
(if (< (.magnitude diff) 0.1) | |
(do (log "hiii") | |
(set! (.position tr1) | |
(v3+ (.position tr1) (v3 1)))) | |
(set! (.position tr1) | |
(v3- (.position tr1) | |
(v3* (.normalized diff) speed))))))))) | |
;; ============================================================ | |
(defn friend-update [obj k] | |
(when-let [{:keys [::friend ::speed]} (state obj k)] | |
(move-towards obj friend speed))) | |
(defn friend-awake [_ k] | |
(log (str "Waking up friendship at " k "!"))) | |
(def friendship | |
{:state {::friend nil | |
::speed 0.1} | |
:update #'friend-update | |
:awake #'friend-awake}) | |
(defn enemy-update [obj k] | |
(when-let [{:keys [::enemy ::speed]} (state obj k)] | |
(move-away-from obj enemy speed))) | |
(defn enemy-awake [_ k] | |
(log (str "Waking up enemyship at " k "!"))) | |
(def enemyship | |
{:state {::enemy nil | |
::speed 0.1} | |
:update #'enemy-update | |
:awake #'enemy-awake}) | |
;; ============================================================ | |
(def joe-bob | |
(let [x (create-primitive :cube)] | |
(set! (.name x) "joe-bob") | |
x)) | |
(def henry | |
(let [x (create-primitive :sphere)] | |
(set! (.name x) "henry") | |
x)) | |
(def rabia | |
(let [x (create-primitive :capsule)] | |
(set! (.name x) "rabia") | |
x)) | |
;; ============================================================ | |
(role+ rabia ::henry-friendship | |
(-> friendship | |
(assoc-in [:state ::friend] henry) | |
(assoc-in [:state ::speed] 0.4))) | |
(role+ rabia ::joe-bob-friendship | |
(assoc-in friendship [:state ::friend] joe-bob)) | |
(role+ henry ::joe-bob-enemyship | |
(assoc-in enemyship [:state ::enemy] joe-bob)) | |
(role+ joe-bob ::rabia-friendship | |
(assoc-in friendship [:state ::friend] rabia)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment