beet 0.0.8

Malleable Application Framework
use beet::examples::scenes;
use beet::prelude::*;
use bevy::animation::RepeatAnimation;
use std::time::Duration;

pub fn main() {
	App::new()
		.add_plugins(running_beet_example_plugin)
		.add_systems(
			Startup,
			(
				scenes::ui_terminal,
				scenes::lighting_3d,
				scenes::ground_3d,
				setup,
			),
		)
		.run();
}

fn setup(
	mut commands: Commands,
	asset_server: Res<AssetServer>,
	mut anim_graphs: ResMut<Assets<AnimationGraph>>,
) {
	commands.spawn((
		Name::new("Camera"),
		Camera3d::default(),
		Transform::from_xyz(10.0, 10.0, 15.0)
			.looking_at(Vec3::new(0.0, 2.0, 0.0), Vec3::Y),
	));

	let Foxie {
		graph_handle,
		idle_index,
		idle_clip,
		walk_index,
		walk_clip,
	} = Foxie::new(&asset_server, &mut anim_graphs);


	let transition_duration = Duration::from_secs_f32(0.5);

	commands.spawn((
		Name::new("Foxie"),
		Transform::from_scale(Vec3::splat(0.1)),
		SceneRoot(asset_server.load("misc/fox.glb#Scene0")),
		graph_handle,
		// AnimationTransitions::default(),
		children![(
			Name::new("Behavior"),
			TriggerOnAnimationReady::run(),
			Sequence::default(),
			Repeat::default(),
			children![
				(
					Name::new("Idle"), 
					PlayAnimation::new(idle_index)
						.with_transition_duration(transition_duration),
					TriggerOnAnimationEnd::new(idle_clip, idle_index, Outcome::Pass)
						.with_transition_duration(transition_duration)
				),
				(
					Name::new("Walking"),
					PlayAnimation::new(walk_index)
						.repeat(RepeatAnimation::Count(8))
						.with_transition_duration(transition_duration),
					TriggerOnAnimationEnd::new(walk_clip, walk_index, Outcome::Pass)
						.with_transition_duration(transition_duration)
				)
			]
		)]
	));
}