@@ -16,6 +16,7 @@ namespace gf {
1616 void BasicScene::set_surface_size (Vec2I size)
1717 {
1818 m_surface_size = size;
19+ on_resize (size);
1920 }
2021
2122 Vec2I BasicScene::surface_size () const
@@ -110,11 +111,15 @@ namespace gf {
110111 do_render (recorder);
111112 }
112113
113- void BasicScene::render_part (RenderRecorder& recorder, ScenePart& part )
114+ void BasicScene::render_part_start (RenderRecorder& recorder, Camera& camera )
114115 {
115- part.camera .update (m_surface_size);
116- recorder.update_view (part.camera .compute_view_matrix (), part.camera .compute_viewport (m_surface_size));
117- part.entities .render (recorder);
116+ camera.update (m_surface_size);
117+ recorder.update_view (camera.compute_view_matrix (), camera.compute_viewport (m_surface_size));
118+ }
119+
120+ void BasicScene::on_resize ([[maybe_unused]] Vec2I surface_size)
121+ {
122+ // do nothing by default
118123 }
119124
120125 void BasicScene::on_rank_change ([[maybe_unused]] SceneRank old_rank, [[maybe_unused]] SceneRank new_rank)
@@ -174,18 +179,18 @@ namespace gf {
174179
175180 Scene::Scene ()
176181 {
177- m_world. camera .type = CameraType::Extend;
178- m_hud. camera .type = CameraType::Window;
182+ m_world_camera .type = CameraType::Extend;
183+ m_hud_camera .type = CameraType::Window;
179184 }
180185
181186 void Scene::set_world_center (Vec2F center)
182187 {
183- m_world. camera .center = center;
188+ m_world_camera .center = center;
184189 }
185190
186191 void Scene::set_world_size (Vec2F size)
187192 {
188- m_world. camera .size = size;
193+ m_world_camera .size = size;
189194 }
190195
191196 void Scene::add_model (Model* model)
@@ -195,39 +200,56 @@ namespace gf {
195200
196201 void Scene::add_world_entity (Entity* entity)
197202 {
198- m_world.entities .add_entity (entity);
203+ if (entity != nullptr ) {
204+ m_world_entities.push_back (entity);
205+ }
199206 }
200207
201- void Scene::add_hud_entity (Entity * entity)
208+ void Scene::add_hud_entity (HudEntity * entity)
202209 {
203- m_hud.entities .add_entity (entity);
210+ if (entity != nullptr ) {
211+ m_hud_entities.push_back (entity);
212+ }
204213 }
205214
206215 Vec2F Scene::position_to_world_location (Vec2I position)
207216 {
208- return m_world. camera .position_to_location (position, surface_size ());
217+ return m_world_camera .position_to_location (position, surface_size ());
209218 }
210219
211220 Vec2I Scene::world_location_to_position (Vec2F location)
212221 {
213- return m_world. camera .location_to_position (location, surface_size ());
222+ return m_world_camera .location_to_position (location, surface_size ());
214223 }
215224
216225 void Scene::update_entities (Time time)
217226 {
218227 m_models.update (time);
219- m_world.entities .update (time);
220- m_hud.entities .update (time);
228+
229+ for (Entity* entity : m_world_entities) {
230+ entity->update (time);
231+ }
232+
233+ for (HudEntity* entity : m_hud_entities) {
234+ entity->update (time);
235+ }
221236 }
222237
223238 void Scene::render_entities (RenderRecorder& recorder)
224239 {
225- if (!m_world. entities .empty ()) {
226- render_part (recorder, m_world );
240+ if (!m_world_entities .empty ()) {
241+ render_part (recorder, m_world_entities, m_world_camera );
227242 }
228243
229- if (!m_hud.entities .empty ()) {
230- render_part (recorder, m_hud);
244+ if (!m_hud_entities.empty ()) {
245+ render_part (recorder, m_hud_entities, m_hud_camera);
246+ }
247+ }
248+
249+ void Scene::on_resize (Vec2I surface_size)
250+ {
251+ for (HudEntity* entity : m_hud_entities) {
252+ entity->resize (surface_size);
231253 }
232254 }
233255
0 commit comments