Crates.io | bevy_wasm_scripting |
lib.rs | bevy_wasm_scripting |
version | 0.2.0 |
source | src |
created_at | 2022-12-20 00:53:37.017553 |
updated_at | 2023-04-24 02:14:16.428501 |
description | Adds support for wasm/wat assets in Bevy, and enables easy scripting. |
homepage | https://github.com/seurimas/bevy_wasm_scripting |
repository | https://github.com/seurimas/bevy_wasm_scripting |
max_upload_size | |
id | 741867 |
size | 172,703 |
Adds support for wasm/wat assets in Bevy, and enables easy scripting. This is enabled through the wasmer crate.
WorldPointer
imports strategy.Cranelift
compiler is currently hardcoded.)For component-based scripts:
fn main() {
App::new()
...
.add_plugin(WasmPlugin)
.add_wasm_script_component::<AdderScript>()
.add_startup_system(spawn_script_entity)
.add_system(call_script_on_entity)
...
}
impl WasmScriptComponent for AdderScript {
type ImportQueriedComponents = ();
type ImportResources = ();
fn get_wasm_script_handle(&self) -> &Handle<WasmScript> {
&self.handle
}
}
fn spawn_script_entity(mut commands: Commands, asset_server: Res<AssetServer>) {
commands.spawn(AdderScript {
handle: asset_server.load("add_one.wat"),
accumulator: 0,
});
}
//
fn call_script_on_entity(
mut scripted_entities: Query<&mut AdderScript>,
mut script_env: WasmScriptComponentEnv<AdderScript>,
) {
for mut scripted_entity in scripted_entities.iter_mut() {
if let Ok(new_val) = script_env.call_if_instantiated(
&scripted_entity.handle,
"main",
scripted_entity.accumulator,
) {
scripted_entity.accumulator = new_val;
}
println!("Accumulated value: {}", scripted_entity.accumulator);
}
}
More examples, for hot reloading, resource-based scripts, and script imports, are available in the examples directory.
You can run the breakout example, very similar to the bevy examples:
cargo build --release --example breakout --target wasm32-unknown-unknown --features js --no-default-features
wasm-bindgen --out-name wasm_example --out-dir examples/wasm/target --target web target/wasm32-unknown-unknown/release/examples/breakout.wasm
basic-http-server examples/wasm