use bevy::{prelude::*, DefaultPlugins}; use bevy_wasm_scripting::*; fn main() { App::new() .add_plugins(DefaultPlugins.set(AssetPlugin { watch_for_changes: true, ..Default::default() })) .add_plugin(WasmPlugin) .add_startup_system(spawn_script_entity) .add_system(call_script_on_entity) .add_wasm_script_component::() .run(); } #[derive(Component)] struct AdderScript { handle: Handle, accumulator: i32, } impl WasmScriptComponent for AdderScript { type ImportQueriedComponents = (); type ImportResources = (); fn get_wasm_script_handle(&self) -> &Handle { &self.handle } } fn spawn_script_entity(mut commands: Commands, asset_server: Res) { commands.spawn(AdderScript { handle: asset_server.load("edit_me.wat"), accumulator: 0, }); } fn call_script_on_entity( mut scripted_entities: Query<&mut AdderScript>, mut script_env: WasmScriptComponentEnv, ) { for mut scripted_entity in scripted_entities.iter_mut() { if let Ok(new_val) = script_env.call_if_instantiated_1( &scripted_entity.handle, "main", scripted_entity.accumulator, ) { scripted_entity.accumulator = new_val; } println!("Accumulated value: {}", scripted_entity.accumulator); } }