Invert colors kinda sorta works

main
Elijah Voigt 3 months ago
parent 34e2c5a08b
commit f900f3b388

@ -6,4 +6,4 @@ Art Assets: Kenney.nl
Engine: Bevy Engine: Bevy
Physics: Avian2D Physics: Avian2D
Inspired by the 2013 Flappy Bird by Dong Nguyen Inspired by Flappy Bird (2013) by Dong Nguyen

@ -16,6 +16,7 @@ fn main() {
Physics2dPlugin, Physics2dPlugin,
)) ))
.insert_resource(Gravity(Vec2::NEG_Y * 9.8 * 100.0)) .insert_resource(Gravity(Vec2::NEG_Y * 9.8 * 100.0))
.init_resource::<BirdAssets>()
.init_resource::<PipeAssets>() .init_resource::<PipeAssets>()
.init_resource::<GroundAssets>() .init_resource::<GroundAssets>()
.init_resource::<Score>() .init_resource::<Score>()
@ -26,16 +27,17 @@ fn main() {
.add_systems( .add_systems(
Startup, Startup,
( (
init_bird,
// init_obstacles, // init_obstacles,
init_obstacle_assets, init_assets,
init_first_batches.after(init_obstacle_assets), init_bird.after(init_assets),
init_first_batches.after(init_assets),
init_ui, init_ui,
tweak_camera.after(create_camera_2d), tweak_camera.after(create_camera_2d),
), ),
) )
.add_systems(OnEnter(PlayerState::Alive), alive_bird) .add_systems(OnEnter(PlayerState::Alive), alive_bird)
.add_systems(OnEnter(PlayerState::Rewind), alive_bird) .add_systems(OnEnter(PlayerState::Rewind), (invert_colors, alive_bird))
.add_systems(OnExit(PlayerState::Rewind), uninvert_colors)
.add_systems(OnEnter(PlayerState::Pause), pause_bird) .add_systems(OnEnter(PlayerState::Pause), pause_bird)
.add_systems(OnEnter(PlayerState::Stasis), pause_bird) .add_systems(OnEnter(PlayerState::Stasis), pause_bird)
.add_systems( .add_systems(
@ -133,18 +135,10 @@ struct Tape {
fn init_bird( fn init_bird(
mut commands: Commands, mut commands: Commands,
server: Res<AssetServer>, server: Res<AssetServer>,
bird_assets: Res<BirdAssets>,
mut meshes: ResMut<Assets<Mesh>>, mut meshes: ResMut<Assets<Mesh>>,
mut materials: ResMut<Assets<ColorMaterial>>, mut materials: ResMut<Assets<ColorMaterial>>,
) { ) {
let material = MeshMaterial2d(materials.add(ColorMaterial {
texture: Some(server.load("flappy/bird.png")),
color: ORANGE.into(),
alpha_mode: AlphaMode2d::Blend,
..default()
}));
let mesh = Mesh2d(meshes.add(Rectangle::new(1.0, 1.2)));
let name = Name::new("bird"); let name = Name::new("bird");
let t = Transform::from_xyz(0.0, 0.0, 0.0).with_scale(Vec3::splat(50.0)); let t = Transform::from_xyz(0.0, 0.0, 0.0).with_scale(Vec3::splat(50.0));
@ -161,8 +155,8 @@ fn init_bird(
commands.spawn(( commands.spawn((
name, name,
mesh, bird_assets.mesh.clone(),
material, bird_assets.material.clone(),
physics, physics,
t, t,
Bird, Bird,
@ -318,22 +312,32 @@ fn populate_hitbox(trigger: Trigger<OnAdd, Hitbox>, mut commands: Commands) {
)); ));
} }
#[derive(Resource, Default)]
struct BirdAssets {
material: MeshMaterial2d<ColorMaterial>,
rewind_material: MeshMaterial2d<ColorMaterial>,
mesh: Mesh2d,
}
#[derive(Resource, Default)] #[derive(Resource, Default)]
struct GroundAssets { struct GroundAssets {
material: MeshMaterial2d<ColorMaterial>, material: MeshMaterial2d<ColorMaterial>,
rewind_material: MeshMaterial2d<ColorMaterial>,
mesh: Mesh2d, mesh: Mesh2d,
} }
#[derive(Resource, Default)] #[derive(Resource, Default)]
struct PipeAssets { struct PipeAssets {
material: MeshMaterial2d<ColorMaterial>, material: MeshMaterial2d<ColorMaterial>,
rewind_material: MeshMaterial2d<ColorMaterial>,
mesh: Mesh2d, mesh: Mesh2d,
} }
/// Initialize some materials and meshes used by the environment obstacles /// Initialize some materials and meshes used by the environment obstacles
fn init_obstacle_assets( fn init_assets(
mut meshes: ResMut<Assets<Mesh>>, mut meshes: ResMut<Assets<Mesh>>,
mut materials: ResMut<Assets<ColorMaterial>>, mut materials: ResMut<Assets<ColorMaterial>>,
mut bird_assets: ResMut<BirdAssets>,
mut pipe_assets: ResMut<PipeAssets>, mut pipe_assets: ResMut<PipeAssets>,
mut ground_assets: ResMut<GroundAssets>, mut ground_assets: ResMut<GroundAssets>,
server: Res<AssetServer>, server: Res<AssetServer>,
@ -343,6 +347,11 @@ fn init_obstacle_assets(
color: GREEN.into(), color: GREEN.into(),
..default() ..default()
})); }));
pipe_assets.rewind_material = MeshMaterial2d(materials.add(ColorMaterial {
texture: Some(server.load("flappy/pipe.png")),
color: (WHITE - GREEN).with_alpha(1.0).into(),
..default()
}));
pipe_assets.mesh = Mesh2d(meshes.add(Rectangle::new(1.0, 1.0))); pipe_assets.mesh = Mesh2d(meshes.add(Rectangle::new(1.0, 1.0)));
ground_assets.material = MeshMaterial2d(materials.add(ColorMaterial { ground_assets.material = MeshMaterial2d(materials.add(ColorMaterial {
@ -350,8 +359,26 @@ fn init_obstacle_assets(
color: BLACK.into(), color: BLACK.into(),
..default() ..default()
})); }));
ground_assets.rewind_material = MeshMaterial2d(materials.add(ColorMaterial {
texture: Some(server.load("flappy/ground.png")),
color: WHITE.into(),
..default()
}));
ground_assets.mesh = Mesh2d(meshes.add(Rectangle::new(1.0, 1.0))); ground_assets.mesh = Mesh2d(meshes.add(Rectangle::new(1.0, 1.0)));
bird_assets.material = MeshMaterial2d(materials.add(ColorMaterial {
texture: Some(server.load("flappy/bird.png")),
color: ORANGE.into(),
alpha_mode: AlphaMode2d::Blend,
..default()
}));
bird_assets.rewind_material = MeshMaterial2d(materials.add(ColorMaterial {
texture: Some(server.load("flappy/bird.png")),
color: (WHITE - ORANGE).with_alpha(1.0).into(),
alpha_mode: AlphaMode2d::Blend,
..default()
}));
bird_assets.mesh = Mesh2d(meshes.add(Rectangle::new(1.0, 1.2)));
} }
fn init_ui(mut commands: Commands) { fn init_ui(mut commands: Commands) {
@ -884,3 +911,59 @@ fn update_tooltip(
}) })
}); });
} }
fn invert_colors(
camera: Single<&mut Camera>,
mut materials: Query<&mut MeshMaterial2d<ColorMaterial>>,
birds: Query<Entity, With<Bird>>,
bird_assets: ResMut<BirdAssets>,
pipes: Query<Entity, With<Pipe>>,
pipe_assets: ResMut<PipeAssets>,
grounds: Query<Entity, With<Ground>>,
ground_assets: ResMut<GroundAssets>,
) {
// Invert bird
birds.iter().for_each(|e| {
*materials.get_mut(e).unwrap() = bird_assets.rewind_material.clone();
});
// Set pipes
pipes.iter().for_each(|e| {
*materials.get_mut(e).unwrap() = pipe_assets.rewind_material.clone();
});
// Set ground
grounds.iter().for_each(|e| {
*materials.get_mut(e).unwrap() = ground_assets.rewind_material.clone();
});
// Set background color
let mut c = camera.into_inner();
c.clear_color = ClearColorConfig::Custom(BLACK.into());
}
fn uninvert_colors(
camera: Single<&mut Camera>,
mut materials: Query<&mut MeshMaterial2d<ColorMaterial>>,
birds: Query<Entity, With<Bird>>,
bird_assets: ResMut<BirdAssets>,
pipes: Query<Entity, With<Pipe>>,
pipe_assets: ResMut<PipeAssets>,
grounds: Query<Entity, With<Ground>>,
ground_assets: ResMut<GroundAssets>,
) {
// Set bird
birds.iter().for_each(|e| {
*materials.get_mut(e).unwrap() = bird_assets.material.clone();
});
// Set pipes
pipes.iter().for_each(|e| {
*materials.get_mut(e).unwrap() = pipe_assets.material.clone();
});
// Set ground
grounds.iter().for_each(|e| {
*materials.get_mut(e).unwrap() = ground_assets.material.clone();
});
// Set background color
let mut c = camera.into_inner();
c.clear_color = ClearColorConfig::Custom(WHITE.into());
}

Loading…
Cancel
Save