On Friday, October 24, 2014 10:42:37 AM UTC-4, Kasper Jordaens wrote:
>
> Hey,
>
> I've been experimenting with newtonian, I love it, but I have a simple
> question, because I'm stuck
>
> after adding some emitters
>
> [#newtonian.corporum.ParticleEmitter{:position
> #newtonian.utils.Vector2D{:x 23.0, :y 280.0}, :velocity
> #newtonian.utils.Vector2D{:x 0.0, :y 10.0}, :size 8, :life -1, :spread
> 0.09817477042468103, :emission-rate 4}
> #newtonian.corporum.ParticleEmitter{:position #newtonian.utils.Vector2D{:x
> 200.0, :y 280.0}, :velocity #newtonian.utils.Vector2D{:x 0.0, :y 10.0},
> :size 8, :life -1, :spread 0.09817477042468103, :emission-rate 4}]
>
>
> I want to dynamically change them but this seems to be inaccessible as an
> atom?
>
> I can get to individual objects like
>
> (get (nth @newt/emitters 0) :position) ==> #newtonian.utils.Vector2D{:x
> 23.0, :y 280.0}
>
>
> but how can I swap the atom at Vector2D?
>
>
> (swap! (get (nth @newt/emitters 0) :position) :x 200) ==> java.lang.
> ClassCastException: newtonian.utils.Vector2D cannot be cast to clojure.
> lang.Atom core.clj:2233 clojure.core/swap!
>
>
What you want here is update-in. Try
(swap! newt update-in [:emitters 0 :position] assoc :x 200)
assuming that @newt is a map with an :emitters key. I'm not familiar with
the library and I'm not even sure what kind of object could be in the atom
newt that @newt/emitters makes sense, but when you want to "change" a thing
buried deep in a nested associative data structure the usual tool for that
is update-in.
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.