Trait valence::ecs::system::Resource

pub trait Resource:
    Send
    + Sync
    + 'static { }
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_utils::synccell::SyncCell;

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

Implementations on Foreign Types§

source§

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

source§

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

source§

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

§

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

§

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

Implementors§

§

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

§

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

§

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

§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

§

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

§

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

§

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

§

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

§

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

§

impl<E> Resource for Events<E>
where E: Event, Events<E>: Send + Sync + 'static,