@@ -190,12 +190,19 @@ void TerrainObjectManager::LoadTObjFile(Ogre::String tobj_name)
190
190
{
191
191
for (TObjTree tree : tobj->trees )
192
192
{
193
- this ->ProcessTree (
194
- tree.yaw_from , tree.yaw_to ,
195
- tree.scale_from , tree.scale_to ,
196
- tree.color_map , tree.density_map , tree.tree_mesh , tree.collision_mesh ,
197
- tree.grid_spacing , tree.high_density ,
198
- tree.min_distance , tree.max_distance , mapsizex, mapsizez);
193
+ try
194
+ {
195
+ this ->ProcessTree (
196
+ tree.yaw_from , tree.yaw_to ,
197
+ tree.scale_from , tree.scale_to ,
198
+ tree.color_map , tree.density_map , tree.tree_mesh , tree.collision_mesh ,
199
+ tree.grid_spacing , tree.high_density ,
200
+ tree.min_distance , tree.max_distance , mapsizex, mapsizez);
201
+ }
202
+ catch (...)
203
+ {
204
+ RoR::HandleGenericException (fmt::format (" Error processing 'trees' line (mesh: {}) from TOBJ file {}" , tree.tree_mesh , tobj_name));
205
+ }
199
206
}
200
207
}
201
208
@@ -204,19 +211,33 @@ void TerrainObjectManager::LoadTObjFile(Ogre::String tobj_name)
204
211
{
205
212
for (TObjGrass grass : tobj->grass )
206
213
{
207
- this ->ProcessGrass (
208
- grass.sway_speed , grass.sway_length , grass.sway_distrib , grass.density ,
209
- grass.min_x , grass.min_y , grass.min_h ,
210
- grass.max_x , grass.max_y , grass.max_h ,
211
- grass.material_name , grass.color_map_filename , grass.density_map_filename ,
212
- grass.grow_techniq , grass.technique , grass.range , mapsizex, mapsizez);
214
+ try
215
+ {
216
+ this ->ProcessGrass (
217
+ grass.sway_speed , grass.sway_length , grass.sway_distrib , grass.density ,
218
+ grass.min_x , grass.min_y , grass.min_h ,
219
+ grass.max_x , grass.max_y , grass.max_h ,
220
+ grass.material_name , grass.color_map_filename , grass.density_map_filename ,
221
+ grass.grow_techniq , grass.technique , grass.range , mapsizex, mapsizez);
222
+ }
223
+ catch (...)
224
+ {
225
+ RoR::HandleGenericException (fmt::format (" Error processing 'grass' line (material: {}) from TOBJ file {}" , grass.material_name , tobj_name));
226
+ }
213
227
}
214
228
}
215
229
216
230
// Procedural roads
217
231
for (ProceduralObjectPtr& po : tobj->proc_objects )
218
232
{
219
- m_procedural_manager->addObject (po);
233
+ try
234
+ {
235
+ m_procedural_manager->addObject (po);
236
+ }
237
+ catch (...)
238
+ {
239
+ RoR::HandleGenericException (fmt::format (" Error processing procedural road {} from TOBJ file {}" , po->name , tobj_name));
240
+ }
220
241
}
221
242
222
243
// Vehicles
@@ -249,7 +270,14 @@ void TerrainObjectManager::LoadTObjFile(Ogre::String tobj_name)
249
270
// Entries
250
271
for (TObjEntry entry : tobj->objects )
251
272
{
252
- this ->LoadTerrainObject (entry.odef_name , entry.position , entry.rotation , entry.instance_name , entry.type , entry.rendering_distance );
273
+ try
274
+ {
275
+ this ->LoadTerrainObject (entry.odef_name , entry.position , entry.rotation , entry.instance_name , entry.type , entry.rendering_distance );
276
+ }
277
+ catch (...)
278
+ {
279
+ RoR::HandleGenericException (fmt::format (" Error processing object line (ODEF: {}) from TOBJ file {}" , entry.odef_name , tobj_name));
280
+ }
253
281
}
254
282
255
283
if (App::diag_terrn_log_roads->getBool ())
0 commit comments