use bevy::prelude::*;
use bevy_sprite3d::prelude::*;
#[derive(States, Hash, Clone, PartialEq, Eq, Debug, Default)] #[rustfmt::skip]
enum GameState { #[default] Loading, Ready }
#[derive(Resource, Default)]
struct Assets(Handle<Image>);
fn main()
{
#[rustfmt::skip]
App::new().add_plugins(DefaultPlugins)
.add_plugins(Sprite3dPlugin)
.init_state::<GameState>()
.add_systems(Startup, |asset_server: Res<AssetServer>, mut assets: ResMut<Assets>| {
assets.0 = asset_server.load("icon.png");
})
.add_systems(Update, setup.run_if(in_state(GameState::Loading)))
.insert_resource(Assets::default())
.run();
}
#[rustfmt::skip]
fn setup(
asset_server : Res<AssetServer>,
assets : Res<Assets>,
mut commands : Commands,
mut next_state : ResMut<NextState<GameState>>,
) {
if !asset_server.get_load_state(assets.0.id()).is_some_and(|s| s.is_loaded()) { return; }
next_state.set(GameState::Ready);
commands.spawn(Camera3d::default()).insert(Transform::from_xyz(0., 0., 5.));
commands.spawn((Sprite3d { pixels_per_metre: 400.,
alpha_mode: AlphaMode::Blend,
unlit: true,
..default() },
Sprite { image: assets.0.clone(), ..default() }));
}