MayaFlux 1.0.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 73 of file ViewportPreset.cpp.

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

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: