mirror of
https://github.com/bevyengine/bevy
synced 2024-11-22 20:53:53 +00:00
14042b1e34
# Objective - I hit an issue using the `file_watcher` feature to hot reload assets for my game. The change in this PR allows me to now hot reload assets. - The issue stemmed from my project being a multi crate workspace project structured like so: ``` └── my_game ├── my_game_core │ ├── src │ └── assets ├── my_game_editor │ └── src/main.rs └── my_game └── src/main.rs ``` - `my_game_core` is a crate that holds all my game logic and assets - `my_game` is the crate that creates the binary for my game (depends on the game logic and assets in `my_game_core`) - `my_game_editor` is an editor tool for my game (it also depends on the game logic and assets in `my_game_core`) Whilst running `my_game` and `my_game_editor` from cargo during development I would use `AssetPlugin` like so: ```rust default_plugins.set(AssetPlugin { watch_for_changes_override: Some(true), file_path: "../my_game_core/assets".to_string(), ..Default::default() }) ``` This works fine; bevy picks up the assets. However on saving an asset I would get the following panic from `file_watcher`. It wouldn't kill the app, but I wouldn't see the asset hot reload: ``` thread 'notify-rs debouncer loop' panicked at /Users/ian/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bevy_asset-0.12.1/src/io/file/file_watcher.rs:48:58: called `Result::unwrap()` on an `Err` value: StripPrefixError(()) note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace ``` ## Solution - The solution is to collapse dot segments in the root asset path `FileWatcher` is using - There was already bevy code to do this in `AssetPath`, so I extracted that code so it could be reused in `FileWatcher` |
||
---|---|---|
.. | ||
bevy_a11y | ||
bevy_animation | ||
bevy_app | ||
bevy_asset | ||
bevy_audio | ||
bevy_color | ||
bevy_core | ||
bevy_core_pipeline | ||
bevy_derive | ||
bevy_diagnostic | ||
bevy_dylib | ||
bevy_dynamic_plugin | ||
bevy_ecs | ||
bevy_ecs_compile_fail_tests | ||
bevy_encase_derive | ||
bevy_gilrs | ||
bevy_gizmos | ||
bevy_gltf | ||
bevy_hierarchy | ||
bevy_input | ||
bevy_internal | ||
bevy_log | ||
bevy_macro_utils | ||
bevy_macros_compile_fail_tests | ||
bevy_math | ||
bevy_mikktspace | ||
bevy_pbr | ||
bevy_ptr | ||
bevy_reflect | ||
bevy_reflect_compile_fail_tests | ||
bevy_render | ||
bevy_scene | ||
bevy_sprite | ||
bevy_tasks | ||
bevy_text | ||
bevy_time | ||
bevy_transform | ||
bevy_ui | ||
bevy_utils | ||
bevy_window | ||
bevy_winit |