And now with inertia

This commit is contained in:
simon 2017-07-18 13:49:32 +01:00
parent b3c624eb5c
commit c83b557d41
5 changed files with 28 additions and 17 deletions

View file

@ -1,6 +1,6 @@
(ns swinging-needle-meter.core (ns swinging-needle-meter.core
(:require [reagent.core :as reagent] (:require [reagent.core :as reagent]
[re-frame.core :as re-frame] [re-frame.core :as rf]
[swinging-needle-meter.events] [swinging-needle-meter.events]
[swinging-needle-meter.subs] [swinging-needle-meter.subs]
[swinging-needle-meter.views :as views] [swinging-needle-meter.views :as views]
@ -14,12 +14,20 @@
(enable-console-print!) (enable-console-print!)
(println "dev mode"))) (println "dev mode")))
(defn dispatch-timer-event
[]
(let [now (js/Date.)]
(rf/dispatch [:timer now]))) ;; <-- dispatch used
;; call the dispatching function every tenth of a second
(defonce do-timer (js/setInterval dispatch-timer-event 100))
(defn mount-root [] (defn mount-root []
(re-frame/clear-subscription-cache!) (rf/clear-subscription-cache!)
(reagent/render [views/main-panel] (reagent/render [views/main-panel]
(.getElementById js/document "app"))) (.getElementById js/document "app")))
(defn ^:export init [] (defn ^:export init []
(re-frame/dispatch-sync [:initialize-db]) (rf/dispatch-sync [:initialize-db])
(dev-setup) (dev-setup)
(mount-root)) (mount-root))

View file

@ -8,17 +8,22 @@
(fn [_ _] (fn [_ _]
state/default-state)) state/default-state))
;; The clock ticked. ;; The clock ticked. Implement a mechanical swing.
(re-frame/reg-event-db (re-frame/reg-event-db
:timer :timer
(fn [db _] (fn [db [x value]]
db)) (let [old-value (:old-value db)
target (:value db)
new-value (+ old-value (/ (- target old-value) 10))]
(assoc db :old-value new-value))))
(re-frame/reg-event-db (re-frame/reg-event-db
:set-value :set-value
(fn [db [x value]] (fn [db [x value]]
(js/console.log (str :set-value " " x " " value)) (assoc
(assoc db :value value))) (assoc db :old-value (:value db))
:value
value)))
(re-frame/reg-event-db (re-frame/reg-event-db
:set-setpoint :set-setpoint

View file

@ -5,6 +5,7 @@
(def default-state (def default-state
{:timer (js/Date.) {:timer (js/Date.)
:value 60 :value 60
:old-value 0
:setpoint 75 :setpoint 75
:gradations 5 :gradations 5
:size 70 :size 70

View file

@ -12,6 +12,11 @@
(fn [db] (fn [db]
(:value db))) (:value db)))
(re-frame/reg-sub
:old-value
(fn [db]
(:old-value db)))
(re-frame/reg-sub (re-frame/reg-sub
:setpoint :setpoint
(fn [db] (fn [db]

View file

@ -11,14 +11,6 @@
;; Demo: swinging-needle-meter ;; Demo: swinging-needle-meter
;; ------------------------------------------------------------------------------------ ;; ------------------------------------------------------------------------------------
(defn dispatch-timer-event
[]
(let [now (js/Date.)]
(rf/dispatch [:timer now]))) ;; <-- dispatch used
;; call the dispatching function every tenth of a second
(defonce do-timer (js/setInterval dispatch-timer-event 100))
(defn swinging-needle-demo (defn swinging-needle-demo
[] []
@ -69,7 +61,7 @@
[v-box [v-box
:gap "20px" :gap "20px"
:children [[swinging-needle-meter :children [[swinging-needle-meter
:model @(rf/subscribe [:value]) :model @(rf/subscribe [:old-value])
:setpoint @(rf/subscribe [:setpoint]) :setpoint @(rf/subscribe [:setpoint])
:unit @(rf/subscribe [:unit]) :unit @(rf/subscribe [:unit])
:min-value @(rf/subscribe [:min-val]) :min-value @(rf/subscribe [:min-val])