28 halp_meta(name,
"Scene Switch")
29 halp_meta(category,
"Visuals/3D/Scene")
30 halp_meta(c_name,
"scene_switch")
31 halp_meta(description,
"Select one of four scene inputs by index without blending their contents.")
32 halp_meta(authors,
"ossia team")
35 "https://ossia.io/score-docs/processes/scene-switch.html")
36 halp_meta(uuid,
"7d5c3f8a-2e9b-4a1c-8f6d-5b3e0d9a7c4f")
42 halp_meta(name,
"Scene 0");
43 ossia::scene_spec scene;
48 halp_meta(name,
"Scene 1");
49 ossia::scene_spec scene;
54 halp_meta(name,
"Scene 2");
55 ossia::scene_spec scene;
60 halp_meta(name,
"Scene 3");
61 ossia::scene_spec scene;
65 halp::spinbox_i32<
"Index", halp::irange{0, 3, 0}> index;
69 const ossia::scene_state* m_cached_state{};
70 int64_t m_cached_version{-1};
71 int m_cached_index{-1};
77 halp_meta(name,
"Scene Out");
78 ossia::scene_spec scene;
85 const int idx = inputs.index.value;
86 const ossia::scene_spec* picked =
nullptr;
89 case 0: picked = &inputs.scene0.scene;
break;
90 case 1: picked = &inputs.scene1.scene;
break;
91 case 2: picked = &inputs.scene2.scene;
break;
92 case 3: picked = &inputs.scene3.scene;
break;
93 default: picked = &inputs.scene0.scene;
break;
95 outputs.scene_out.scene = *picked;
100 const auto* s = picked->state.get();
101 const int64_t v = s ? s->version : -1;
102 const bool changed = (idx != m_cached_index) || (s != m_cached_state)
103 || (v != m_cached_version);
104 outputs.scene_out.dirty = (s && changed) ? 0xFF : 0;
105 m_cached_index = idx;
107 m_cached_version = v;