Apply one-to-one parameter from another network.
224{
225 if (source->get_node_count() !=
m_particles.size()) {
227 "Parameter mapping size mismatch: {} particles vs {} source nodes",
229 return;
230 }
231
232 if (param == "force_x") {
234 auto val = source->get_node_output(i);
235 if (val) {
236 m_particles[i].force.x +=
static_cast<float>(*val);
237 }
238 }
239 } else if (param == "force_y") {
241 auto val = source->get_node_output(i);
242 if (val) {
243 m_particles[i].force.y +=
static_cast<float>(*val);
244 }
245 }
246 } else if (param == "force_z") {
248 auto val = source->get_node_output(i);
249 if (val) {
250 m_particles[i].force.z +=
static_cast<float>(*val);
251 }
252 }
253 } else if (param == "color") {
255 auto val = source->get_node_output(i);
256 if (val) {
257 float normalized = glm::clamp(
static_cast<float>(*val), 0.0F, 1.0F);
260 }
261 }
262 } else if (param == "size") {
264 auto val = source->get_node_output(i);
265 if (val) {
266 float size = glm::clamp(static_cast<float>(*val) * 10.0F, 1.0F, 50.0F);
268 }
269 }
270 } else if (param == "mass") {
272 auto val = source->get_node_output(i);
273 if (val) {
274 m_particles[i].mass = std::max(0.1F,
static_cast<float>(*val));
275 }
276 }
277 }
278}
#define MF_WARN(comp, ctx,...)
std::vector< ParticleNode > m_particles
@ NodeProcessing
Node graph processing (Nodes::NodeGraphManager)
@ Nodes
DSP Generator and Filter Nodes, graph pipeline, node management.
std::vector< double > normalized(const std::vector< double > &data, double target_peak)
Normalize single-channel data (non-destructive)