@@ -103,126 +103,84 @@ void CameraComponentWindow::Create(EditorComponent* _editor)
103103 float step = hei + 2 ;
104104 float wid = 120 ;
105105
106+ auto forAllSelectedCameraComponents = [&](auto /* void(nonnull CameraComponent*, wi::gui::EventArgs) */ func) {
107+ return [&](wi::gui::EventArgs args) {
108+ wi::scene::Scene& scene = editor->GetCurrentScene ();
109+ for (auto & x : editor->translator .selected )
110+ {
111+ CameraComponent* camera = scene.cameras .GetComponent (x.entity );
112+ if (camera == nullptr )
113+ continue ;
114+ func (camera, args);
115+ camera->SetDirty ();
116+ }
117+ };
118+ };
119+
106120 farPlaneSlider.Create (100 , 10000 , 5000 , 100000 , " Far Plane: " );
107121 farPlaneSlider.SetTooltip (" Controls the camera's far clip plane, geometry farther than this will be clipped." );
108122 farPlaneSlider.SetSize (XMFLOAT2 (wid, hei));
109123 farPlaneSlider.SetPos (XMFLOAT2 (x, y));
110124 farPlaneSlider.SetValue (editor->GetCurrentEditorScene ().camera .zFarP );
111- farPlaneSlider.OnSlide ([=](wi::gui::EventArgs args) {
112- wi::scene::Scene& scene = editor->GetCurrentScene ();
113- for (auto & x : editor->translator .selected )
114- {
115- CameraComponent* camera = scene.cameras .GetComponent (x.entity );
116- if (camera == nullptr )
117- continue ;
118- camera->zFarP = args.fValue ;
119- camera->SetDirty ();
120- }
121- });
125+ farPlaneSlider.OnSlide (forAllSelectedCameraComponents ([&](auto camera, auto args) {
126+ camera->zFarP = args.fValue ;
127+ }));
122128 AddWidget (&farPlaneSlider);
123129
124130 nearPlaneSlider.Create (0 .01f , 10 , 0 .1f , 10000 , " Near Plane: " );
125131 nearPlaneSlider.SetTooltip (" Controls the camera's near clip plane, geometry closer than this will be clipped." );
126132 nearPlaneSlider.SetSize (XMFLOAT2 (wid, hei));
127133 nearPlaneSlider.SetPos (XMFLOAT2 (x, y += step));
128134 nearPlaneSlider.SetValue (editor->GetCurrentEditorScene ().camera .zNearP );
129- nearPlaneSlider.OnSlide ([=](wi::gui::EventArgs args) {
130- wi::scene::Scene& scene = editor->GetCurrentScene ();
131- for (auto & x : editor->translator .selected )
132- {
133- CameraComponent* camera = scene.cameras .GetComponent (x.entity );
134- if (camera == nullptr )
135- continue ;
136- camera->zNearP = args.fValue ;
137- camera->SetDirty ();
138- }
139- });
135+ nearPlaneSlider.OnSlide (forAllSelectedCameraComponents ([&](auto camera, auto args) {
136+ camera->zNearP = args.fValue ;
137+ }));
140138 AddWidget (&nearPlaneSlider);
141139
142140 fovSlider.Create (1 , 179 , 60 , 10000 , " FOV: " );
143141 fovSlider.SetTooltip (" Controls the camera's top-down field of view (in degrees)" );
144142 fovSlider.SetSize (XMFLOAT2 (wid, hei));
145143 fovSlider.SetPos (XMFLOAT2 (x, y += step));
146144 fovSlider.SetValue (editor->GetCurrentEditorScene ().camera .fov / XM_PI * 180 .f );
147- fovSlider.OnSlide ([=](wi::gui::EventArgs args) {
148- wi::scene::Scene& scene = editor->GetCurrentScene ();
149- for (auto & x : editor->translator .selected )
150- {
151- CameraComponent* camera = scene.cameras .GetComponent (x.entity );
152- if (camera == nullptr )
153- continue ;
154- camera->fov = args.fValue / 180 .f * XM_PI ;
155- camera->SetDirty ();
156- }
157- });
145+ fovSlider.OnSlide (forAllSelectedCameraComponents ([&](auto camera, auto args) {
146+ camera->fov = args.fValue / 180 .f * XM_PI ;
147+ }));
158148 AddWidget (&fovSlider);
159149
160150 focalLengthSlider.Create (0 .001f , 100 , 1 , 10000 , " Focal Length: " );
161151 focalLengthSlider.SetTooltip (" Controls the depth of field effect's focus distance" );
162152 focalLengthSlider.SetSize (XMFLOAT2 (wid, hei));
163153 focalLengthSlider.SetPos (XMFLOAT2 (x, y += step));
164- focalLengthSlider.OnSlide ([=](wi::gui::EventArgs args) {
165- wi::scene::Scene& scene = editor->GetCurrentScene ();
166- for (auto & x : editor->translator .selected )
167- {
168- CameraComponent* camera = scene.cameras .GetComponent (x.entity );
169- if (camera == nullptr )
170- continue ;
171- camera->focal_length = args.fValue ;
172- camera->SetDirty ();
173- }
174- });
154+ focalLengthSlider.OnSlide (forAllSelectedCameraComponents ([&](auto camera, auto args) {
155+ camera->focal_length = args.fValue ;
156+ }));
175157 AddWidget (&focalLengthSlider);
176158
177159 apertureSizeSlider.Create (0 , 1 , 0 , 10000 , " Aperture Size: " );
178160 apertureSizeSlider.SetTooltip (" Controls the depth of field effect's strength" );
179161 apertureSizeSlider.SetSize (XMFLOAT2 (wid, hei));
180162 apertureSizeSlider.SetPos (XMFLOAT2 (x, y += step));
181- apertureSizeSlider.OnSlide ([=](wi::gui::EventArgs args) {
182- wi::scene::Scene& scene = editor->GetCurrentScene ();
183- for (auto & x : editor->translator .selected )
184- {
185- CameraComponent* camera = scene.cameras .GetComponent (x.entity );
186- if (camera == nullptr )
187- continue ;
188- camera->aperture_size = args.fValue ;
189- camera->SetDirty ();
190- }
191- });
163+ apertureSizeSlider.OnSlide (forAllSelectedCameraComponents ([&](auto camera, auto args) {
164+ camera->aperture_size = args.fValue ;
165+ }));
192166 AddWidget (&apertureSizeSlider);
193167
194168 apertureShapeXSlider.Create (0 , 2 , 1 , 10000 , " Aperture Shape X: " );
195169 apertureShapeXSlider.SetTooltip (" Controls the depth of field effect's bokeh shape" );
196170 apertureShapeXSlider.SetSize (XMFLOAT2 (wid, hei));
197171 apertureShapeXSlider.SetPos (XMFLOAT2 (x, y += step));
198- apertureShapeXSlider.OnSlide ([=](wi::gui::EventArgs args) {
199- wi::scene::Scene& scene = editor->GetCurrentScene ();
200- for (auto & x : editor->translator .selected )
201- {
202- CameraComponent* camera = scene.cameras .GetComponent (x.entity );
203- if (camera == nullptr )
204- continue ;
205- camera->aperture_shape .x = args.fValue ;
206- camera->SetDirty ();
207- }
208- });
172+ apertureShapeXSlider.OnSlide (forAllSelectedCameraComponents ([&](auto camera, auto args) {
173+ camera->aperture_shape .x = args.fValue ;
174+ }));
209175 AddWidget (&apertureShapeXSlider);
210176
211177 apertureShapeYSlider.Create (0 , 2 , 1 , 10000 , " Aperture Shape Y: " );
212178 apertureShapeYSlider.SetTooltip (" Controls the depth of field effect's bokeh shape" );
213179 apertureShapeYSlider.SetSize (XMFLOAT2 (wid, hei));
214180 apertureShapeYSlider.SetPos (XMFLOAT2 (x, y += step));
215- apertureShapeYSlider.OnSlide ([=](wi::gui::EventArgs args) {
216- wi::scene::Scene& scene = editor->GetCurrentScene ();
217- for (auto & x : editor->translator .selected )
218- {
219- CameraComponent* camera = scene.cameras .GetComponent (x.entity );
220- if (camera == nullptr )
221- continue ;
222- camera->aperture_shape .y = args.fValue ;
223- camera->SetDirty ();
224- }
225- });
181+ apertureShapeYSlider.OnSlide (forAllSelectedCameraComponents ([&](auto camera, auto args) {
182+ camera->aperture_shape .y = args.fValue ;
183+ }));
226184 AddWidget (&apertureShapeYSlider);
227185
228186 renderButton.Create (" RenderToTexture" );
@@ -265,49 +223,23 @@ void CameraComponentWindow::Create(EditorComponent* _editor)
265223
266224 resolutionXSlider.Create (128 , 2048 , 256 , 2048 - 128 , " Render Width: " );
267225 resolutionXSlider.SetTooltip (" Set the render resolution Width" );
268- resolutionXSlider.OnSlide ([=](wi::gui::EventArgs args) {
269- wi::scene::Scene& scene = editor->GetCurrentScene ();
270- for (auto & x : editor->translator .selected )
271- {
272- CameraComponent* camera = scene.cameras .GetComponent (x.entity );
273- if (camera == nullptr )
274- continue ;
275- camera->render_to_texture .resolution .x = (uint32_t )args.iValue ;
276- camera->SetDirty ();
277- }
278- });
226+ resolutionXSlider.OnSlide (forAllSelectedCameraComponents ([&](auto camera, auto args) {
227+ camera->render_to_texture .resolution .x = (uint32_t )args.iValue ;
228+ }));
279229 AddWidget (&resolutionXSlider);
280230
281231 resolutionYSlider.Create (128 , 2048 , 256 , 2048 - 128 , " Render Height: " );
282232 resolutionYSlider.SetTooltip (" Set the render resolution Height" );
283- resolutionYSlider.OnSlide ([=](wi::gui::EventArgs args) {
284- wi::scene::Scene& scene = editor->GetCurrentScene ();
285- for (auto & x : editor->translator .selected )
286- {
287- CameraComponent* camera = scene.cameras .GetComponent (x.entity );
288- if (camera == nullptr )
289- continue ;
290- camera->render_to_texture .resolution .y = (uint32_t )args.iValue ;
291- camera->SetDirty ();
292- }
293- });
233+ resolutionYSlider.OnSlide (forAllSelectedCameraComponents ([&](auto camera, auto args) {
234+ camera->render_to_texture .resolution .y = (uint32_t )args.iValue ;
235+ }));
294236 AddWidget (&resolutionYSlider);
295237
296238 samplecountSlider.Create (1 , 8 , 1 , 7 , " Sample count: " );
297239 samplecountSlider.SetTooltip (" Set the render resolution sample count (MSAA)" );
298- samplecountSlider.OnSlide ([=](wi::gui::EventArgs args) {
299- wi::scene::Scene& scene = editor->GetCurrentScene ();
300- uint32_t samplecount = wi::math::GetNextPowerOfTwo ((uint32_t )args.iValue );
301- samplecountSlider.SetValue ((int )samplecount);
302- for (auto & x : editor->translator .selected )
303- {
304- CameraComponent* camera = scene.cameras .GetComponent (x.entity );
305- if (camera == nullptr )
306- continue ;
307- camera->render_to_texture .sample_count = samplecount;
308- camera->SetDirty ();
309- }
310- });
240+ samplecountSlider.OnSlide (forAllSelectedCameraComponents ([&](auto camera, auto args) {
241+ camera->render_to_texture .sample_count = wi::math::GetNextPowerOfTwo ((uint32_t )args.iValue );
242+ }));
311243 AddWidget (&samplecountSlider);
312244
313245
0 commit comments