Skip to content
Archevolt
Esc
↑↓navigate↵open⌘Jpreview
On this page

Resources and local state

Share singleton data between systems and keep per-system state.

[Resource, TrackChanges]
public readonly record struct FrameTime(float DeltaSeconds);

[Resource(OwnerThread = true)]
public readonly record struct WindowHandle(nint Value);

System parameters

Parameter Capability
scoped Res<T> Readonly access to a required unmanaged resource.
scoped ResMut<T> Writable access to a required unmanaged resource.
scoped OptionalRes<T> Readonly access to a registered resource that may be absent. HasValue guards Value.
scoped ManagedRes<T> Access to a managed resource class, exclusively on the owner thread.
scoped Local<T> Mutable Value belonging to this system instance, initially default(T).

Presence and registration

Required resources must be present at binding and before each execution. An optional resource still requires type registration. Res<T> and OptionalRes<T> expose IsAdded and IsChanged when tracking is enabled.

Owner-thread affinity

[Resource(OwnerThread = true)] keeps an unmanaged resource’s system on the owner thread. Disjoint worker work may overlap that system. Managed resources and reference-containing locals make their system exclusive.

Ownership

Call Ownership
world.InsertResource(value) The world borrows the value.
world.InsertOwnedResource(value) Transfers ownership of a managed IDisposable value to the world.
world.RemoveResource<T>() Removes and disposes an owned value once.
world.TakeResource<T>() Removes a value and transfers its ownership to the caller.
world.GetResource<T>() Returns the resource value.

Replacing an owned resource disposes the previous one once.

Local state

Each repeated registration and each bound schedule has independent locals, query change cursors, and message-reader cursors.

Was this page helpful?