MayaFlux 0.4.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ bind_fly_preset() [1/2]

MAYAFLUX_API void MayaFlux::bind_fly_preset ( const std::shared_ptr< Core::Window > &  window,
const std::shared_ptr< Buffers::RenderProcessor > &  processor,
const ViewportPresetConfig config = {},
const Kinesis::FlyKeyMap key_map = {},
const std::string &  name = "default" 
)

Bind the fly navigation controller to a window and render processor.

Registers event handlers under the prefix "vp_<name>_". Key assignments default to WASD/QE translation with KP ortho snaps; pass a FlyKeyMap to override any or all bindings. Ortho snap slots set to std::nullopt are silently skipped.

Parameters
windowWindow supplying input events
processorRenderProcessor that receives the ViewTransform source
configCamera/motion tuning parameters
key_mapKey assignments; defaults to WASD/QE + KP snaps
nameUnique prefix for registered events; must be unique per window

Definition at line 72 of file ViewportPreset.cpp.

78{
79 auto& record = s_registry[make_key(window, name)];
80 record.saved_config = window->get_input_config();
81 record.registered_events.clear();
82
83 auto st = std::make_shared<Kinesis::NavigationState>(
84 Kinesis::make_navigation_state(config));
85
86 on_mouse_pressed(window, IO::MouseButtons::Right, [st](double /*x*/, double /*y*/) {
87 st->rmb_held = true;
88 st->first_mouse = true; }, event_name(name, "rmb_dn"));
89
90 on_mouse_released(window, IO::MouseButtons::Right, [st](double /*x*/, double /*y*/) { st->rmb_held = false; }, event_name(name, "rmb_up"));
91
92 on_key_pressed(window, key_map.forward, [st] { st->forward_held = true; }, event_name(name, "fwd_dn"));
93 on_key_released(window, key_map.forward, [st] { st->forward_held = false; }, event_name(name, "fwd_up"));
94 on_key_pressed(window, key_map.back, [st] { st->back_held = true; }, event_name(name, "bck_dn"));
95 on_key_released(window, key_map.back, [st] { st->back_held = false; }, event_name(name, "bck_up"));
96 on_key_pressed(window, key_map.left, [st] { st->left_held = true; }, event_name(name, "lft_dn"));
97 on_key_released(window, key_map.left, [st] { st->left_held = false; }, event_name(name, "lft_up"));
98 on_key_pressed(window, key_map.right, [st] { st->right_held = true; }, event_name(name, "rgt_dn"));
99 on_key_released(window, key_map.right, [st] { st->right_held = false; }, event_name(name, "rgt_up"));
100 on_key_pressed(window, key_map.down, [st] { st->down_held = true; }, event_name(name, "dwn_dn"));
101 on_key_released(window, key_map.down, [st] { st->down_held = false; }, event_name(name, "dwn_up"));
102 on_key_pressed(window, key_map.up, [st] { st->up_held = true; }, event_name(name, "up_dn"));
103 on_key_released(window, key_map.up, [st] { st->up_held = false; }, event_name(name, "up_up"));
104
105 if (key_map.ortho_front)
106 on_key_pressed(window, *key_map.ortho_front, [st] { Kinesis::snap_ortho(*st, 0); }, event_name(name, "kp_front"));
107 if (key_map.ortho_right)
108 on_key_pressed(window, *key_map.ortho_right, [st] { Kinesis::snap_ortho(*st, 1); }, event_name(name, "kp_right"));
109 if (key_map.ortho_top)
110 on_key_pressed(window, *key_map.ortho_top, [st] { Kinesis::snap_ortho(*st, 2); }, event_name(name, "kp_top"));
111 if (key_map.ortho_flip)
112 on_key_pressed(window, *key_map.ortho_flip, [st] { Kinesis::snap_ortho(*st, 3); }, event_name(name, "kp_flip"));
113
114 on_mouse_move(window, [st](double x, double y) {
115 if (!st->rmb_held) {
116 st->first_mouse = true;
117 return;
118 }
119 if (st->first_mouse) {
120 st->last_x = x;
121 st->last_y = y;
122 st->first_mouse = false;
123 return;
124 }
125 Kinesis::apply_mouse_delta(*st,
126 static_cast<float>(x - st->last_x),
127 static_cast<float>(y - st->last_y));
128 st->last_x = x;
129 st->last_y = y; }, event_name(name, "mouse"));
130
131 on_scroll(window, [st](double /*dx*/, double dy) { Kinesis::apply_scroll(*st, static_cast<float>(dy)); }, event_name(name, "scroll"));
132
133 processor->set_view_transform_source(
134 [st, window_weak = std::weak_ptr<Core::Window>(window)]() -> Kinesis::ViewTransform {
135 auto win = window_weak.lock();
136 if (!win) {
137 return {};
138 }
139 const auto& ws = win->get_state();
140 const float aspect = (ws.current_height > 0)
141 ? static_cast<float>(ws.current_width) / static_cast<float>(ws.current_height)
142 : 1.0F;
143 return Kinesis::compute_view_transform(*st, aspect);
144 });
145}
void on_mouse_move(const std::shared_ptr< Core::Window > &window, std::function< void(double, double)> callback, std::string name)
Schedule a mouse movement handler.
Definition Chronie.cpp:217
void on_scroll(const std::shared_ptr< Core::Window > &window, std::function< void(double, double)> callback, std::string name)
Schedule a mouse scroll handler.
Definition Chronie.cpp:250
void on_mouse_pressed(const std::shared_ptr< Core::Window > &window, IO::MouseButtons button, std::function< void(double, double)> callback, std::string name)
Schedule a mouse button press handler.
Definition Chronie.cpp:183
void on_key_released(const std::shared_ptr< Core::Window > &window, IO::Keys key, std::function< void()> callback, std::string name)
Schedule a key release handler.
Definition Chronie.cpp:150
void on_key_pressed(const std::shared_ptr< Core::Window > &window, IO::Keys key, std::function< void()> callback, std::string name)
Schedule a key press handler.
Definition Chronie.cpp:133
std::optional< IO::Keys > ortho_top
Snap to top (+Y) view.
std::optional< IO::Keys > ortho_right
Snap to right (+X) view.
std::optional< IO::Keys > ortho_flip
Flip to opposite view.
std::optional< IO::Keys > ortho_front
Snap to front (+Z) view.

References MayaFlux::Kinesis::apply_mouse_delta(), MayaFlux::Kinesis::apply_scroll(), MayaFlux::Kinesis::FlyKeyMap::back, MayaFlux::Kinesis::compute_view_transform(), MayaFlux::Kinesis::FlyKeyMap::down, MayaFlux::Kinesis::FlyKeyMap::forward, MayaFlux::Kinesis::FlyKeyMap::left, MayaFlux::Kinesis::make_navigation_state(), on_key_pressed(), on_key_released(), on_mouse_move(), on_mouse_pressed(), on_mouse_released(), on_scroll(), MayaFlux::Kinesis::FlyKeyMap::ortho_flip, MayaFlux::Kinesis::FlyKeyMap::ortho_front, MayaFlux::Kinesis::FlyKeyMap::ortho_right, MayaFlux::Kinesis::FlyKeyMap::ortho_top, MayaFlux::IO::Right, MayaFlux::Kinesis::FlyKeyMap::right, and MayaFlux::Kinesis::FlyKeyMap::up.

Referenced by bind_fly_preset(), and bind_viewport_preset().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: