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

◆ build_wiring()

State::WiringRecord MayaFlux::Nexus::StateEncoder::build_wiring ( const Fabric &  fabric,
uint32_t  id 
)
staticprivate

Definition at line 96 of file Encoder.cpp.

97{
98 const Wiring* w = fabric.wiring_for(id);
99 if (!w)
100 return { .kind = State::WiringKind::Unsupported };
101
102 State::WiringRecord rec;
103 rec.position_fn_name = w->position_fn_name();
104
105 const auto take_times = [&] {
106 if (w->times_count() > 1)
107 rec.times = w->times_count();
108 };
109 const auto take_duration = [&] {
110 if (w->duration()) {
111 rec.duration = w->duration();
112 rec.duration_token = w->m_duration_token;
113 }
114 };
115
116 if (!std::holds_alternative<std::monostate>(w->factory()) || w->event_factory()) {
118 rec.factory_name = w->factory_name();
119
120 } else if (w->has_bind()) {
121 rec.kind = State::WiringKind::Bind;
122 rec.attach_fn_name = w->bind_attach_name();
123 rec.detach_fn_name = w->bind_detach_name();
124 take_duration();
125
126 } else if (!w->move_steps().empty()) {
127 rec.kind = State::WiringKind::MoveTo;
128 std::vector<State::WiringStep> steps;
129 steps.reserve(w->move_steps().size());
130 for (const auto& s : w->move_steps())
131 steps.push_back({ .position = s.position, .delay_seconds = s.delay_seconds });
132 rec.steps = std::move(steps);
133 take_times();
134
135 } else if (!std::holds_alternative<std::monostate>(w->trigger())) {
136 std::visit([&rec](const auto& trigger) {
137 using T = std::decay_t<decltype(trigger)>;
138 if constexpr (std::is_same_v<T, Wiring::KeyTrigger>) {
139 rec.kind = State::WiringKind::Key;
140 rec.key = trigger.key;
141 rec.held = trigger.held;
142 } else if constexpr (std::is_same_v<T, Wiring::MouseTrigger>) {
143 rec.kind = State::WiringKind::Mouse;
144 rec.button = trigger.button;
145 rec.held = trigger.held;
146 } else if constexpr (std::is_same_v<T, Wiring::ScrollTrigger>) {
147 rec.kind = State::WiringKind::Scroll;
148 } else if constexpr (std::is_same_v<T, Wiring::NetworkTrigger>) {
150 } else if constexpr (std::is_same_v<T, Wiring::WindowEventTrigger>) {
152 } else {
154 }
155 },
156 w->trigger());
157
158 } else if (w->interval()) {
159 rec.kind = State::WiringKind::Every;
160 rec.interval = w->interval();
161 rec.interval_token = w->m_metro_token;
162 take_duration();
163 take_times();
164 }
165
166 return rec;
167}

References MayaFlux::Nexus::State::WiringRecord::attach_fn_name, MayaFlux::Nexus::State::Bind, MayaFlux::Nexus::Wiring::bind_attach_name(), MayaFlux::Nexus::Wiring::bind_detach_name(), MayaFlux::Nexus::State::WiringRecord::detach_fn_name, MayaFlux::Nexus::State::WiringRecord::duration, MayaFlux::Nexus::Wiring::duration(), MayaFlux::Nexus::State::WiringRecord::duration_token, MayaFlux::Nexus::Wiring::event_factory(), MayaFlux::Nexus::State::Factory, MayaFlux::Nexus::Wiring::factory(), MayaFlux::Nexus::State::WiringRecord::factory_name, MayaFlux::Nexus::Wiring::factory_name(), MayaFlux::Nexus::Wiring::has_bind(), MayaFlux::Nexus::State::WiringRecord::kind, MayaFlux::Nexus::Wiring::m_duration_token, MayaFlux::Nexus::Wiring::move_steps(), MayaFlux::Nexus::State::MoveTo, MayaFlux::Nexus::State::WiringRecord::position_fn_name, MayaFlux::Nexus::Wiring::position_fn_name(), MayaFlux::Nexus::State::WiringRecord::steps, MayaFlux::Nexus::State::WiringRecord::times, MayaFlux::Nexus::Wiring::times_count(), MayaFlux::Nexus::State::Unsupported, and MayaFlux::Nexus::Fabric::wiring_for().

+ Here is the call graph for this function: