summaryrefslogtreecommitdiff
path: root/src/assets/viz/2/quil/middleware.cljc
diff options
context:
space:
mode:
authorBrian Picciano <mediocregopher@gmail.com>2021-01-21 17:22:53 -0700
committerBrian Picciano <mediocregopher@gmail.com>2021-01-21 17:22:53 -0700
commitbcf9b230be6d74c71567fd0771b31d47d8dd39c7 (patch)
tree2d0fc16142d55bbd5876ac6b8174c2857883b40e /src/assets/viz/2/quil/middleware.cljc
parentd57fd70640948cf20eeb41b56e8d4e23e616cec0 (diff)
build the blog with nix
Diffstat (limited to 'src/assets/viz/2/quil/middleware.cljc')
-rw-r--r--src/assets/viz/2/quil/middleware.cljc144
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))