diff --git a/Cargo.toml b/Cargo.toml index d683189..58e4d1c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -170,6 +170,10 @@ name = "custom_type_ruby" path = "examples/ruby/custom_type.rs" required-features = ["ruby"] +[[example]] +name = "ecs_ruby" +path = "examples/ruby/ecs.rs" +required-features = ["ruby"] [dev-dependencies] tracing-subscriber = "0.3.18" diff --git a/assets/examples/ruby/ecs.rb b/assets/examples/ruby/ecs.rb new file mode 100644 index 0000000..63e06a7 --- /dev/null +++ b/assets/examples/ruby/ecs.rb @@ -0,0 +1 @@ +print_player_names diff --git a/examples/ruby/ecs.rs b/examples/ruby/ecs.rs new file mode 100644 index 0000000..a48c4c6 --- /dev/null +++ b/examples/ruby/ecs.rs @@ -0,0 +1,33 @@ +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::(|runtime| { + runtime.add_function( + String::from("print_player_names"), + |players: Query<&Name, With>| { + for player in &players { + println!("player name: {}", player); + } + }, + ); + }) + .add_systems(Startup, startup) + .run(); +} + +fn startup(mut commands: Commands, assets_server: Res) { + commands.spawn((Player, Name::new("John"))); + commands.spawn((Player, Name::new("Mary"))); + commands.spawn((Player, Name::new("Alice"))); + + commands.spawn(Script::::new( + assets_server.load("examples/ruby/ecs.rb"), + )); +}