11use crate :: classes:: island_settings:: IslandBuilderSettings ;
22use crate :: math:: bounding_box:: BoundingBox ;
33use crate :: mesh:: island:: { Data , IslandBuilderSettingsTweaks , SettingsTweaks } ;
4+ use crate :: mesh:: trimesh:: TriangleMesh ;
45use crate :: {
56 classes:: utils:: editor_lock,
67 math:: types:: ToVector3 ,
78 mesh:: godot:: { GodotSurfaceArrays , GodotWhitebox } ,
89} ;
910use core:: f32;
10- use std:: thread;
11- use std:: thread:: JoinHandle ;
1211use glam:: Vec3 ;
1312use godot:: classes:: { Engine , ImporterMesh , ResourceLoader } ;
1413use godot:: register:: ConnectHandle ;
@@ -19,7 +18,8 @@ use godot::{
1918 } ,
2019 prelude:: * ,
2120} ;
22- use crate :: mesh:: trimesh:: TriangleMesh ;
21+ use std:: thread;
22+ use std:: thread:: JoinHandle ;
2323
2424/// The node group IslandBuilder nodes should be stored in.
2525pub const GROUP_NAME : & str = "StagToolkit_IslandBuilder" ;
@@ -115,10 +115,10 @@ impl INode3D for IslandBuilder {
115115 }
116116
117117 fn process ( & mut self , _delta : f64 ) {
118- if let Some ( preview_thread) = & self . realtime_preview_thread {
119- if preview_thread. is_finished ( ) {
120- self . wait_for_preview_finish ( ) ; // join preview if it's done
121- }
118+ if let Some ( preview_thread) = & self . realtime_preview_thread
119+ && preview_thread. is_finished ( )
120+ {
121+ self . wait_for_preview_finish ( ) ; // join preview if it's done
122122 }
123123 }
124124}
@@ -219,7 +219,8 @@ impl IslandBuilder {
219219 #[ func]
220220 fn set_realtime_preview ( & mut self , realtime_preview : bool ) {
221221 self . realtime_preview = realtime_preview;
222- self . base_mut ( ) . set_process ( realtime_preview && Engine :: singleton ( ) . is_editor_hint ( ) ) ;
222+ self . base_mut ( )
223+ . set_process ( realtime_preview && Engine :: singleton ( ) . is_editor_hint ( ) ) ;
223224
224225 // Wait for any existing preview to finish before moving on
225226 self . wait_for_preview_finish ( ) ;
@@ -231,7 +232,7 @@ impl IslandBuilder {
231232
232233 fn wait_for_preview_finish ( & mut self ) {
233234 if let Some ( handle) = self . realtime_preview_thread . take ( ) {
234- let data = handle. join ( ) . unwrap ( ) ;
235+ let data = handle. join ( ) . expect ( "realtime preview thread panicked" ) ;
235236 if let Some ( trimesh) = data {
236237 // Fetch previously stored buffer and clear it for use, or create a new one
237238 let buffer_mesh: Gd < ArrayMesh > = match self . realtime_preview_mesh_buffer . take ( ) {
@@ -263,7 +264,12 @@ impl IslandBuilder {
263264 }
264265 }
265266
266- fn apply_preview_mesh ( & mut self , mut mesh_node : Gd < MeshInstance3D > , mut array_mesh : Gd < ArrayMesh > , trimesh : & TriangleMesh ) {
267+ fn apply_preview_mesh (
268+ & mut self ,
269+ mut mesh_node : Gd < MeshInstance3D > ,
270+ mut array_mesh : Gd < ArrayMesh > ,
271+ trimesh : & TriangleMesh ,
272+ ) {
267273 let surface_arrays = GodotSurfaceArrays :: from_trimesh ( trimesh) ;
268274 array_mesh. add_surface_from_arrays (
269275 PrimitiveType :: TRIANGLES ,
0 commit comments