#bevy #bevy-ecs #ecs #framework #moonshine #unconventional

moonshine-core

Unconventional framework for making games in Bevy

2 releases

0.1.1 May 5, 2024
0.1.0 May 4, 2024

#2141 in Game dev

Download history 259/week @ 2024-04-29 25/week @ 2024-05-06

284 downloads per month
Used in moonshine-view

MIT license

9KB

🍸 Moonshine Core

Unconventional framework for making games in Bevy.

This crate is a grouping of several related low-level crates within the Moonshine ecosystem:

See individual crates for documentation and examples.

🍎 Moonshine Kind

crates.io downloads docs.rs license stars

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>>
}

🌴 Moonshine Object

crates.io downloads docs.rs license stars

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!
            }
        }
    }
}

💾 Moonshine Save

crates.io downloads docs.rs license stars

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)
}

🥚 Moonshine Spawn

crates.io downloads docs.rs license stars

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;

🛠️ Moonshine Utilities

Collection of generic utilities for improved safety, diagnostics, and ergonomics.

crates.io downloads docs.rs license stars

Support

Please post an issue for any bugs, questions, or suggestions.

You may also contact me on the official Bevy Discord server as @Zeenobit.

Dependencies

~19–58MB
~1M SLoC