Add instance playback controls to the inspector
This commit is contained in:
parent
52f25e0bb1
commit
1c520e6a68
3 changed files with 94 additions and 0 deletions
39
frontend/test/arthur/events/instance_playback_test.cljs
Normal file
39
frontend/test/arthur/events/instance_playback_test.cljs
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
(ns arthur.events.instance-playback-test
|
||||
(:require [cljs.test :refer [deftest is]]
|
||||
[arthur.domain.clip :as clip]
|
||||
[arthur.events.project :as project]
|
||||
[arthur.footage.store :as store]
|
||||
[re-frame.core :as rf]
|
||||
[re-frame.db :as rf-db]))
|
||||
|
||||
(deftest playback-controls-change-only-the-selected-instance
|
||||
(let [n {:id :wheel :kind :instance :source {:symbol :spin}
|
||||
:span [0 240] :playback {:in 0 :speed 2 :end :stop
|
||||
:tracks {:mouth []}}}
|
||||
document (-> (clip/blank)
|
||||
(assoc-in [:symbols :spin] {:frames 24 :fps 30 :nodes {}})
|
||||
(assoc-in [:symbols :main :nodes :wheel] n)
|
||||
(assoc-in [:symbols :main :nodes :other] (assoc n :id :other)))
|
||||
id (store/install! {:clip document :store {}} "instance-playback-controls")
|
||||
current #(get-in (:clip (store/entry (:clip/current @rf-db/app-db)))
|
||||
[:symbols :main :nodes :wheel])]
|
||||
(reset! rf-db/app-db {:clip/current id :paint/revision 0})
|
||||
(rf/dispatch-sync [::project/instance-playback :main :wheel :mode :loop])
|
||||
(is (= 0 (:frame (clip/placed-frame document :main (current) 24))))
|
||||
(is (= :loop (get-in (current) [:playback :end])))
|
||||
(is (= 2 (get-in (current) [:playback :speed])))
|
||||
(rf/dispatch-sync [::project/instance-playback :main :wheel :in 5])
|
||||
(rf/dispatch-sync [::project/instance-playback :main :wheel :mode :frame])
|
||||
(is (= 5 (:frame (clip/placed-frame document :main (current) 100))))
|
||||
(rf/dispatch-sync [::project/instance-playback :main :wheel :mode :once])
|
||||
(is (nil? (clip/placed-frame document :main (current) 100)))
|
||||
(is (= [0 240] (:span (current))))
|
||||
(is (= {:mouth []} (get-in (current) [:playback :tracks])))
|
||||
(let [before (current)]
|
||||
(doseq [[field value] [[:in -1] [:speed js/Infinity] [:mode :invalid]]]
|
||||
(rf/dispatch-sync [::project/instance-playback :main :wheel field value]))
|
||||
(is (= before (current))))
|
||||
(is (= n (assoc (get-in (:clip (store/entry (:clip/current @rf-db/app-db)))
|
||||
[:symbols :main :nodes :other]) :id :wheel)))
|
||||
(is (= 24 (get-in (:clip (store/entry (:clip/current @rf-db/app-db)))
|
||||
[:symbols :spin :frames])))))
|
||||
Loading…
Add table
Add a link
Reference in a new issue