Skip to content

Instantly share code, notes, and snippets.

@timsgardner
Last active May 4, 2017 19:26
Show Gist options
  • Save timsgardner/c9ac871bed142cc81326e32fd8ee08c0 to your computer and use it in GitHub Desktop.
Save timsgardner/c9ac871bed142cc81326e32fd8ee08c0 to your computer and use it in GitHub Desktop.
example use of roles and keyed hooks
(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