Skip to main content

Resource

Trait Resource 

Source
pub trait Resource: Component { }
Expand description

A type that can be inserted into a World as a singleton.

You can access resource data in systems using the Res and ResMut system parameters

Only one resource of each type can be stored in a World at any given time.

§Examples

#[derive(Resource)]
struct MyResource { value: u32 }

world.insert_resource(MyResource { value: 42 });

fn read_resource_system(resource: Res<MyResource>) {
    assert_eq!(resource.value, 42);
}

fn write_resource_system(mut resource: ResMut<MyResource>) {
    assert_eq!(resource.value, 42);
    resource.value = 0;
    assert_eq!(resource.value, 0);
}

§!Sync Resources

A !Sync type cannot implement Resource. However, it is possible to wrap a Send but not Sync type in SyncCell or the currently unstable Exclusive to make it Sync. This forces only having mutable access (&mut T only, never &T), but makes it safe to reference across multiple threads.

This will fail to compile since RefCell is !Sync.


#[derive(Resource)]
struct NotSync {
   counter: RefCell<usize>,
}

This will compile since the RefCell is wrapped with SyncCell.

use bevy_platform::cell::SyncCell;

#[derive(Resource)]
struct ActuallySync {
   counter: SyncCell<RefCell<usize>>,
}

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§

Source§

impl Resource for TimeUpdateStrategy
where TimeUpdateStrategy: Send + Sync + 'static,

Source§

impl Resource for StaticTransformOptimizations

Source§

impl Resource for FixedMainScheduleOrder
where FixedMainScheduleOrder: Send + Sync + 'static,

Source§

impl Resource for MainScheduleOrder
where MainScheduleOrder: Send + Sync + 'static,

Source§

impl Resource for DiagnosticsStore
where DiagnosticsStore: Send + Sync + 'static,

Source§

impl Resource for FrameCount
where FrameCount: Send + Sync + 'static,

Source§

impl Resource for LogDiagnosticsState
where LogDiagnosticsState: Send + Sync + 'static,

Source§

impl Resource for DefaultQueryFilters
where DefaultQueryFilters: Send + Sync + 'static,

Source§

impl Resource for FallbackErrorHandler
where FallbackErrorHandler: Send + Sync + 'static,

Source§

impl Resource for MessageRegistry
where MessageRegistry: Send + Sync + 'static,

Source§

impl Resource for MainThreadExecutor
where MainThreadExecutor: Send + Sync + 'static,

Source§

impl Resource for Stepping
where Stepping: Send + Sync + 'static,

Source§

impl Resource for RegisteredSystemDespawner
where RegisteredSystemDespawner: Send + Sync + 'static,

Source§

impl Resource for AppTypeRegistry
where AppTypeRegistry: Send + Sync + 'static,

Source§

impl Resource for Schedules
where Schedules: Send + Sync + 'static,

Source§

impl<M> Resource for Messages<M>
where M: Message, Messages<M>: Send + Sync + 'static,

Source§

impl<S> Resource for CachedSystemId<S>
where CachedSystemId<S>: Send + Sync + 'static,

Source§

impl<T> Resource for Axis<T>
where Axis<T>: Send + Sync + 'static,

Source§

impl<T> Resource for ButtonInput<T>
where T: Clone + Eq + Hash + Send + Sync + 'static, ButtonInput<T>: Send + Sync + 'static,

Source§

impl<T> Resource for Time<T>
where T: Default, Time<T>: Send + Sync + 'static,