diff options
Diffstat (limited to 'src/assets/viz/2/quil/middleware.cljc')
-rw-r--r-- | src/assets/viz/2/quil/middleware.cljc | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/src/assets/viz/2/quil/middleware.cljc b/src/assets/viz/2/quil/middleware.cljc new file mode 100644 index 0000000..a8f5672 --- /dev/null +++ b/src/assets/viz/2/quil/middleware.cljc @@ -0,0 +1,144 @@ +(ns ^{:doc "Quil middleware."} + quil.middleware + (:require [quil.middlewares.fun-mode :as fun-mode] + #?(:clj [quil.middlewares.pause-on-error :as pause-on-error]) + [quil.middlewares.navigation-3d :as navigation-3d] + [quil.middlewares.navigation-2d :as navigation-2d] + )) + +(defn ^{:requires-bindings false + :category "Middleware" + :subcategory nil + :ns "quil.middleware" + :added "2.1.0"} + fun-mode + "Introduces function mode. Adds 'update' function which takes current + state and returns new state. Makes all other functions (setup, draw, + mouse-click, etc) state-aware. See wiki for more details." + [options] + (fun-mode/fun-mode options)) + +#?(:clj +(defn ^{:requires-bindings false + :category "Middleware" + :subcategory nil + :ns "quil.middleware" + :added "2.2.0"} + pause-on-error + "Pauses sketch if any of user-provided handlers throws error. + It allows to fix the error on the fly and continue sketch. + May be good alternative to default '500ms pause if exception' + behaviour." + [options] + (pause-on-error/pause-on-error options))) + +(defn ^{:requires-bindings false + :category "Middleware" + :subcategory nil + :ns "quil.middleware" + :added "2.2.0"} + navigation-3d + "Enables navigation in 3D space. Similar to how it is done in + shooters: WASD navigation, space is go up, drag mouse to look around. + This middleware requires fun-mode. + + + Navigation + + * Drag mouse to look around. You can change settings to bind + mouse-moved instead of mouse-dragged to look around. See + customization info below. + + * Keyboard: + * w - go forward + * s - go backward + * a - strafe left + * d - strafe right + * space - go up + * z - go down, can't bind to ctrl, limitation of Processing + + + Customization + + You can customize this middleware by providing map as + :navigation-3d option in defsketch/sketch. Map can have following + optional keys: + + :position - vector of 3 numbers, initial camera position. Default + is the same as in 'camera' function. + + :straight - vector of 3 numbers, direction you'll be looking at. + Default is [0 0 -1] (looking down). + + :up - vector of 3 numbers, 'up' direction. Default is [0 1 0]. + + :pixels-in-360 - number, mouse sensitivity. Defines how many pixels + you need to move/drag you mouse to rotate 360 degrees. + The less the number the more sensitive is mouse. + Default is 1000. + + :step-size - number, number of pixels you move on each key event (wasd). + Default is 20. + + :rotate-on - keyword, either :mouse-dragged or :mouse-moved. Specifies + on which mouse event camera should rotate. Default is + :mouse-dragged. + + + Accessing position information from sketch + + navigation-3d uses fun-mode under the hood so all position-related + information is stored in the state map. It means that you can access in + draw/update/any handler and modify it if you need to. Position + information is a map which is stored under :navigation-3d key in the + state map. Position consists of 3 values: :position, :straight and :up. + See \"Customization\" section above for more details. + + Usage example: + + (q/defsketch my-sketch + ... + :middleware [m/fun-mode m/navigation-3d]) + + See wiki article for more(?) details: + https://github.com/quil/quil/wiki/Navigation-3D" + [options] + (navigation-3d/navigation-3d options)) + +(defn ^{:requires-bindings false + :category "Middleware" + :subcategory nil + :ns "quil.middleware" + :added "2.2.6"} + navigation-2d + "Enables navigation over 2D sketch. Drag mouse to change the center of the + sketch and mouse wheel controls zoom. This middleware requires fun-mode. + + Customization + + You can customize this middleware by providing map as + :navigation-2d option in defsketch/sketch. Map can have following + optional keys: + + :position - vector of 2 numbers, x and y - center of the screen. + Default is width/2, height/2. + + :zoom - number indicating current zoom level. Default is 1. + + Accessing position information from sketch + + navigation-2d uses fun-mode under the hood so all position-related + information is stored in the state map. It means that you can access in + draw/update/any handler and modify it if you need to. Position + information is a map which is stored under :navigation-2d key in the + state map. Position consists of 2 values: :position and :zoom. + See \"Customization\" section above for more details. + + Usage example: + + (q/defsketch my-sketch + ... + :middleware [m/fun-mode m/navigation-2d]) +" + [options] + (navigation-2d/navigation-2d options)) |