@@ -5,11 +5,12 @@ use crate::{
5
5
use anyhow:: Result ;
6
6
use bevy_ecs:: { Res , Resource , Resources } ;
7
7
use crossbeam_channel:: TryRecvError ;
8
+ use parking_lot:: RwLock ;
8
9
use std:: {
9
10
collections:: { HashMap , HashSet } ,
10
11
env, fs, io,
11
12
path:: { Path , PathBuf } ,
12
- sync:: { Arc , RwLock } ,
13
+ sync:: Arc ,
13
14
thread,
14
15
} ;
15
16
use thiserror:: Error ;
@@ -107,7 +108,7 @@ impl AssetServer {
107
108
where
108
109
T : AssetLoadRequestHandler ,
109
110
{
110
- let mut asset_handlers = self . asset_handlers . write ( ) . unwrap ( ) ;
111
+ let mut asset_handlers = self . asset_handlers . write ( ) ;
111
112
let handler_index = asset_handlers. len ( ) ;
112
113
for extension in asset_handler. extensions ( ) . iter ( ) {
113
114
self . extension_to_handler_index
@@ -140,14 +141,13 @@ impl AssetServer {
140
141
let root_path = self . get_root_path ( ) ?;
141
142
let asset_folder = root_path. join ( path) ;
142
143
let handle_ids = self . load_assets_in_folder_recursive ( & asset_folder) ?;
143
- self . asset_folders . write ( ) . unwrap ( ) . push ( asset_folder) ;
144
+ self . asset_folders . write ( ) . push ( asset_folder) ;
144
145
Ok ( handle_ids)
145
146
}
146
147
147
148
pub fn get_handle < T , P : AsRef < Path > > ( & self , path : P ) -> Option < Handle < T > > {
148
149
self . asset_info_paths
149
150
. read ( )
150
- . unwrap ( )
151
151
. get ( path. as_ref ( ) )
152
152
. map ( |handle_id| Handle :: from ( * handle_id) )
153
153
}
@@ -170,11 +170,11 @@ impl AssetServer {
170
170
171
171
#[ cfg( feature = "filesystem_watcher" ) ]
172
172
pub fn watch_for_changes ( & self ) -> Result < ( ) , AssetServerError > {
173
- let mut filesystem_watcher = self . filesystem_watcher . write ( ) . unwrap ( ) ;
173
+ let mut filesystem_watcher = self . filesystem_watcher . write ( ) ;
174
174
175
175
let _ = filesystem_watcher. get_or_insert_with ( FilesystemWatcher :: default) ;
176
176
// watch current files
177
- let asset_info_paths = self . asset_info_paths . read ( ) . unwrap ( ) ;
177
+ let asset_info_paths = self . asset_info_paths . read ( ) ;
178
178
for asset_path in asset_info_paths. keys ( ) {
179
179
Self :: watch_path_for_changes ( & mut filesystem_watcher, asset_path) ?;
180
180
}
@@ -187,9 +187,7 @@ impl AssetServer {
187
187
use notify:: event:: { Event , EventKind , ModifyKind } ;
188
188
let mut changed = HashSet :: new ( ) ;
189
189
190
- while let Some ( filesystem_watcher) =
191
- asset_server. filesystem_watcher . read ( ) . unwrap ( ) . as_ref ( )
192
- {
190
+ while let Some ( filesystem_watcher) = asset_server. filesystem_watcher . read ( ) . as_ref ( ) {
193
191
let result = match filesystem_watcher. receiver . try_recv ( ) {
194
192
Ok ( result) => result,
195
193
Err ( TryRecvError :: Empty ) => {
@@ -280,8 +278,8 @@ impl AssetServer {
280
278
) {
281
279
let mut new_version = 0 ;
282
280
let handle_id = {
283
- let mut asset_info = self . asset_info . write ( ) . unwrap ( ) ;
284
- let mut asset_info_paths = self . asset_info_paths . write ( ) . unwrap ( ) ;
281
+ let mut asset_info = self . asset_info . write ( ) ;
282
+ let mut asset_info_paths = self . asset_info_paths . write ( ) ;
285
283
if let Some ( asset_info) = asset_info_paths
286
284
. get ( path)
287
285
. and_then ( |handle_id| asset_info. get_mut ( & handle_id) )
@@ -319,7 +317,7 @@ impl AssetServer {
319
317
// TODO: watching each asset explicitly is a simpler implementation, its possible it would be more efficient to watch
320
318
// folders instead (when possible)
321
319
#[ cfg( feature = "filesystem_watcher" ) ]
322
- Self :: watch_path_for_changes ( & mut self . filesystem_watcher . write ( ) . unwrap ( ) , path) ?;
320
+ Self :: watch_path_for_changes ( & mut self . filesystem_watcher . write ( ) , path) ?;
323
321
Ok ( handle_id)
324
322
} else {
325
323
Err ( AssetServerError :: MissingAssetHandler )
@@ -330,7 +328,7 @@ impl AssetServer {
330
328
}
331
329
332
330
pub fn set_load_state ( & self , handle_id : HandleId , load_state : LoadState ) {
333
- if let Some ( asset_info) = self . asset_info . write ( ) . unwrap ( ) . get_mut ( & handle_id) {
331
+ if let Some ( asset_info) = self . asset_info . write ( ) . get_mut ( & handle_id) {
334
332
if load_state. get_version ( ) >= asset_info. load_state . get_version ( ) {
335
333
asset_info. load_state = load_state;
336
334
}
@@ -340,7 +338,6 @@ impl AssetServer {
340
338
pub fn get_load_state_untyped ( & self , handle_id : HandleId ) -> Option < LoadState > {
341
339
self . asset_info
342
340
. read ( )
343
- . unwrap ( )
344
341
. get ( & handle_id)
345
342
. map ( |asset_info| asset_info. load_state . clone ( ) )
346
343
}
@@ -367,7 +364,7 @@ impl AssetServer {
367
364
368
365
fn send_request_to_loader_thread ( & self , load_request : LoadRequest ) {
369
366
// NOTE: This lock makes the call to Arc::strong_count safe. Removing (or reordering) it could result in undefined behavior
370
- let mut loader_threads = self . loader_threads . write ( ) . unwrap ( ) ;
367
+ let mut loader_threads = self . loader_threads . write ( ) ;
371
368
if loader_threads. len ( ) < self . max_loader_threads {
372
369
let loader_thread = LoaderThread {
373
370
requests : Arc :: new ( RwLock :: new ( vec ! [ load_request] ) ) ,
@@ -378,9 +375,9 @@ impl AssetServer {
378
375
} else {
379
376
let most_free_thread = loader_threads
380
377
. iter ( )
381
- . min_by_key ( |l| l. requests . read ( ) . unwrap ( ) . len ( ) )
378
+ . min_by_key ( |l| l. requests . read ( ) . len ( ) )
382
379
. unwrap ( ) ;
383
- let mut requests = most_free_thread. requests . write ( ) . unwrap ( ) ;
380
+ let mut requests = most_free_thread. requests . write ( ) ;
384
381
requests. push ( load_request) ;
385
382
// if most free thread only has one reference, the thread as spun down. if so, we need to spin it back up!
386
383
if Arc :: strong_count ( & most_free_thread. requests ) == 1 {
@@ -399,7 +396,7 @@ impl AssetServer {
399
396
thread:: spawn ( move || {
400
397
loop {
401
398
let request = {
402
- let mut current_requests = requests. write ( ) . unwrap ( ) ;
399
+ let mut current_requests = requests. write ( ) ;
403
400
if current_requests. len ( ) == 0 {
404
401
// if there are no requests, spin down the thread
405
402
break ;
@@ -408,7 +405,7 @@ impl AssetServer {
408
405
current_requests. pop ( ) . unwrap ( )
409
406
} ;
410
407
411
- let handlers = request_handlers. read ( ) . unwrap ( ) ;
408
+ let handlers = request_handlers. read ( ) ;
412
409
let request_handler = & handlers[ request. handler_index ] ;
413
410
request_handler. handle_request ( & request) ;
414
411
}
0 commit comments