From 297811e8825dbbe468d09fe83c281371e07754a7 Mon Sep 17 00:00:00 2001 From: tuxmain Date: Wed, 24 Aug 2022 12:21:08 +0200 Subject: [PATCH 01/13] Platform material & filter bundle --- src/filters.rs | 20 +++++++++++++++++ src/game.rs | 2 ++ src/levels.rs | 3 +++ src/levels/level0.rs | 19 +++++++++++----- src/levels/level1.rs | 53 ++++++++++++++++++++++++++++++++++++++------ src/main.rs | 17 +++++++------- 6 files changed, 93 insertions(+), 21 deletions(-) create mode 100644 src/filters.rs diff --git a/src/filters.rs b/src/filters.rs new file mode 100644 index 0000000..a4439c4 --- /dev/null +++ b/src/filters.rs @@ -0,0 +1,20 @@ +use bevy::prelude::*; +use bevy_rapier2d::prelude::*; + +#[derive(Component, Default)] +pub struct FilterColor(pub Color); + +#[derive(Component)] +pub enum PassThroughFilter { + Absorbing, +} + +#[derive(Bundle)] +pub struct AbsorbingFilter { + pub color: FilterColor, + #[bundle] + pub mesh: ColorMesh2dBundle, + pub collider: Collider, + pub sensor: Sensor, + pub filter_type: PassThroughFilter, +} diff --git a/src/game.rs b/src/game.rs index b9ca210..908752a 100644 --- a/src/game.rs +++ b/src/game.rs @@ -1,6 +1,8 @@ #![allow(clippy::precedence)] #![allow(clippy::too_many_arguments)] +pub use crate::filters::*; + use crate::AppState; use bevy::{ diff --git a/src/levels.rs b/src/levels.rs index fbe3ff8..0d2ce89 100644 --- a/src/levels.rs +++ b/src/levels.rs @@ -36,6 +36,7 @@ pub fn despawn_level(mut commands: Commands, level_query: Query, + mut meshes: ResMut>, mut materials: ResMut>, current_level: Res, mut level_startup_event: EventReader, @@ -47,12 +48,14 @@ pub fn post_setup_level( match level_id.0 { 0 => level0::setup( &mut commands, + &mut meshes, &character_meshes, &mut materials, &audio, ), 1 => level1::setup( &mut commands, + &mut meshes, &character_meshes, &mut materials, &audio, diff --git a/src/levels/level0.rs b/src/levels/level0.rs index 01b13a4..6cec4c4 100644 --- a/src/levels/level0.rs +++ b/src/levels/level0.rs @@ -1,19 +1,28 @@ use crate::game::*; -use bevy::prelude::*; +use bevy::prelude::{shape::Quad, *}; use bevy_rapier2d::prelude::*; pub fn setup( commands: &mut Commands, + meshes: &mut ResMut>, character_meshes: &Res, materials: &mut ResMut>, - // selected_character_id: &mut Mut, - // character_id_list: &mut Mut, audio: &Res>, ) { commands - .spawn_bundle(TransformBundle::from(Transform::from_xyz(0.0, -256.0, 0.0))) - .insert(Collider::cuboid(400., 10.)) + .spawn_bundle(ColorMesh2dBundle { + mesh: meshes + .add(Mesh::from(Quad { + size: Vec2 { x: 800.0, y: 16.0 }, + flip: false, + })) + .into(), + material: materials.add(ColorMaterial::from(Color::GRAY)), + transform: Transform::from_xyz(0.0, -256.0, 0.0), + ..default() + }) + .insert(Collider::cuboid(400., 8.)) .insert(Level); spawn_character( diff --git a/src/levels/level1.rs b/src/levels/level1.rs index 3efdebf..4699cb1 100644 --- a/src/levels/level1.rs +++ b/src/levels/level1.rs @@ -1,23 +1,42 @@ use crate::game::*; -use bevy::prelude::*; +use bevy::prelude::{shape::Quad, *}; use bevy_rapier2d::prelude::*; pub fn setup( commands: &mut Commands, + meshes: &mut ResMut>, character_meshes: &Res, materials: &mut ResMut>, audio: &Res>, ) { commands - .spawn_bundle(TransformBundle::from(Transform::from_xyz(0.0, -256.0, 0.0))) - .insert(Collider::cuboid(400., 10.)) + .spawn_bundle(ColorMesh2dBundle { + mesh: meshes + .add(Mesh::from(Quad { + size: Vec2 { x: 800.0, y: 16.0 }, + flip: false, + })) + .into(), + material: materials.add(ColorMaterial::from(Color::GRAY)), + transform: Transform::from_xyz(0.0, -256.0, 0.0), + ..default() + }) + .insert(Collider::cuboid(400., 8.)) .insert(Level); commands - .spawn_bundle(TransformBundle::from(Transform::from_xyz( - 256.0, -128.0, 0.0, - ))) - .insert(Collider::cuboid(200., 10.)) + .spawn_bundle(ColorMesh2dBundle { + mesh: meshes + .add(Mesh::from(Quad { + size: Vec2 { x: 400.0, y: 16.0 }, + flip: false, + })) + .into(), + material: materials.add(ColorMaterial::from(Color::GRAY)), + transform: Transform::from_xyz(256.0, -128.0, 0.0), + ..default() + }) + .insert(Collider::cuboid(200., 8.)) .insert(Level); spawn_character( @@ -47,4 +66,24 @@ pub fn setup( Color::GREEN, false, ); + + commands + .spawn_bundle(AbsorbingFilter { + color: FilterColor(Color::RED), + mesh: ColorMesh2dBundle { + mesh: meshes + .add(Mesh::from(Quad { + size: Vec2 { x: 128.0, y: 16.0 }, + flip: false, + })) + .into(), + material: materials.add(Color::rgba(1., 0., 0., 0.5).into()), + transform: Transform::from_xyz(0., 0., 2.), + ..Default::default() + }, + collider: Collider::cuboid(64., 8.), + sensor: Sensor, + filter_type: PassThroughFilter::Absorbing, + }) + .insert(Level); } diff --git a/src/main.rs b/src/main.rs index 7a19dab..b7fbbc2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,11 +1,12 @@ #[cfg(not(target_arch = "wasm32"))] mod audio; +mod filters; mod game; mod levels; mod menu; mod particle_effect; -use bevy::{core_pipeline::clear_color::ClearColorConfig, prelude::*}; +use bevy::prelude::*; use bevy_rapier2d::prelude::*; #[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)] @@ -23,15 +24,18 @@ fn main() { std::thread::spawn(move || audio::setup(audio_event_receiver)); App::new() + .insert_resource(Msaa { samples: 4 }) .insert_resource(audio_event_sender) .add_state(AppState::Menu) + .insert_resource(ClearColor(Color::BLACK)) .add_plugins(DefaultPlugins) .add_plugin(RapierPhysicsPlugin::::pixels_per_meter(64.0)) - .add_plugin(RapierDebugRenderPlugin::default()) + //.add_plugin(RapierDebugRenderPlugin::default()) .add_plugin(menu::MenuPlugin) .add_plugin(game::GamePlugin) .add_plugin(particle_effect::ParticleEffectPlugin) - .add_plugin(bevy_inspector_egui::WorldInspectorPlugin::new()) + //.add_plugin(bevy_inspector_egui::WorldInspectorPlugin::new()) + .add_system(bevy::window::close_on_esc) .add_startup_system(setup) .run(); } @@ -43,12 +47,7 @@ fn setup(mut commands: Commands, asset_server: Res) { let font: Handle = asset_server.load("UacariLegacy-Thin.ttf"); commands.insert_resource(font); - commands.spawn_bundle(Camera2dBundle { - camera_2d: Camera2d { - clear_color: ClearColorConfig::Custom(Color::BLACK), - }, - ..Default::default() - }); + commands.spawn_bundle(Camera2dBundle::default()); commands.insert_resource(AmbientLight { color: Color::WHITE, brightness: 0.6, From ec7d04c8c82a0b415ed3c1e24f33d5019de8de45 Mon Sep 17 00:00:00 2001 From: tuxmain Date: Wed, 24 Aug 2022 14:51:49 +0200 Subject: [PATCH 02/13] Audio: switch, fusion --- assets/init.hxy | 2 +- src/audio.rs | 16 +++++++++++++++- src/game.rs | 7 +++++-- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/assets/init.hxy b/assets/init.hxy index 8ba0f92..3700a2f 100644 --- a/assets/init.hxy +++ b/assets/init.hxy @@ -1 +1 @@ -{"VERSION":2,"atoms":[["tseq",0,"cmode",["i",0]],["sfilter",0,"ftype",["i",8]],["delay",0,"mode",["i",0]],["delay",1,"mode",["i",0]],["out",0,"mono",["i",0]],["ad",0,"mult",["i",0]],["amp",0,"neg_att",["i",1]],["amp",1,"neg_att",["i",1]],["bosc",0,"wtype",["i",3]]],"cells":[["sin",1,1,2,[-1,-1,-1],[-1,"sig",-1]],["sin",0,1,3,[-1,-1,-1],["sig",-1,-1]],["sin",2,2,2,[-1,-1,-1],[-1,-1,"sig"]],["mix3",0,2,3,["ch3","ch2","ch1"],[-1,"sig",-1]],["ad",0,3,3,[-1,"inp",-1],[-1,"sig","sig"]],["amp",0,3,4,["inp",-1,-1],[-1,"sig",-1]],["amp",1,4,4,[-1,"inp",-1],[-1,-1,"sig"]],["out",0,4,5,["ch2","ch1",-1],[-1,-1,-1]]],"params":[["ad",0,"ashp",0.8149999976158142],["ad",0,"atk",15.0],["amp",0,"att",1.0],["amp",1,"att",1.0],["mix3",0,"ch1",0.0],["out",0,"ch1",0.0],["mix3",0,"ch2",0.0],["out",0,"ch2",0.0],["mix3",0,"ch3",0.0],["tseq",0,"clock",0.0],["ad",0,"dcy",1000.0],["sin",0,"det",0.0],["sin",1,"det",4.0],["sin",2,"det",7.0],["bosc",0,"det",0.0],["ad",0,"dshp",0.19500002264976501],["delay",0,"fb",0.6499999761581421],["delay",1,"fb",0.5999999642372131],["sin",0,"freq",440.0,0.0],["sin",1,"freq",440.0],["sin",2,"freq",440.0],["bosc",0,"freq",440.0],["sfilter",0,"freq",1900.0001220703125],["amp",0,"gain",0.9999999403953552],["amp",1,"gain",0.9999999403953552],["out",0,"gain",0.08999998867511749],["mix3",0,"gain1",0.9999999403953552],["mix3",0,"gain2",0.9999999403953552],["mix3",0,"gain3",0.9999999403953552],["amp",0,"inp",0.0],["amp",1,"inp",0.0],["ad",0,"inp",1.0],["delay",0,"inp",0.0],["delay",1,"inp",0.0],["sfilter",0,"inp",0.0],["delay",0,"mix",0.5],["delay",1,"mix",0.5],["mix3",0,"ogain",0.9999999403953552],["bosc",0,"pw",0.5,-0.25999999046325684],["sfilter",0,"res",0.5],["tslfo",0,"rev",0.5],["tslfo",1,"rev",0.5],["tslfo",2,"rev",0.5],["tslfo",3,"rev",0.5],["tslfo",0,"time",1699.99951171875],["tslfo",1,"time",22999.99609375],["tslfo",2,"time",19999.994140625],["tslfo",3,"time",499.99993896484375],["delay",0,"time",256.70001220703125,0.009999999776482582],["delay",1,"time",249.99998474121094,-0.007999999448657036],["tseq",0,"trig",0.0],["ad",0,"trig",0.0],["tslfo",0,"trig",0.0],["tslfo",1,"trig",0.0],["tslfo",2,"trig",0.0],["tslfo",3,"trig",0.0],["delay",0,"trig",0.0],["delay",1,"trig",0.0]],"patterns":[{"col_types":[1,3,0,0,0,0],"cursor_col":2,"cursor_row":2,"data":[[60,4071,-1,-1,-1,-1],[64,4071,-1,-1,-1,-1],[69,4071,-1,-1,-1,-1],[-1,4071,-1,-1,-1,-1],[72,4071,-1,-1,-1,-1],[76,4071,-1,-1,-1,-1],[84,4071,-1,-1,-1,-1],[-1,4071,-1,-1,-1,-1],[60,4071,-1,-1,-1,-1],[64,4071,-1,-1,-1,-1],[79,4071,-1,-1,-1,-1],[-1,4071,-1,-1,-1,-1],[72,4071,-1,-1,-1,-1],[76,4071,-1,-1,-1,-1],[65,4071,-1,-1,-1,-1],[-1,4071,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1]],"edit_step":4,"rows":16},null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"props":[]} +{"VERSION":2,"atoms":[["tseq",0,"cmode",["i",0]],["sfilter",0,"ftype",["i",13]],["sfilter",1,"ftype",["i",6]],["sfilter",2,"ftype",["i",7]],["quant",0,"keys",["i",0]],["delay",0,"mode",["i",0]],["delay",1,"mode",["i",0]],["comb",0,"mode",["i",0]],["noise",0,"mode",["i",0]],["out",0,"mono",["i",0]],["ad",0,"mult",["i",0]],["ad",1,"mult",["i",1]],["ad",2,"mult",["i",0]],["ad",3,"mult",["i",0]],["amp",0,"neg_att",["i",1]],["amp",1,"neg_att",["i",1]],["amp",2,"neg_att",["i",1]],["amp",3,"neg_att",["i",1]],["bosc",0,"wtype",["i",3]]],"cells":[["ad",2,3,5,["trig",-1,-1],[-1,"sig","sig"]],["sin",1,4,3,[-1,-1,-1],[-1,"sig",-1]],["sin",0,4,4,[-1,-1,-1],["sig",-1,-1]],["ad",3,4,5,[-1,"trig",-1],["sig",-1,-1]],["amp",3,4,6,[-1,"inp","gain"],["sig",-1,-1]],["sin",2,5,2,[-1,-1,-1],[-1,-1,"sig"]],["mix3",0,5,3,["ch3","ch2","ch1"],["sig","sig","sig"]],["mix3",1,5,4,["ch1",-1,"gain1"],[-1,"sig",-1]],["mix3",5,5,5,[-1,-1,"ch1"],["sig",-1,-1]],["noise",0,6,2,[-1,-1,-1],[-1,-1,"sig"]],["sfilter",0,6,3,["freq",-1,"inp"],[-1,"sig",-1]],["ad",0,6,4,[-1,"inp",-1],[-1,"sig",-1]],["sfilter",1,6,5,[-1,"inp","freq"],[-1,"sig",-1]],["ad",1,7,3,[-1,"inp",-1],[-1,-1,"sig"]],["mix3",2,7,4,["ch2","ch1",-1],[-1,-1,"sig"]],["mix3",4,7,5,["ch1","ch2",-1],[-1,"sig","sig"]],["amp",0,7,6,["inp",-1,-1],[-1,"sig",-1]],["amp",1,8,6,[-1,"inp",-1],[-1,-1,"sig"]],["out",0,8,7,["ch2","ch1",-1],[-1,-1,-1]]],"params":[["ad",0,"ashp",0.8149999976158142],["ad",1,"ashp",0.41499999165534973],["ad",2,"ashp",0.36000004410743713],["ad",3,"ashp",1.0],["ad",0,"atk",15.0],["ad",1,"atk",8.0],["ad",2,"atk",1000.0],["ad",3,"atk",775.0],["amp",0,"att",1.0],["amp",1,"att",1.0],["amp",2,"att",0.390625],["amp",3,"att",1.0],["noise",0,"atv",0.1300000101327896],["mix3",0,"ch1",0.0],["mix3",1,"ch1",0.0],["mix3",2,"ch1",0.0],["mix3",3,"ch1",0.0],["mix3",4,"ch1",0.0],["mix3",5,"ch1",0.0],["out",0,"ch1",0.0],["mix3",0,"ch2",0.0],["mix3",1,"ch2",0.0],["mix3",2,"ch2",0.0],["mix3",3,"ch2",0.0],["mix3",4,"ch2",0.0],["mix3",5,"ch2",0.0],["out",0,"ch2",0.0],["mix3",0,"ch3",0.0],["mix3",1,"ch3",0.0],["mix3",2,"ch3",0.0],["mix3",3,"ch3",0.0],["mix3",4,"ch3",0.0],["mix3",5,"ch3",0.0],["tseq",0,"clock",0.0],["ad",0,"dcy",1000.0],["ad",1,"dcy",347.9999694824219],["ad",2,"dcy",488.9999694824219],["ad",3,"dcy",18.999998092651367],["sin",0,"det",0.0],["sin",1,"det",4.0],["sin",2,"det",7.0],["sin",3,"det",-0.0],["bosc",0,"det",0.0],["ad",0,"dshp",0.19500002264976501],["ad",1,"dshp",0.14000003039836884],["ad",2,"dshp",0.875],["ad",3,"dshp",0.2849999964237213],["delay",0,"fb",0.6499999761581421],["delay",1,"fb",0.5999999642372131],["quant",0,"freq",577.044189453125],["sin",0,"freq",440.0,0.0],["sin",1,"freq",440.0],["sin",2,"freq",440.0],["sin",3,"freq",0.4296875],["bosc",0,"freq",440.0],["sfilter",0,"freq",1900.0001220703125],["sfilter",1,"freq",440.0],["sfilter",2,"freq",880.0],["comb",0,"g",0.699999988079071],["amp",0,"gain",0.9999999403953552],["amp",1,"gain",0.9999999403953552],["amp",2,"gain",0.9999999403953552],["amp",3,"gain",0.42320001125335693],["out",0,"gain",0.08999998867511749],["mix3",0,"gain1",0.9999999403953552],["mix3",1,"gain1",0.9999999403953552],["mix3",2,"gain1",0.9999999403953552],["mix3",3,"gain1",0.7616416215896606],["mix3",4,"gain1",0.9999999403953552],["mix3",5,"gain1",0.9999999403953552],["mix3",0,"gain2",0.9999999403953552],["mix3",1,"gain2",0.9999999403953552],["mix3",2,"gain2",0.9999999403953552],["mix3",3,"gain2",0.9999999403953552],["mix3",4,"gain2",2.0],["mix3",5,"gain2",0.9999999403953552],["mix3",0,"gain3",0.9999999403953552],["mix3",1,"gain3",0.9999999403953552],["mix3",2,"gain3",0.9999999403953552],["mix3",3,"gain3",0.9999999403953552],["mix3",4,"gain3",0.9999999403953552],["mix3",5,"gain3",0.9999999403953552],["amp",0,"inp",0.0],["amp",1,"inp",0.0],["amp",2,"inp",0.0],["amp",3,"inp",0.0],["ad",0,"inp",1.0],["ad",1,"inp",1.0],["ad",2,"inp",1.0],["ad",3,"inp",1.0],["delay",0,"inp",0.0],["delay",1,"inp",0.0],["comb",0,"inp",0.0],["sfilter",0,"inp",0.0],["sfilter",1,"inp",0.0],["sfilter",2,"inp",0.0],["delay",0,"mix",0.5],["delay",1,"mix",0.5],["quant",0,"oct",0.0],["noise",0,"offs",0.0],["mix3",0,"ogain",0.9999999403953552],["mix3",1,"ogain",0.10315494984388351],["mix3",2,"ogain",0.9999999403953552],["mix3",3,"ogain",0.9999999403953552],["mix3",4,"ogain",0.9999999403953552],["mix3",5,"ogain",0.9999999403953552],["bosc",0,"pw",0.5,-0.25999999046325684],["sfilter",0,"res",0.5],["sfilter",1,"res",0.9099999666213989],["sfilter",2,"res",0.0],["tslfo",0,"rev",0.5],["tslfo",1,"rev",0.5],["tslfo",2,"rev",0.5],["tslfo",3,"rev",0.5],["tslfo",0,"time",1699.99951171875],["tslfo",1,"time",22999.99609375],["tslfo",2,"time",19999.994140625],["tslfo",3,"time",499.99993896484375],["delay",0,"time",256.70001220703125,0.009999999776482582],["delay",1,"time",249.99998474121094,-0.007999999448657036],["comb",0,"time",24.999996185302734],["tseq",0,"trig",0.0],["ad",0,"trig",0.0],["ad",1,"trig",0.0],["ad",2,"trig",0.0],["ad",3,"trig",0.0],["tslfo",0,"trig",0.0],["tslfo",1,"trig",0.0],["tslfo",2,"trig",0.0],["tslfo",3,"trig",0.0],["delay",0,"trig",0.0],["delay",1,"trig",0.0]],"patterns":[{"col_types":[1,3,0,0,0,0],"cursor_col":2,"cursor_row":2,"data":[[60,4071,-1,-1,-1,-1],[64,4071,-1,-1,-1,-1],[69,4071,-1,-1,-1,-1],[-1,4071,-1,-1,-1,-1],[72,4071,-1,-1,-1,-1],[76,4071,-1,-1,-1,-1],[84,4071,-1,-1,-1,-1],[-1,4071,-1,-1,-1,-1],[60,4071,-1,-1,-1,-1],[64,4071,-1,-1,-1,-1],[79,4071,-1,-1,-1,-1],[-1,4071,-1,-1,-1,-1],[72,4071,-1,-1,-1,-1],[76,4071,-1,-1,-1,-1],[65,4071,-1,-1,-1,-1],[-1,4071,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1]],"edit_step":4,"rows":16},null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"props":[]} diff --git a/src/audio.rs b/src/audio.rs index f8400f6..767b309 100644 --- a/src/audio.rs +++ b/src/audio.rs @@ -33,9 +33,18 @@ pub fn setup(event_channel: Receiver) { let color_mix_b_gain = color_mix.inp_param("gain3").unwrap(); let jump_ad = NodeId::Ad(0); let jump_ad_trig = jump_ad.inp_param("trig").unwrap(); + let switch_ad = NodeId::Ad(1); + let switch_ad_trig = switch_ad.inp_param("trig").unwrap(); + let fusion_ad = NodeId::Ad(2); + let fusion_ad_trig = fusion_ad.inp_param("trig").unwrap(); + let fusion_ad2 = NodeId::Ad(3); + let fusion_ad2_trig = fusion_ad2.inp_param("trig").unwrap(); - for (_tick, _now) in Clock::framerate(10.0).iter() { + for (_tick, _now) in Clock::framerate(20.0).iter() { matrix.set_param(jump_ad_trig, (0.0).into()); + matrix.set_param(switch_ad_trig, (0.0).into()); + matrix.set_param(fusion_ad_trig, (0.0).into()); + matrix.set_param(fusion_ad2_trig, (0.0).into()); if let Ok(msg) = event_channel.try_recv() { match msg { @@ -44,7 +53,12 @@ pub fn setup(event_channel: Receiver) { matrix.set_param(color_mix_g_gain, g.into()); matrix.set_param(color_mix_b_gain, b.into()); } + AudioMsg::Fusion => { + matrix.set_param(fusion_ad_trig, (1.0).into()); + matrix.set_param(fusion_ad2_trig, (1.0).into()); + } AudioMsg::Jump => matrix.set_param(jump_ad_trig, (1.0).into()), + AudioMsg::Switch => matrix.set_param(switch_ad_trig, (1.0).into()), } } } diff --git a/src/game.rs b/src/game.rs index 908752a..820b3ad 100644 --- a/src/game.rs +++ b/src/game.rs @@ -14,7 +14,9 @@ use bevy_rapier2d::prelude::*; pub enum AudioMsg { Color([f32; 3]), + Fusion, Jump, + Switch, } #[derive(Clone, Copy, Eq, Hash, PartialEq)] @@ -199,7 +201,6 @@ fn collision_event_system( Ok((c2_color, c2_transform, c2_player))) = (character_query.get(*e1), character_query.get(*e2)) { - // TODO completely remove particles commands.entity(*e1).despawn_recursive(); commands.entity(*e2).despawn_recursive(); @@ -235,6 +236,8 @@ fn collision_event_system( true, ); } + + audio.send(AudioMsg::Fusion).ok(); } } } @@ -276,7 +279,7 @@ fn change_character_system( audio .send(AudioMsg::Color([color.0.r(), color.0.g(), color.0.b()])) .ok(); - audio.send(AudioMsg::Jump).ok(); + audio.send(AudioMsg::Switch).ok(); } player_count += 1; From b42a032cfdc809732f849d9cf175a102a9034bee Mon Sep 17 00:00:00 2001 From: tuxmain Date: Wed, 24 Aug 2022 18:51:18 +0200 Subject: [PATCH 03/13] fix: character fusion without player --- src/game.rs | 119 +++++++++++++++++++------------------------ src/levels.rs | 7 +-- src/levels/level0.rs | 28 +++------- src/levels/level1.rs | 28 +++------- 4 files changed, 67 insertions(+), 115 deletions(-) diff --git a/src/game.rs b/src/game.rs index 820b3ad..a265f88 100644 --- a/src/game.rs +++ b/src/game.rs @@ -6,9 +6,10 @@ pub use crate::filters::*; use crate::AppState; use bevy::{ + ecs::system::EntityCommands, input::{keyboard::KeyCode, Input}, prelude::{shape::Quad, *}, - sprite::Mesh2dHandle, ecs::system::EntityCommands, + sprite::Mesh2dHandle, }; use bevy_rapier2d::prelude::*; @@ -41,9 +42,9 @@ impl Plugin for GamePlugin { .with_system(player_movement_system) .with_system(move_camera) .with_system(character_particle_effect_system), - ) - .add_system_set( - SystemSet::on_update(AppState::Win) + ) + .add_system_set( + SystemSet::on_update(AppState::Win) .with_system(player_movement_system) .with_system(move_camera) .with_system(character_particle_effect_system), @@ -107,34 +108,23 @@ fn setup( ); } -pub fn spawn_characters( +pub fn spawn_characters>( commands: &mut Commands, character_meshes: &Res, materials: &mut ResMut>, audio: &Res>, - transforms: &mut Vec, - colors: &Vec, + characters: I, ) { - spawn_character( - commands, - character_meshes, - materials, - audio, - transforms[0], - colors[0], - true, - ); - - for c in 1 .. transforms.len() { + for (i, (transform, color)) in characters.into_iter().enumerate() { spawn_character( commands, character_meshes, materials, audio, - transforms[c], - colors[c], - false, + transform, + color, + i == 0, ); } } @@ -198,8 +188,8 @@ fn collision_event_system( if flags.is_empty() { if let ( Ok((c1_color, c1_transform, c1_player)), - Ok((c2_color, c2_transform, c2_player))) = - (character_query.get(*e1), character_query.get(*e2)) + Ok((c2_color, c2_transform, c2_player)), + ) = (character_query.get(*e1), character_query.get(*e2)) { commands.entity(*e1).despawn_recursive(); commands.entity(*e2).despawn_recursive(); @@ -215,28 +205,24 @@ fn collision_event_system( } // position character based on current player location - if let Some(_player) = c1_player { - spawn_character( - &mut commands, - &character_meshes, - &mut materials, - &audio, - *c1_transform, - new_color.into(), - true, - ); - } else if let Some(_player) = c2_player { - spawn_character( - &mut commands, - &character_meshes, - &mut materials, - &audio, - *c2_transform, - new_color.into(), - true, - ); - } - + spawn_character( + &mut commands, + &character_meshes, + &mut materials, + &audio, + if c1_player.is_some() { + *c1_transform + } else if c2_player.is_some() { + *c2_transform + } else { + Transform::identity().with_translation( + (c1_transform.translation + c2_transform.translation) / 2., + ) + }, + new_color.into(), + c1_player.is_some() || c2_player.is_some(), + ); + audio.send(AudioMsg::Fusion).ok(); } } @@ -251,14 +237,16 @@ fn change_character_system( characters: Query<(Entity, &CharacterColor, Option<&Player>)>, audio: Res>, ) { - if !keyboard_input.just_pressed(KeyCode::Tab) { return; } + if !keyboard_input.just_pressed(KeyCode::Tab) { + return; + } - let mut player_idx: usize = 0; - let mut player_count: usize = 0; + let mut player_idx: usize = 0; + let mut player_count: usize = 0; // find player idx for (_entity, _color, player) in characters.iter() { - if let Some(_player) = player { + if player.is_some() { player_idx = player_count; } player_count += 1; @@ -279,7 +267,7 @@ fn change_character_system( audio .send(AudioMsg::Color([color.0.r(), color.0.g(), color.0.b()])) .ok(); - audio.send(AudioMsg::Switch).ok(); + audio.send(AudioMsg::Switch).ok(); } player_count += 1; @@ -292,20 +280,19 @@ fn player_movement_system( mut app_state: ResMut>, audio: Res>, ) { + let right_pressed: bool = + keyboard_input.pressed(KeyCode::Right) || keyboard_input.pressed(KeyCode::D); + let left_pressed: bool = + keyboard_input.pressed(KeyCode::Left) || keyboard_input.pressed(KeyCode::A); - let right_pressed: bool = - keyboard_input.pressed(KeyCode::Right) || keyboard_input.pressed(KeyCode::D); - let left_pressed: bool = - keyboard_input.pressed(KeyCode::Left) || keyboard_input.pressed(KeyCode::A); + for mut velocity in characters.iter_mut() { + velocity.linvel.x = 200. * (right_pressed as i8 - left_pressed as i8) as f32; - for mut velocity in characters.iter_mut() { - velocity.linvel.x = 200. * (right_pressed as i8 - left_pressed as i8) as f32; - - if keyboard_input.just_pressed(KeyCode::Space) { - audio.send(AudioMsg::Jump).ok(); - velocity.linvel.y = 500.; - } - } + if keyboard_input.just_pressed(KeyCode::Space) { + audio.send(AudioMsg::Jump).ok(); + velocity.linvel.y = 500.; + } + } if app_state.current() == &AppState::Win && keyboard_input.just_pressed(KeyCode::Return) { app_state.replace(AppState::Game).unwrap(); @@ -349,17 +336,17 @@ fn move_camera( const FOLLOW_SPEED: f32 = std::f32::consts::PI; for character_transform in characters.iter() { - let (camera, mut camera_transform) = - camera_query.single_mut(); + let (camera, mut camera_transform) = camera_query.single_mut(); let size: Vec2 = camera.logical_viewport_size().unwrap(); let half_height: f32 = size.y * 0.5; camera_transform.translation = camera_transform.translation.lerp( - character_transform.translation, time.delta_seconds() * FOLLOW_SPEED + character_transform.translation, + time.delta_seconds() * FOLLOW_SPEED, ); // prevent camera from going too low - camera_transform.translation.y = camera_transform.translation.y.max(half_height-MARGIN); + camera_transform.translation.y = camera_transform.translation.y.max(half_height - MARGIN); // always make sure that camera is away from the object in order to render them camera_transform.translation.z = 999.0; } diff --git a/src/levels.rs b/src/levels.rs index 0d2ce89..a669d0f 100644 --- a/src/levels.rs +++ b/src/levels.rs @@ -15,10 +15,7 @@ pub fn setup_level( camera_query: &mut Query<&mut Transform, With>, level_id: LevelId, ) { - let level_entity = commands - .spawn() - .insert(Level) - .id(); + let level_entity = commands.spawn().insert(Level).id(); current_level.0 = Some(level_id); camera_query.single_mut().translation = Default::default(); @@ -43,7 +40,7 @@ pub fn post_setup_level( asset_server: Res, audio: Res>, ) { - for LevelStartupEvent(level_entity) in level_startup_event.iter() { + for LevelStartupEvent(_level_entity) in level_startup_event.iter() { if let Some(level_id) = current_level.0 { match level_id.0 { 0 => level0::setup( diff --git a/src/levels/level0.rs b/src/levels/level0.rs index 6cec4c4..5b72da6 100644 --- a/src/levels/level0.rs +++ b/src/levels/level0.rs @@ -25,31 +25,15 @@ pub fn setup( .insert(Collider::cuboid(400., 8.)) .insert(Level); - spawn_character( + spawn_characters( commands, character_meshes, materials, audio, - Transform::from_xyz(-128., -64., 0.), - Color::RED, - true, - ); - spawn_character( - commands, - character_meshes, - materials, - audio, - Transform::from_xyz(0., -64., 0.), - Color::GREEN, - false, - ); - spawn_character( - commands, - character_meshes, - materials, - audio, - Transform::from_xyz(128., -64., 0.), - Color::BLUE, - false, + [ + (Transform::from_xyz(-128., -64., 0.), Color::RED), + (Transform::from_xyz(0., -64., 0.), Color::GREEN), + (Transform::from_xyz(128., -64., 0.), Color::BLUE), + ], ); } diff --git a/src/levels/level1.rs b/src/levels/level1.rs index 4699cb1..f26df88 100644 --- a/src/levels/level1.rs +++ b/src/levels/level1.rs @@ -39,32 +39,16 @@ pub fn setup( .insert(Collider::cuboid(200., 8.)) .insert(Level); - spawn_character( + spawn_characters( commands, character_meshes, materials, audio, - Transform::from_xyz(128., 64., 0.), - Color::BLUE, - true, - ); - spawn_character( - commands, - character_meshes, - materials, - audio, - Transform::from_xyz(-128., -128., 0.), - Color::RED, - false, - ); - spawn_character( - commands, - character_meshes, - materials, - audio, - Transform::from_xyz(0., -128., 0.), - Color::GREEN, - false, + [ + (Transform::from_xyz(128., 64., 0.), Color::BLUE), + (Transform::from_xyz(-128., -128., 0.), Color::RED), + (Transform::from_xyz(0., -128., 0.), Color::GREEN), + ], ); commands From 2a4625269f827394400753a93bdac3d6b418f04d Mon Sep 17 00:00:00 2001 From: tuxmain Date: Wed, 24 Aug 2022 23:11:59 +0200 Subject: [PATCH 04/13] Color filter --- Cargo.lock | 133 ++++++++++++++++++++++++++-------------------------- Cargo.toml | 3 +- README.md | 4 +- src/game.rs | 47 ++++++++++++++++--- 4 files changed, 112 insertions(+), 75 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a790240..3ddac41 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -208,9 +208,9 @@ checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" [[package]] name = "bevy" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55f08528a4e59d607460513a823b40f602d013c1a00f57b824f1075d5d48c3cd" +checksum = "fea147ef1ebb92d41294cfad804c40de151b174c711ce6e0a4a40eba23eae1a4" dependencies = [ "bevy_internal", ] @@ -241,9 +241,9 @@ dependencies = [ [[package]] name = "bevy_animation" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e243169af495ad616ff701247c0d3e40078a26ed8de231cf9e54bde6b3c4bb45" +checksum = "a4365465fca7bd78295eb81d0a04afc049399852793d562eb017849bb5d6c55e" dependencies = [ "bevy_app", "bevy_asset", @@ -259,9 +259,9 @@ dependencies = [ [[package]] name = "bevy_app" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d26d6ffdf493609d2fedc1018a2ef0cb4d8e48f6d3bcea56fa2df81867e464" +checksum = "9e4ae0a6ed2adf3b153511b4645241660a93f747c05ecd1e5a909dafc803cad4" dependencies = [ "bevy_derive", "bevy_ecs", @@ -274,9 +274,9 @@ dependencies = [ [[package]] name = "bevy_asset" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d8fb95306d5f18fa70df40632cd984993aeb71e91ce059ae99699098a4f9ce9" +checksum = "2ec773c861a7e9d9978771f59f385500ec6da3a1ab5487705cddb054393d3d19" dependencies = [ "anyhow", "bevy_app", @@ -302,9 +302,9 @@ dependencies = [ [[package]] name = "bevy_audio" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eee08ac575397ce17477dd291862bafa15226334bdfb82c02bbc3d10bad7bdb8" +checksum = "1e5cf4713a24f318841f73a9e030854cfd5bad46bc81fa1acc9590cdab053c6f" dependencies = [ "anyhow", "bevy_app", @@ -318,9 +318,9 @@ dependencies = [ [[package]] name = "bevy_core" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6712146d54fff9e1865362e9f39a7b63c7b037ddb72a3d7bb05b959213fb61e" +checksum = "c53172003d5cde7780870b5403c66c8ede3581faf3e510e916d8b4baa5b538d2" dependencies = [ "bevy_app", "bevy_ecs", @@ -333,9 +333,9 @@ dependencies = [ [[package]] name = "bevy_core_pipeline" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "080bb00399b6d7697e505f871d67c6de8b52eb06b47b0cda2be80c2396805983" +checksum = "5e60efd10d593f6d122f2687f74c09ad55835a8f999c35bed6380ddd8e6ff7f2" dependencies = [ "bevy_app", "bevy_asset", @@ -351,9 +351,9 @@ dependencies = [ [[package]] name = "bevy_derive" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4b8f0786d1fc7e0d35297917be463db3d0886f7bd8d4221ca3d565502579ffb" +checksum = "0e6345431bbe6d7b6c165cd860ecd0b35da929779571259c5df970ac256d45f9" dependencies = [ "bevy_macro_utils", "quote", @@ -362,9 +362,9 @@ dependencies = [ [[package]] name = "bevy_diagnostic" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adab74ee5375fbf5d2b1d3da41de8d1491a8a706d17441b5e31214b65349d692" +checksum = "58ac9f4c2815f412be4b6e21e4b299cdafa710f651d064f6d40b2a8377a0d17c" dependencies = [ "bevy_app", "bevy_ecs", @@ -375,9 +375,9 @@ dependencies = [ [[package]] name = "bevy_ecs" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5643dc27b7d6778e3a66c8e0f6ad1fd33309aa2fa61d935f360ccc85b7be6a2" +checksum = "c174066a24ed8a14d15ea58b0aea1c1f5c763f4bb36ebdc2b1dc78026007d0f5" dependencies = [ "async-channel", "bevy_ecs_macros", @@ -394,9 +394,9 @@ dependencies = [ [[package]] name = "bevy_ecs_macros" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5f2f12677f8725d40930d0a19652f007fe0ef5ac38e23817cfc4930c61f5680" +checksum = "cc50c39e49e8febccc74e8e731680adb0cb4aef1f53275740cbaa95c6da71f4f" dependencies = [ "bevy_macro_utils", "proc-macro2", @@ -419,9 +419,9 @@ dependencies = [ [[package]] name = "bevy_encase_derive" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76a767adc36ce1fc917a736843b026d4de7069d90ed5e669c852481ef69fd5aa" +checksum = "68bc194009c5e9b97da64a08142dd183c264885d99c985cf849868103018adf1" dependencies = [ "bevy_macro_utils", "encase_derive_impl", @@ -429,9 +429,9 @@ dependencies = [ [[package]] name = "bevy_gilrs" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "963940426127533164af2a556971a03c493143c0afb95afadb4a070b6ab8c3df" +checksum = "cb15a3427d9707be92b457e5d66900b02d853b475c21dd8662bdda387ba9f24e" dependencies = [ "bevy_app", "bevy_ecs", @@ -442,9 +442,9 @@ dependencies = [ [[package]] name = "bevy_gltf" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "150cc6782c4472600c2ade5d78c6ce481c992690f0499e63765aba752d7e0f04" +checksum = "79db7d7e71b47a69953fbe8407ded5c6308eaeecf9a05efd5dfb42992f400a16" dependencies = [ "anyhow", "base64", @@ -471,9 +471,9 @@ dependencies = [ [[package]] name = "bevy_hierarchy" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e2e4c20d7c843cd26ef3c5d7b4c20e3e32c275943e2437ecaca1cfd6cfe3b30" +checksum = "5eb1ec76099ea5a716de08ea42ff41f036ebe2502df1d569168b58f16458a85e" dependencies = [ "bevy_app", "bevy_ecs", @@ -484,9 +484,9 @@ dependencies = [ [[package]] name = "bevy_input" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a11c70573fb4d4c056ba32cfa553daa7e6e1245cb876ccfbe322640928b7ee1c" +checksum = "1821c4b760ba6ddb4fe61806e9cc33f40b09a884557aca4553a29b8c7d73c6b4" dependencies = [ "bevy_app", "bevy_ecs", @@ -496,9 +496,9 @@ dependencies = [ [[package]] name = "bevy_internal" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d603b597772130782eab6e604706cbb764fb037f9cf0a1904b6f342845b6f44" +checksum = "ee63ad1e3f95a26ff2c227fadb1534a7bfe3a098e0e45c347f2f2575a573d9bc" dependencies = [ "bevy_animation", "bevy_app", @@ -534,9 +534,9 @@ dependencies = [ [[package]] name = "bevy_log" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cafb12fc84734236e36f407ab62c72d5d4279fa4777e40a95d7cc973cbabcd1" +checksum = "092daf498887814a064331dfcd1cf487a5ddab01fd38629b84a35b8b664462a1" dependencies = [ "android_log-sys", "bevy_app", @@ -549,9 +549,9 @@ dependencies = [ [[package]] name = "bevy_macro_utils" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d081af83b701e16cad209255ba6b383744dfa49efa99eb6505989f293305ab3" +checksum = "43fb5137e5198302d7c6c33d1e454cf48a586e7c6fd12f4860f12863951e16b9" dependencies = [ "quote", "syn", @@ -560,18 +560,18 @@ dependencies = [ [[package]] name = "bevy_math" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db5394e86c5708d3aa506c6e98ec4ed2a4083a7a018c6693d9ac0e77ebfabfc2" +checksum = "531f2b90c7e861a96f418b3d560131b3354c5e67a67eba3953a45a56ea0114d2" dependencies = [ "glam", ] [[package]] name = "bevy_mikktspace" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40b299a61175a6f7e7398f83cd5b50920fd8bad4df674e614ad94f25f8426509" +checksum = "941e7d3d4e1dbb735f040e4cdc1558be1d3c38d43f1d9fdbb039c39a7849a00b" dependencies = [ "glam", ] @@ -599,9 +599,9 @@ dependencies = [ [[package]] name = "bevy_ptr" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d92d5679e89602a18682a37846573dcd1979410179e14204280460ba9fb8713a" +checksum = "9960c19e582b43cebe1894b6679520a4f50802d1cc5b6fa432f8d685ed232f09" [[package]] name = "bevy_rapier2d" @@ -618,9 +618,9 @@ dependencies = [ [[package]] name = "bevy_reflect" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08798e67f2d4e6898ef117d8c99cf3b50a8eebc8da4159e6dad2657a0fbe9a4e" +checksum = "3fc689dd7a7df3b3768884a4754711d406aa302ea48da483c03b52715fa95045" dependencies = [ "bevy_ptr", "bevy_reflect_derive", @@ -637,9 +637,9 @@ dependencies = [ [[package]] name = "bevy_reflect_derive" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19209a7f0238053802b7de04e6724bd90d4ed7d90e87101dbd1b64cca64ff694" +checksum = "8c36fa5100832c787c10558d31632ddc454c221e8dfacbbef836938f59614754" dependencies = [ "bevy_macro_utils", "proc-macro2", @@ -650,9 +650,9 @@ dependencies = [ [[package]] name = "bevy_render" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb49530388ef17cff3fb8bd5e47372fb3cfeb4befc73e3036f6462ac20f049ef" +checksum = "600bcef85c7efac6e38ed725707f0e5b7c59b510430034ba2f743f472493f845" dependencies = [ "anyhow", "bevy_app", @@ -693,9 +693,9 @@ dependencies = [ [[package]] name = "bevy_render_macros" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7d0b7a51fa819c20c64f43856c5aaea40f853050bbb09b9ba3672e5ff2688a5" +checksum = "1be90adc9e5d5808833e363670818da5fe68ccafd7ca983a457f90957d2a430b" dependencies = [ "bevy_macro_utils", "proc-macro2", @@ -705,9 +705,9 @@ dependencies = [ [[package]] name = "bevy_scene" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0064d73ebb0de39901478b493604a1a6d448fd337b66803004c60f41f1fa6c37" +checksum = "a045d575d2c8f776d8ea965363c81660243fefbfc3712ead938b00dfd6797216" dependencies = [ "anyhow", "bevy_app", @@ -753,9 +753,9 @@ dependencies = [ [[package]] name = "bevy_tasks" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff874c91a36eaac3ef957c6f3b590fb71332d9d136671cc858847d56fe9f80a3" +checksum = "719b753acb3d5b9dbfd77038560fe1893c17d4ee0a4242c2ee70da9d59430537" dependencies = [ "async-channel", "async-executor", @@ -768,9 +768,9 @@ dependencies = [ [[package]] name = "bevy_text" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef05a788c2c04aaa5db95b22a8f0fff0d3a0b08a7bcd1a71f050a628b38eec6e" +checksum = "c265b7515faf55a3b92fd6ce0ab65dd246f247e11d737d6f5cdaf49c2be42c63" dependencies = [ "ab_glyph", "anyhow", @@ -791,9 +791,9 @@ dependencies = [ [[package]] name = "bevy_time" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74ec681d641371df81d7bfbcb0eea725ed873f38a094f34b5f7b436f0889e77c" +checksum = "22830665b8476292b861216383fd79922aef2b540f9fd09d49144e3e5e94550e" dependencies = [ "bevy_app", "bevy_ecs", @@ -804,9 +804,9 @@ dependencies = [ [[package]] name = "bevy_transform" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42e1528e35f30bede46a50ee4134f150efc01f5c1002c340b3b2e6a0bfcb8aa5" +checksum = "a4bb8760f03e9667e7499a5ceec1f7630fc3e45702781ac0df56cb969e8ae668" dependencies = [ "bevy_app", "bevy_ecs", @@ -845,9 +845,9 @@ dependencies = [ [[package]] name = "bevy_utils" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bda6dada53e546845887ae7357eec57b8d547ef71627b716b33839b4a98b687" +checksum = "f6e9aa1866c1cf7ee000f281ce9e90d02d701f5c7380a107252017e58e2f5246" dependencies = [ "ahash", "getrandom", @@ -874,9 +874,9 @@ dependencies = [ [[package]] name = "bevy_winit" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57537a56ac4f4e1ffcad95227bcab37cd17b51770dacff82374a2d88be376322" +checksum = "98b15fee4b75472e3441b0c7221467303e4ce59b342a94a328e447e7cdb5a43c" dependencies = [ "approx", "bevy_app", @@ -904,6 +904,7 @@ dependencies = [ "hexodsp", "rand", "rand_distr", + "rapier2d", "ticktock", ] diff --git a/Cargo.toml b/Cargo.toml index f79d249..f50dc6f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,12 +6,13 @@ license = "AGPL-3.0-only" edition = "2021" [dependencies] -bevy = "0.8.0" +bevy = "0.8.1" bevy-inspector-egui = "0.12.1" bevy_rapier2d = "0.16.2" crossbeam-channel = "0.5.6" rand = "0.8.5" rand_distr = "0.4.3" +rapier2d = "0.14.0" [target."cfg(not(target_arch = \"wasm32\"))".dependencies] cpal = "0.14.0" diff --git a/README.md b/README.md index bb59e47..db5e8dc 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,9 @@ ## TODO * name -* color filters +* more filters +* despawn black characters +* despawn character when too far * level design * (?) can jump only from a surface (no mid-air jump) * (?) multiplayer diff --git a/src/game.rs b/src/game.rs index a265f88..f908016 100644 --- a/src/game.rs +++ b/src/game.rs @@ -12,6 +12,7 @@ use bevy::{ sprite::Mesh2dHandle, }; use bevy_rapier2d::prelude::*; +use rapier2d::geometry::CollisionEventFlags; pub enum AudioMsg { Color([f32; 3]), @@ -154,7 +155,6 @@ pub fn spawn_character( .insert(CharacterColor(color)) .insert(RigidBody::Dynamic) .insert(Collider::cuboid(32., 32.)) - .insert(ExternalForce::default()) .insert(Velocity::default()) .insert(GravityScale(10.0)) .insert(LockedAxes::ROTATION_LOCKED) @@ -163,7 +163,6 @@ pub fn spawn_character( linear_damping: 0.5, angular_damping: 0.5, }) - .insert(ExternalImpulse::default()) .insert(ActiveEvents::COLLISION_EVENTS); if is_player { @@ -179,7 +178,13 @@ fn collision_event_system( character_meshes: Res, mut materials: ResMut>, mut collision_events: EventReader, - character_query: Query<(&CharacterColor, &Transform, Option<&Player>)>, + mut character_query: Query<( + &mut CharacterColor, + &Transform, + &mut Handle, + Option<&Player>, + )>, + pass_through_filter_query: Query<(&PassThroughFilter, &FilterColor)>, mut app_state: ResMut>, audio: Res>, ) { @@ -187,8 +192,8 @@ fn collision_event_system( if let CollisionEvent::Started(e1, e2, flags) = collision_event { if flags.is_empty() { if let ( - Ok((c1_color, c1_transform, c1_player)), - Ok((c2_color, c2_transform, c2_player)), + Ok((c1_color, c1_transform, _c1_material, c1_player)), + Ok((c2_color, c2_transform, _c2_material, c2_player)), ) = (character_query.get(*e1), character_query.get(*e2)) { commands.entity(*e1).despawn_recursive(); @@ -225,6 +230,34 @@ fn collision_event_system( audio.send(AudioMsg::Fusion).ok(); } + } else if *flags == CollisionEventFlags::SENSOR { + if let ( + Ok((mut c_color, _c_transform, mut c_material, c_player)), + Ok((filter, filter_color)), + ) = ( + character_query.get_mut(*e1), + pass_through_filter_query.get(*e2), + ) { + c_color.0 = match filter { + PassThroughFilter::Absorbing => Vec4::from(c_color.0) + .mul_add( + -Vec4::from(filter_color.0) * Vec4::from([1., 1., 1., 0.]), + Vec4::from(c_color.0), + ) + .into(), + }; + *c_material = materials.add(ColorMaterial::from(c_color.0)); + + if c_player.is_some() { + audio + .send(AudioMsg::Color([ + c_color.0.r(), + c_color.0.g(), + c_color.0.b(), + ])) + .ok(); + } + } } } } @@ -300,10 +333,10 @@ fn player_movement_system( } fn character_particle_effect_system( - characters: Query<(&Transform, &CharacterColor), With>, + player_character: Query<(&Transform, &CharacterColor), With>, mut particle_effect: ResMut, ) { - for (transform, color) in characters.iter() { + if let Ok((transform, color)) = player_character.get_single() { particle_effect.translation = transform.translation; particle_effect.color = color.0; } From 05ecbbbbec72a03644da6c71b5b4f93ccb9311af Mon Sep 17 00:00:00 2001 From: tuxmain Date: Thu, 25 Aug 2022 08:20:13 +0200 Subject: [PATCH 05/13] Fullscreen & exit controls --- index.html | 1 + src/main.rs | 31 ++++++++++++++++++++++++++++--- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/index.html b/index.html index 30034f5..3b956aa 100644 --- a/index.html +++ b/index.html @@ -2,6 +2,7 @@ + Bevyjam