145 lines
4.7 KiB
Clojure
145 lines
4.7 KiB
Clojure
(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))
|