Skip to content

Commit 4b1745f

Browse files
authored
BRP resource methods (bevyengine#17423)
# Objective So far, built-in BRP methods allow users to interact with entities' components, but global resources have remained beyond its reach. The goal of this PR is to take the first steps in rectifying this shortfall. ## Solution Added five new default methods to BRP: - `bevy/get_resource`: Extracts the value of a given resource from the world. - `bevy/insert_resource`: Serializes an input value to a given resource type and inserts it into the world. - `bevy/remove_resource`: Removes the given resource from the world. - `bevy/mutate_resource`: Replaces the value of a field in a given resource with the result of serializing a given input value. - `bevy/list_resources`: Lists all resources in the type registry with an available `ReflectResource`. ## Testing Added a test resource to the `server` example scene that you can use to mess around with the new BRP methods. ## Showcase Resources can now be retrieved and manipulated remotely using a handful of new BRP methods. For example, a resource that looks like this: ```rust #[derive(Resource, Reflect, Serialize, Deserialize)] #[reflect(Resource, Serialize, Deserialize)] pub struct PlayerSpawnSettings { pub location: Vec2, pub lives: u8, } ``` can be manipulated remotely as follows. Retrieving the value of the resource: ```json { "jsonrpc": "2.0", "id": 1, "method": "bevy/get_resource", "params": { "resource": "path::to::my::module::PlayerSpawnSettings" } } ``` Inserting a resource value into the world: ```json { "jsonrpc": "2.0", "id": 2, "method": "bevy/insert_resource", "params": { "resource": "path::to::my::module::PlayerSpawnSettings", "value": { "location": [ 2.5, 2.5 ], "lives": 25 } } } ``` Removing the resource from the world: ```json { "jsonrpc": "2.0", "id": 3, "method": "bevy/remove_resource", "params": { "resource": "path::to::my::module::PlayerSpawnSettings" } } ``` Mutating a field of the resource specified by a path: ```json { "jsonrpc": "2.0", "id": 4, "method": "bevy/mutate_resource", "params": { "resource": "path::to::my::module::PlayerSpawnSettings", "path": ".location.x", "value": -3.0 } } ``` Listing all manipulable resources in the type registry: ```json { "jsonrpc": "2.0", "id": 5, "method": "bevy/list_resources" } ```
1 parent 11db717 commit 4b1745f

File tree

3 files changed

+401
-24
lines changed

3 files changed

+401
-24
lines changed

0 commit comments

Comments
 (0)