Crates.io | moonshine-core |
lib.rs | moonshine-core |
version | 0.1.2 |
source | src |
created_at | 2024-05-04 23:36:24.81588 |
updated_at | 2024-07-05 00:17:48.969056 |
description | Unconventional framework for making games in Bevy |
homepage | https://github.com/Zeenobit/moonshine_core |
repository | https://github.com/Zeenobit/moonshine_core |
max_upload_size | |
id | 1229907 |
size | 10,525 |
Unconventional cocktail of libraries to make ECS-driven development easier and safer in Bevy.
See individual crates for detailed documentation and examples.
Type safety solution for Bevy entities:
use bevy::prelude::*;
use moonshine_core::prelude::*;
#[derive(Component)]
struct Fruit;
#[derive(Component)]
struct FruitBasket {
fruits: Vec<Instance<Fruit>>
}
Ergonomic wrapper for managing complex enttiy hierarchies:
use bevy::prelude::*;
use moonshine_core::prelude::*;
#[derive(Component)]
struct Bird;
#[derive(Component)]
struct Flying;
fn setup_bird(birds: Objects<Bird, Added<Flying>>, mut commands: Commands) {
for bird in birds.iter() {
if let Some(wings) = bird.find_by_path("./Wings") {
for wing in wings.children() {
// TODO: Flap! Flap!
}
}
}
}
Save/Load framework for managing persistent game state:
use bevy::prelude::*;
use moonshine_core::prelude::*;
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.add_plugins((SavePlugin, LoadPlugin))
.add_systems(PreUpdate, save_default().into_file("world.ron").run_if(should_save))
.add_systems(PreUpdate, load_from_file("world.ron").run_if(should_load))
.run();
}
fn should_save(key: Res<ButtonInput<KeyCode>>) -> bool {
key.just_pressed(KeyCode::KeyS)
}
fn should_load(key: Res<ButtonInput<KeyCode>>) -> bool {
key.just_pressed(KeyCode::KeyL)
}
Tools for spawning entity hierarchies witout systems:
use bevy::prelude::*;
use moonshine_spawn::prelude::*;
fn chicken() -> impl Bundle {
Chicken.with_children(|chicken| {
chicken.spawn(ChickenHead);
})
}
#[derive(Component)]
struct Chicken;
#[derive(Component)]
struct ChickenHead;
Collection of generic utilities for improved safety, diagnostics, and ergonomics.
Please post an issue for any bugs, questions, or suggestions.
You may also contact me on the official Bevy Discord server as @Zeenobit.