bevyengine / bevyengine/bevy

Users can no longer get a `Res` from `&World`

Open
#16,831 3 comments 2 reactions 0 assignees View on GitHub
A-ECS C-Bug C-Usability D-Modest S-Needs-Design
Dominant language
Rust
Stars
48.2k
Forks
4.8k
Avg merge
3d 22h
Merged PRs (30d)
161

Description

## Bevy version

0.15

I made this [systemparam] to make it simpler for me to access loaded assets related to Dialog .

```
#[derive(SystemParam)]
pub struct DialogDataLoadExt<'w> {
dialog_assets_resource: Res<'w, DialogAssets>,
dialog_assets: Res<'w, Assets>,
lore_node_assets: Res<'w,Assets>,
lore_set_assets: Res<'w, Assets>,
}
```

I want to be able to derive this from World. So i made this fn and it worked great in 0.14

```
pub fn from_world<'w>(world: &'w World) -> Option< DialogDataLoadExt<'w> > {
let dialog_assets_resource = world.get_resource_ref::()?;
let dialog_assets = world.get_resource_ref::>()?;
let lore_node_assets = world.get_resource_ref::>()?;
let lore_set_assets = world.get_resource_ref::>()?;

Some( DialogDataLoadExt {
dialog_assets_resource,
dialog_assets,
lore_node_assets,
lore_set_assets,
} )
}
```

in 0.15, it throws this compilation error

```
error[E0308]: mismatched types
--> src/file_system_interaction/load_extensions/dialog_load_extension.rs:36:13
|
36 | dialog_assets_resource,
| ^^^^^^^^^^^^^^^^^^^^^^ expected `Res<'_, DialogAssets>`, found `Ref<'_, DialogAssets>`
|
= note: expected struct `bevy::prelude::Res<'_, DialogAssets>`
found struct `bevy::prelude::Ref<'_, DialogAssets>`

error[E0308]: mismatched types
--> src/file_system_interaction/load_extensions/dialog_load_extension.rs:37:13
|
37 | dialog_assets,
| ^^^^^^^^^^^^^ expected `Res<'_, Assets>`, found `Ref<'_, Assets>`
|
= note: expected struct `bevy::prelude::Res<'_, bevy::prelude::Assets>`
found struct `bevy::prelude::Ref<'_, bevy::prelude::Assets>`

error[E0308]: mismatched types
--> src/file_system_interaction/load_extensions/dialog_load_extension.rs:38:13
|
38 | lore_node_assets,
| ^^^^^^^^^^^^^^^^ expected `Res<'_, Assets>`, found `Ref<'_, Assets>`
|
= note: expected struct `bevy::prelude::Res<'_, bevy::prelude::Assets>`
found struct `bevy::prelude::Ref<'_, bevy::prelude::Assets>`

error[E0308]: mismatched types
--> src/file_system_interaction/load_extensions/dialog_load_extension.rs:39:13
|
39 | lore_set_assets,
| ^^^^^^^^^^^^^^^ expected `Res<'_, Assets>`, found `Ref<'_, Assets>`
|
= note: expected struct `bevy::prelude::Res<'_, bevy::prelude::Assets>`
found struct `bevy::prelude::Ref<'_, bevy::prelude::Assets>`

```

what is the purpose of this error in 0.15 ? how can i access this systemparam from World in 0.15 ? (NOT &mut World, just readonly World )

Also migration docs dont mention this breaking change

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.