Animate seven stage symbols and bound playback memory
This commit is contained in:
parent
ffb95543a3
commit
39ee37db02
8 changed files with 126 additions and 27 deletions
|
|
@ -21,6 +21,15 @@
|
|||
(is (= [:a :a :a :a :b :b :b :b :b :b :b :b :c :c]
|
||||
(mapv #(ch/value-at c %) (range 0 14))))))
|
||||
|
||||
(deftest linear-vector-keys-interpolate-each-component
|
||||
(let [c (ch/keyed {0 [0.4 0.6], 10 [0.6 0.4]} :linear)
|
||||
frames [0 5 10 5 2]
|
||||
cursor (ch/cursor c)]
|
||||
(is (empty? (ch/problems c)))
|
||||
(is (= [0.5 0.5] (ch/value-at c 5)))
|
||||
(is (= (mapv #(ch/value-at c %) frames)
|
||||
(mapv #(ch/sample! cursor %) frames)))))
|
||||
|
||||
(deftest a-frame-before-the-first-key-reads-the-first-key
|
||||
;; The JS activeKey clamps low, and that is kept: a channel's first key is the
|
||||
;; pose the part starts in. Having NO value is a different question — it is a
|
||||
|
|
|
|||
|
|
@ -3,7 +3,8 @@
|
|||
[arthur.demo.stage :as stage]
|
||||
[arthur.domain.channel :as ch]
|
||||
[arthur.domain.clip :as clip]
|
||||
[arthur.domain.leaf :as leaf]))
|
||||
[arthur.domain.leaf :as leaf]
|
||||
[arthur.domain.node :as node]))
|
||||
|
||||
(def source
|
||||
{:name "source" :fps 30 :width 320 :height 200
|
||||
|
|
@ -45,7 +46,28 @@
|
|||
(is (= #{:main :sym/face-8625} (set (keys (:timelines document)))))
|
||||
(is (= :sym/face-8625 (get-in document [:timelines :main :nodes :left :of])))
|
||||
(is (= :sym/face-8625 (get-in document [:timelines :main :nodes :right :of])))
|
||||
(is (= 7 (count (filter #(= :symbol (:kind %))
|
||||
(vals (get-in document [:timelines :main :nodes]))))))
|
||||
(is (= [48 280] (get-in document [:timelines :main :nodes :right :span])))
|
||||
(let [scale (get-in document [:timelines :main :nodes :left
|
||||
:channels [:xform :scale]])
|
||||
anchor (get-in document [:timelines :main :nodes :left
|
||||
:channels [:xform :anchor] :value])
|
||||
pos (get-in document [:timelines :main :nodes :left
|
||||
:channels [:xform :pos]])
|
||||
start-pos (ch/value-at pos 0)]
|
||||
(is (= [160 100] anchor) "the source center becomes a stored pivot")
|
||||
(is (= [-120 -60] start-pos))
|
||||
(is (not= start-pos (ch/value-at pos 40)) "the face drifts during playback")
|
||||
(is (= [0.4 0.4] (ch/value-at scale 0)))
|
||||
(is (= [0.56 0.56] (ch/value-at scale 12)))
|
||||
(is (= [0.52 0.52] (ch/value-at scale 48)))
|
||||
(doseq [f [0 12 48]]
|
||||
(let [m (node/local! (node/mat) start-pos 0 (ch/value-at scale f) [0 0] anchor)
|
||||
out (js/Float64Array. 2)]
|
||||
(node/apply-pt! out 0 m 160 100)
|
||||
(is (= [40 40] [(aget out 0) (aget out 1)])
|
||||
"the face center stays put while it scales"))))
|
||||
(is (= :right (get-in document [:timelines :main :nodes :voice-right :linked-to])))
|
||||
(is (= [48 260] (get-in document [:timelines :main :nodes :voice-right :span])))
|
||||
(is (= 0.5 (ch/value-at
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue