diff --git a/Cargo.lock b/Cargo.lock index 4a6c522..2f5ad98 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -923,24 +923,6 @@ dependencies = [ "winit", ] -[[package]] -name = "bevyjam" -version = "0.1.0" -dependencies = [ - "bevy", - "bevy-inspector-egui", - "bevy_common_assets", - "bevy_mod_picking", - "bevy_rapier2d", - "crossbeam-channel", - "rand", - "rand_distr", - "rapier2d", - "serde", - "serde_json", - "ticktock", -] - [[package]] name = "bindgen" version = "0.59.2" @@ -2182,9 +2164,9 @@ dependencies = [ [[package]] name = "lock_api" -version = "0.4.7" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53" +checksum = "9f80bf5aacaf25cbfc8210d1cfb718f2bf3b11c4c54e5afe36c236853a8ec390" dependencies = [ "autocfg", "scopeguard", @@ -2199,6 +2181,24 @@ dependencies = [ "cfg-if 1.0.0", ] +[[package]] +name = "lux-synthese" +version = "0.1.0" +dependencies = [ + "bevy", + "bevy-inspector-egui", + "bevy_common_assets", + "bevy_mod_picking", + "bevy_rapier2d", + "crossbeam-channel", + "rand", + "rand_distr", + "rapier2d", + "serde", + "serde_json", + "ticktock", +] + [[package]] name = "mach" version = "0.3.2" @@ -3654,7 +3654,7 @@ dependencies = [ "js-sys", "log", "naga", - "parking_lot 0.11.2", + "parking_lot 0.12.1", "raw-window-handle", "smallvec", "wasm-bindgen", @@ -3679,7 +3679,7 @@ dependencies = [ "fxhash", "log", "naga", - "parking_lot 0.11.2", + "parking_lot 0.12.1", "profiling", "raw-window-handle", "smallvec", @@ -3715,7 +3715,7 @@ dependencies = [ "metal", "naga", "objc", - "parking_lot 0.11.2", + "parking_lot 0.12.1", "profiling", "range-alloc", "raw-window-handle", diff --git a/Cargo.toml b/Cargo.toml index e30f7ef..1b41cff 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "bevyjam" +name = "lux-synthese" version = "0.1.0" authors = ["tuxmain "] license = "AGPL-3.0-only" diff --git a/README.md b/README.md index b53f02d..3aaeb14 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,6 @@ -# Bevyjam +# Lux synthesĕ + +[Play in browser](https://txmn.tk/projects/lux-synthese/) ## Controls @@ -6,20 +8,19 @@ * **Switch character**: Tab * **Level up**: Enter (when character is white) * **Reset**: R +* **Fullscreen**: F11 +* **Exit**: Escape ## TODO -* name * more filters * despawn black characters * despawn character when too far * more levels * (?) multiplayer * more audio -* "jumpable" component to avoid jumping on sensors * bug: in level2, move the blue character to win, then reset. The characters are lighter than expected. (also level 4) * redshift warning -* itchio test ## Build @@ -66,6 +67,6 @@ Edit the level `N: u32` with the command `bevyjam e`. GNU AGPL v3, CopyLeft 2022 Pascal Engélibert, Nixon Cheng -This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, version 3 of the License. -This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. -You should have received a copy of the GNU Affero General Public License along with this program. If not, see https://www.gnu.org/licenses/. +_Lux synthesĕ_ is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, version 3 of the License. +_Lux synthesĕ_ is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. +You should have received a copy of the GNU Affero General Public License along with _Lux synthesĕ_. If not, see https://www.gnu.org/licenses/. diff --git a/assets/UacariLegacy-Bold.ttf b/assets/UacariLegacy-Bold.ttf new file mode 100644 index 0000000..7309e66 Binary files /dev/null and b/assets/UacariLegacy-Bold.ttf differ diff --git a/assets/UacariLegacy-Regular.ttf b/assets/UacariLegacy-Regular.ttf new file mode 100644 index 0000000..7eb6474 Binary files /dev/null and b/assets/UacariLegacy-Regular.ttf differ diff --git a/assets/game.levels.json b/assets/game.levels.json index bd87468..632dd99 100644 --- a/assets/game.levels.json +++ b/assets/game.levels.json @@ -59,10 +59,10 @@ { "pos": [ 0.0, - 0.0 + 64.0 ], "font_size": 32.0, - "text": "Combine the colors to synthetize a white light.\nUse arrows to move." + "text": "Combine the colors\nto synthetize a white light.\nUse arrows to move." } ] }, @@ -374,11 +374,11 @@ "texts": [ { "pos": [ - 0.0, + -304.0, -64.0 ], "font_size": 32.0, - "text": "Too much light\ncause some platforms to melt." + "text": "Too much light\ncauses some platforms to melt." } ] }, diff --git a/build-itchio.sh b/build-itchio.sh new file mode 100644 index 0000000..2657220 --- /dev/null +++ b/build-itchio.sh @@ -0,0 +1,13 @@ +sh build-wasm.sh || exit 1 + +mkdir -p target/itchio/wasm/target +mkdir -p target/itchio/wasm/assets + +cp assets/* target/itchio/wasm/assets/ +cp index.html target/itchio/wasm/ +cp target/lux-synthese.js target/itchio/wasm/target/ +cp target/lux-synthese_bg.wasm target/itchio/wasm/target/ +jq -c < assets/game.levels.json > target/itchio/wasm/assets/game.levels.json + +cd target/itchio/wasm +zip -r ../wasm.zip . diff --git a/build-wasm.sh b/build-wasm.sh index 0a2d039..793798d 100644 --- a/build-wasm.sh +++ b/build-wasm.sh @@ -1,3 +1,3 @@ cargo build --release --target wasm32-unknown-unknown || exit 1 echo "==> wasm-bindgen..." -wasm-bindgen --out-name bevyjam --out-dir target --target web target/wasm32-unknown-unknown/release/bevyjam.wasm || exit 1 +wasm-bindgen --out-name lux-synthese --out-dir target --target web target/wasm32-unknown-unknown/release/lux-synthese.wasm || exit 1 diff --git a/cover.png b/cover.png new file mode 100644 index 0000000..282923f Binary files /dev/null and b/cover.png differ diff --git a/cover.xcf b/cover.xcf new file mode 100644 index 0000000..9a7f4b5 Binary files /dev/null and b/cover.xcf differ diff --git a/index.html b/index.html index 4674d60..6498daa 100644 --- a/index.html +++ b/index.html @@ -2,12 +2,88 @@ - Bevyjam + Lux synthesĕ + +
+

Lux synthesĕ

+

+ Note: audio does not work in the WASM build. +

+

Controls

+
    +
  • Move: Arrows
  • +
  • Switch: Tab
  • +
  • Level up: Enter
  • +
  • Reset: R
  • +
+

Source

+

+ The source code of this free software is available in our Git repository. +

+

+ GNU AGPL v3: CopyLeft 2022 Pascal Engélibert, Nixon Cheng
+ Lux synthesĕ is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, version 3 of the License.
+ Lux synthesĕ is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
+ You should have received a copy of the GNU Affero General Public License along with Lux synthesĕ. If not, see https://www.gnu.org/licenses/. +

+
diff --git a/src/game.rs b/src/game.rs index 349e127..09e87a2 100644 --- a/src/game.rs +++ b/src/game.rs @@ -54,7 +54,10 @@ impl Plugin for GamePlugin { .add_system_to_stage(CoreStage::PostUpdate, char_char_collision_event_system) .add_system_to_stage(CoreStage::PostUpdate, char_platform_collision_event_system) // collision event system might remove items, therefore, we should detect platforms first before removing them - .add_system_to_stage(CoreStage::PostUpdate, collision_event_system.after(char_platform_collision_event_system)); + .add_system_to_stage( + CoreStage::PostUpdate, + collision_event_system.after(char_platform_collision_event_system), + ); } } @@ -118,7 +121,7 @@ impl PlatformCount { } fn is_landed(&self) -> bool { - return self.0 != 0; + self.0 != 0 } } @@ -280,7 +283,7 @@ pub fn spawn_melty_platform( .insert(Collider::cuboid(48., 8.)) .insert(Melty(color)) .insert(Level) - .insert(Platform) + .insert(Platform) .with_children(|c| { c.spawn_bundle(SpriteBundle { texture: asset_server.get_handle("melty.png"), @@ -294,12 +297,7 @@ fn char_char_collision_event_system( mut commands: Commands, mut collision_events: EventReader, - character_query: Query<( - &mut CharacterColor, - &Transform, - &mut Handle, - Option<&Player>, - )>, + character_query: Query<(&CharacterColor, &Transform, Option<&Player>)>, mut character_list: ResMut, mut app_state: ResMut>, @@ -311,16 +309,16 @@ fn char_char_collision_event_system( for collision_event in collision_events.iter() { if let CollisionEvent::Started(e1, e2, _flags) = collision_event { if let ( - Ok((c1_color, c1_transform, _c1_material, c1_player)), - Ok((c2_color, c2_transform, _c2_material, c2_player)), + Ok((c1_color, c1_transform, c1_player)), + Ok((c2_color, c2_transform, c2_player)), ) = (character_query.get(*e1), character_query.get(*e2)) { character_list.0.remove(e1); character_list.0.remove(e2); commands.entity(*e1).despawn_recursive(); commands.entity(*e2).despawn_recursive(); - let new_color = (Vec4::from(c1_color.0) + Vec4::from(c2_color.0)) - .clamp(Vec4::ZERO, Vec4::ONE); + let new_color = + (Vec4::from(c1_color.0) + Vec4::from(c2_color.0)).clamp(Vec4::ZERO, Vec4::ONE); // If color approximately white if app_state.current() == &AppState::Game && new_color.min_element() >= 0.9 { @@ -359,36 +357,32 @@ fn char_platform_collision_event_system( ) { // detect platform + player collisions only for collision_event in collision_events.iter() { - match collision_event { + match collision_event { CollisionEvent::Started(e1, e2, flags) => { if *flags == CollisionEventFlags::SENSOR { - if let (Ok(mut platform_count), Ok(_)) = ( - platform_count_query.get_mut(*e1), - platform_query.get(*e2), - ) { + if let (Ok(mut platform_count), Ok(_)) = + (platform_count_query.get_mut(*e1), platform_query.get(*e2)) + { platform_count.increment(); - } else if let (Ok(mut platform_count), Ok(_)) = ( - platform_count_query.get_mut(*e2), - platform_query.get(*e1), - ) { + } else if let (Ok(mut platform_count), Ok(_)) = + (platform_count_query.get_mut(*e2), platform_query.get(*e1)) + { platform_count.increment(); - } + } } } - + CollisionEvent::Stopped(e1, e2, flags) => { if *flags == CollisionEventFlags::SENSOR { - if let (Ok(mut platform_count), Ok(_)) = ( - platform_count_query.get_mut(*e1), - platform_query.get(*e2), - ) { - platform_count.decrement(); - } else if let (Ok(mut platform_count), Ok(_)) = ( - platform_count_query.get_mut(*e2), - platform_query.get(*e1), - ) { - platform_count.decrement(); - } + if let (Ok(mut platform_count), Ok(_)) = + (platform_count_query.get_mut(*e1), platform_query.get(*e2)) + { + platform_count.decrement(); + } else if let (Ok(mut platform_count), Ok(_)) = + (platform_count_query.get_mut(*e2), platform_query.get(*e1)) + { + platform_count.decrement(); + } } } } diff --git a/src/main.rs b/src/main.rs index 65d8dae..dafcd9e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -13,7 +13,7 @@ mod audio_system; use bevy::{ asset::{Asset, HandleId, LoadState}, prelude::*, - window::{WindowId, WindowMode}, + window::{WindowMode, WindowResizeConstraints}, }; use bevy_common_assets::json::JsonAssetPlugin; use bevy_rapier2d::prelude::*; @@ -52,6 +52,19 @@ fn main() { let mut app = App::new(); app.insert_resource(Msaa { samples: 4 }) + .insert_resource(WindowDescriptor { + width: 640.0, + height: 480.0, + resize_constraints: WindowResizeConstraints { + min_width: 256., + min_height: 256., + max_width: f32::INFINITY, + max_height: f32::INFINITY, + }, + resizable: true, + title: "Lux synthesĕ".into(), + ..Default::default() + }) .insert_resource(UseEditor(use_editor)) .add_state(AppState::Loading) .insert_resource(game::FirstLevel(first_level)) @@ -82,12 +95,7 @@ fn main() { .run(); } -fn setup(mut commands: Commands, mut windows: ResMut, asset_server: Res) { - windows - .get_mut(WindowId::primary()) - .unwrap() - .set_title(String::from("Bevyjam")); - +fn setup(mut commands: Commands, asset_server: Res) { let mut assets = LoadingAssets(Vec::new()); commands.insert_resource( assets.add(asset_server.load::("game.levels.json")), diff --git a/src/menu.rs b/src/menu.rs index f35f024..0fd8a8f 100644 --- a/src/menu.rs +++ b/src/menu.rs @@ -39,7 +39,7 @@ fn setup(mut commands: Commands, asset_server: Res) { commands .spawn_bundle(Text2dBundle { text: Text::from_section( - "BEVYJAM", + "Lux synthesĕ", TextStyle { font: font.clone(), font_size: 96.0, diff --git a/src/particle_effect.rs b/src/particle_effect.rs index 4912d46..146ac73 100644 --- a/src/particle_effect.rs +++ b/src/particle_effect.rs @@ -143,6 +143,6 @@ fn particle_effect_system( / particle_effect.radius_squared, ); } - transform.translation.z = 0.005; + transform.translation.z = 0.005; } }