Created
March 11, 2015 20:35
-
-
Save selfsame/ae16824a8de0b5d91f48 to your computer and use it in GitHub Desktop.
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
(defmacro deftween [sym props getter valuer & setter] | |
(let [[start duration value target relative ratio uid] props | |
dot-duration (symbol (str "." duration)) | |
dot-start (symbol (str "." start)) | |
dot-value (symbol (str "." value)) | |
[_ [this] get-more] getter | |
[_ [this-v] value-more] valuer | |
set-more (if (first setter) (first (drop 2 (first setter))) (list 'set! get-more value-more))] | |
`(~'arcadia.core/defcomponent ~sym ~props | |
(~'Awake [~this] | |
(~'set! (~dot-duration ~this) (float 5.0)) | |
(~'set! (~dot-start ~this) (~'UnityEngine.Time/time)) | |
(~'set! (~dot-value ~this) ~get-more)) | |
(~'Update [~this-v] | |
;(set! ~get-more ~value-more) | |
(~'set! (~'.ratio ~this-v) (float (~'/ (~'- (~'UnityEngine.Time/time) ~start) ~duration)) ) | |
(~'if (~'> (~'- (~'UnityEngine.Time/time) ~start) ~duration) | |
(~'do (~'finish (~'.uid ~this-v) (~'.gameObject ~this-v)) | |
) | |
~set-more) | |
)))) | |
;(~'. ~'UnityEngine.Component (~'Destroy ~this-v)) | |
(deftween t-position [^float start ^float duration ^Vector3 value ^Vector3 target ^boolean relative ^float ratio ^int uid] | |
(-get [this] (.position (.transform this))) | |
(-value [this] (Vector3/Lerp value target | |
(/ (- (UnityEngine.Time/time) start) duration)))) | |
(deftween t-scale [^float start ^float duration ^Vector3 value ^Vector3 target ^boolean _ ^float ratio ^int uid] | |
(-get [this] (.localScale (.transform this))) | |
(-value [this] (Vector3/Lerp value target | |
(/ (- (UnityEngine.Time/time) start) duration)))) | |
(deftween t-material-color [^float start ^float duration ^Color value ^Color target ^boolean _ ^float ratio ^int uid] | |
(-get [this] (.color (.material (.GetComponent this UnityEngine.Renderer)))) | |
(-value [this] (Color/Lerp value target | |
(/ (- (UnityEngine.Time/time) start) duration)))) | |
(deftween t-material-texture-offset [^float start ^float duration ^Vector2 value ^Vector2 target ^boolean _^float ratio ^int uid] | |
(-get [this] (.GetTextureOffset (.material (.GetComponent this UnityEngine.Renderer) "_MainTex"))) | |
(-value [this] ) | |
(-set [this] (.SetTextureOffset (.material (.GetComponent this UnityEngine.Renderer)) | |
"_MainTex" | |
(Vector2/Lerp value target | |
(/ (- (UnityEngine.Time/time) start) duration))))) | |
(def UID (atom 0)) | |
(def REGISTRY (atom {})) | |
(defn finish [uid c] | |
(when-let [f (get @REGISTRY uid)] | |
(swap! REGISTRY dissoc uid) | |
(f c))) | |
(defn make | |
([tcomp go duration target] | |
(let [pre-c (.GetComponent go tcomp) | |
c (or pre-c (add-component go tcomp))] | |
(when pre-c (set! (.value c) (.target c))) | |
(set! (.uid c) (int (swap! UID inc))) | |
(set! (.start c) (float (UnityEngine.Time/time))) | |
(set! (.duration c) duration) | |
(set! (.duration c) duration) | |
(set! (.target c) target) c)) | |
([tcomp go duration target callback] | |
(let [pre-c (.GetComponent go tcomp) | |
c (or pre-c (add-component go tcomp)) | |
uid (int (swap! UID inc))] | |
(when pre-c (set! (.value c) (.target c))) | |
(set! (.uid c) uid) | |
(set! (.start c) (float (UnityEngine.Time/time))) | |
(set! (.duration c) duration) | |
(set! (.target c) target) | |
(swap! REGISTRY conj {uid callback}) c))) | |
(defn pus [go] (make t-position go (float (+ 0.3 (rand 0.5))) (V+ (->v3 go) (Vector3. (rand) (rand) (rand))) pus)) | |
(defn culur [go] (make t-material-color go (float (rand 7)) (color (rand 1) (rand 1) (rand 1)) culur)) | |
(defn scule [go] (make t-scale go (float (rand 2)) (V* (Vector3. 1 1 1) (+ 1 (rand 3))) scule)) | |
(defn test-tweens [dim] | |
(clear-cloned) | |
(destroy! (find-name "trash")) | |
(def trash (create-primitive :sphere)) | |
(set! (.name trash) "trash") | |
(add-component trash t-position) | |
(add-component trash t-scale) | |
(add-component trash t-material-color) | |
(doall (for [x (range dim) y (range dim)] | |
(let [n (clone! trash (v* [x 0 y] 2))] | |
(pus n) | |
(scule n) | |
(culur n) | |
)))) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment