diff --git a/Cargo.toml b/Cargo.toml index 4651841..e750347 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -200,6 +200,11 @@ name = "multiple_plugins_ruby" path = "examples/ruby/multiple_plugins.rs" required-features = ["ruby"] +[[example]] +name = "promises_ruby" +path = "examples/ruby/promises.rs" +required-features = ["ruby"] + [dev-dependencies] tracing-subscriber = "0.3.18" mlua = { version = "0.9.8", features = ["luajit", "vendored", "send"] } diff --git a/assets/examples/ruby/promises.rb b/assets/examples/ruby/promises.rb new file mode 100644 index 0000000..dd0ecbe --- /dev/null +++ b/assets/examples/ruby/promises.rb @@ -0,0 +1,3 @@ +get_player_name.and_then do |name| + puts name +end diff --git a/examples/ruby/multiple_plugins.rs b/examples/ruby/multiple_plugins.rs index 886fee1..59438fd 100644 --- a/examples/ruby/multiple_plugins.rs +++ b/examples/ruby/multiple_plugins.rs @@ -17,7 +17,7 @@ impl Plugin for PluginA { fn plugin_a_startup(mut commands: Commands, assets_server: Res) { commands.spawn(Script::::new( - assets_server.load("examples/lua/multiple_plugins_plugin_a.lua"), + assets_server.load("examples/ruby/multiple_plugins_plugin_a.rb"), )); } diff --git a/examples/ruby/promises.rs b/examples/ruby/promises.rs new file mode 100644 index 0000000..1b3ed62 --- /dev/null +++ b/examples/ruby/promises.rs @@ -0,0 +1,31 @@ +use bevy::prelude::*; +use bevy_scriptum::prelude::*; +use bevy_scriptum::runtimes::ruby::prelude::*; + +#[derive(Component)] +struct Player; + +fn main() { + App::new() + .add_plugins(DefaultPlugins) + .add_scripting::(|builder| { + builder.add_function( + String::from("get_player_name"), + |player_names: Query<&Name, With>| { + player_names + .single() + .expect("Missing player_names") + .to_string() + }, + ); + }) + .add_systems(Startup, startup) + .run(); +} + +fn startup(mut commands: Commands, assets_server: Res) { + commands.spawn((Player, Name::new("John"))); + commands.spawn(Script::::new( + assets_server.load("examples/ruby/promises.rb"), + )); +}