From 8862b7da90a15e913d6a931a6c6aed8f04dc76f7 Mon Sep 17 00:00:00 2001 From: core Date: Sat, 5 Jul 2025 21:11:06 -0400 Subject: [PATCH] feat: bloom! --- Cargo.lock | 4 - crates/unified/Cargo.toml | 6 - crates/unified/assets/config/planets.pc.toml | 1 + crates/unified/assets/config/world.wc.toml | 1 + .../unified/assets/textures/hearty_heart.png | Bin 0 -> 56817 bytes .../assets/vector_textures/hearty_heart.svg | 246 ++++++++++++++++++ crates/unified/src/client/key_input.rs | 18 +- crates/unified/src/client/mod.rs | 26 +- .../src/client/planet/incoming_planets.rs | 42 ++- .../unified/src/client/planet/indicators.rs | 1 - crates/unified/src/client_plugins.rs | 3 +- crates/unified/src/config/planet.rs | 8 + crates/unified/src/config/world.rs | 1 + crates/unified/src/server/player.rs | 10 +- 14 files changed, 333 insertions(+), 34 deletions(-) create mode 100644 crates/unified/assets/textures/hearty_heart.png create mode 100644 crates/unified/assets/vector_textures/hearty_heart.svg diff --git a/Cargo.lock b/Cargo.lock index 5e961084abc1c9b76935aa7fad0f57cd9604de42..a0a3e6b97c94428204d4f7176fc46e56786e8c26 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7647,7 +7647,6 @@ version = "0.1.0" dependencies = [ "aeronet", "aeronet_replicon", - "aeronet_transport", "aeronet_websocket", "bevy 0.16.1", "bevy_common_assets", @@ -7657,15 +7656,12 @@ dependencies = [ "clap", "console_error_panic_hook", "getrandom 0.3.3", - "log", - "ordered-float 5.0.0", "rand 0.9.1", "serde", "tracing-subscriber", "tracing-wasm", "url", "wasm-bindgen", - "web-time 1.1.0", ] [[package]] diff --git a/crates/unified/Cargo.toml b/crates/unified/Cargo.toml index ee7c021908de20351b213fabf882d88b1e6cf2b4..148970459010c6020538655c9c2d3b78059729fc 100644 --- a/crates/unified/Cargo.toml +++ b/crates/unified/Cargo.toml @@ -35,24 +35,18 @@ clap = { version = "4", features = ["derive", "cargo"] } url = "2" tracing-subscriber = "0.3" -log = { version = "*", features = ["max_level_debug", "release_max_level_warn"] } serde = { version = "1", features = ["derive"] } rand = "0.9" getrandom = { version = "0.3", features = [] } -web-time = "1" - aeronet = "0.14" aeronet_replicon = { version = "0.15", features = ["client"] } -aeronet_transport = "0.14" aeronet_websocket = { version = "0.14", features = ["client"] } bevy_enoki = "0.4" -ordered-float = "5" - [target.'cfg(not(target_arch = "wasm32"))'.dependencies] [target.'cfg(target_arch = "wasm32")'.dependencies] diff --git a/crates/unified/assets/config/planets.pc.toml b/crates/unified/assets/config/planets.pc.toml index bff67bb7ffc300171a04da458ce90e9a1cf97ded..a974824217387dd7151bc4f6bae9fa0e77768799 100644 --- a/crates/unified/assets/config/planets.pc.toml +++ b/crates/unified/assets/config/planets.pc.toml @@ -4,6 +4,7 @@ sprite = "textures/sun.png" radius = 20_000.0 # m mass = 16_000_000.0 # kg default_transform = [0.0, 0.0, 0.0] +special_sprite_properties = { DrawAsCircle = { Oklcha = { lightness = 10.0, chroma = 0.058, hue = 104.26, alpha = 1.0 } } } [[planets]] name = "Mercury" diff --git a/crates/unified/assets/config/world.wc.toml b/crates/unified/assets/config/world.wc.toml index 7640dfeafade42bc1503706101d3fc942eea8ea0..838ad2ac2287adc69558ceb7e3e880eef56163d8 100644 --- a/crates/unified/assets/config/world.wc.toml +++ b/crates/unified/assets/config/world.wc.toml @@ -8,3 +8,4 @@ default_mass = 100 [hearty] thrust = 50000 +spawn_at = "Earth" \ No newline at end of file diff --git a/crates/unified/assets/textures/hearty_heart.png b/crates/unified/assets/textures/hearty_heart.png new file mode 100644 index 0000000000000000000000000000000000000000..8ee216d348268481fac59f6068e5cd6e6e0ae2f2 GIT binary patch literal 56817 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/crates/unified/src/client/key_input.rs b/crates/unified/src/client/key_input.rs index 6755843c9bf1874476f2f01e0bd1cdfc4608557d..76c3a4b20045f7595017fe3ab5380e625ac2240f 100644 --- a/crates/unified/src/client/key_input.rs +++ b/crates/unified/src/client/key_input.rs @@ -3,14 +3,26 @@ use bevy::{ ecs::{event::EventWriter, system::Res}, input::{ButtonInput, keyboard::KeyCode}, }; - +use bevy::prelude::ResMut; +use bevy_rapier2d::render::DebugRenderContext; use crate::ecs::ThrustEvent; pub fn key_input_plugin(app: &mut App) { - app.add_systems(Update, directional_keys); + app.add_systems(Update, directional_keys) + .add_systems(Update, debug_render_keybind); } -pub fn directional_keys( +fn debug_render_keybind( + keys: Res>, + mut debug_render: ResMut +) { + if keys.just_pressed(KeyCode::F3) { + debug_render.enabled = !debug_render.enabled; + } +} + + +fn directional_keys( keys: Res>, mut thrust_event: EventWriter, ) { diff --git a/crates/unified/src/client/mod.rs b/crates/unified/src/client/mod.rs index 3a1e353e9701c204f418518646186c0a52f4d993..8051bba09982b10be122ab7dd0e5a39265bd938e 100644 --- a/crates/unified/src/client/mod.rs +++ b/crates/unified/src/client/mod.rs @@ -13,9 +13,11 @@ use planet::incoming_planets::incoming_planets_plugin; use crate::client::key_input::key_input_plugin; use crate::client::starfield::starfield_plugin; use crate::client::ui::ui_plugin; -use crate::ecs::{CursorWorldCoordinates, MainCamera, Player}; +use crate::ecs::{CursorWorldCoordinates, MainCamera, Part, Player}; use aeronet_websocket::client::WebSocketClient; +use bevy::core_pipeline::bloom::Bloom; use bevy::core_pipeline::fxaa::Fxaa; +use bevy::core_pipeline::tonemapping::DebandDither; use bevy::prelude::*; use bevy::window::PrimaryWindow; use bevy_replicon::shared::server_entity_map::ServerEntityMap; @@ -56,14 +58,24 @@ pub struct Me; fn find_me( mut commands: Commands, - q_clients: Query<(Entity, &Player), Added>, + q_clients: Query<(Entity, &Player, &Part), Added>, entity_map: Res, + asset_server: Res, ) { - for (entity, player) in q_clients.iter() { + for (entity, player, part) in q_clients.iter() { let this_id_clientside = entity_map.to_client().get(&player.client).unwrap(); if *this_id_clientside == entity { info!("hi! i've been found!"); commands.entity(entity).insert(Me); + let mut heart_sprite = Sprite::from_image(asset_server.load("sprites/heart_sprite.png")); + heart_sprite.custom_size = Some(Vec2::new(part.width, part.height)); + heart_sprite.color = Color::srgb(20.0, 0.0, 0.0); + + commands.spawn(( + ChildOf(entity), + heart_sprite, + Transform::from_xyz(0.0, 0.0, 10.0) + )); } } } @@ -71,7 +83,13 @@ fn find_me( fn setup_graphics(mut commands: Commands) { commands .spawn(Camera2d) - .insert(Camera { ..default() }) + .insert(Camera { + hdr: true, + clear_color: ClearColorConfig::Custom(Color::BLACK), + ..default() + }) + .insert(Bloom::default()) + .insert(DebandDither::Enabled) .insert(Fxaa::default()) .insert(MainCamera); } diff --git a/crates/unified/src/client/planet/incoming_planets.rs b/crates/unified/src/client/planet/incoming_planets.rs index 1ca421495b66caef5e049121e60cac7eacd23e0f..0746488ffeb0f367026ca8160f295a138feb0b24 100644 --- a/crates/unified/src/client/planet/incoming_planets.rs +++ b/crates/unified/src/client/planet/incoming_planets.rs @@ -1,4 +1,4 @@ -use crate::config::planet::Planet; +use crate::config::planet::{Planet, SpecialSpriteProperties}; use bevy::prelude::*; use bevy_rapier2d::prelude::AdditionalMassProperties; @@ -10,15 +10,26 @@ fn handle_incoming_planets( mut commands: Commands, new_planets: Query<(Entity, &Planet), Added>, asset_server: Res, + mut meshes: ResMut>, + mut materials: ResMut> ) { for (new_entity, new_planet) in new_planets.iter() { let mut sprite = Sprite::from_image(asset_server.load(&new_planet.sprite)); sprite.custom_size = Some(Vec2::new(new_planet.radius * 2.0, new_planet.radius * 2.0)); - commands - .entity(new_entity) - .insert(sprite) - .insert(AdditionalMassProperties::Mass(new_planet.mass)); + match new_planet.special_sprite_properties { + Some(SpecialSpriteProperties::ForceColor(c)) => { + sprite.color = c; + }, + _ => {} + } + + let mut commands = commands + .entity(new_entity); + + commands.insert(AdditionalMassProperties::Mass(new_planet.mass)) + .insert(sprite); + info!(?new_planet, "prepared new planet"); } } @@ -26,6 +37,8 @@ fn handle_updated_planets( mut commands: Commands, updated_planets: Query<(Entity, &Planet), Changed>, asset_server: Res, + mut meshes: ResMut>, + mut materials: ResMut> ) { for (updated_entity, updated_planet) in updated_planets.iter() { let mut sprite = Sprite::from_image(asset_server.load(&updated_planet.sprite)); @@ -34,12 +47,21 @@ fn handle_updated_planets( updated_planet.radius * 2.0, )); - commands - .entity(updated_entity) + match updated_planet.special_sprite_properties { + Some(SpecialSpriteProperties::ForceColor(c)) => { + sprite.color = c; + }, + _ => {} + } + + let mut commands = commands.entity(updated_entity); + commands.remove::() + .insert(AdditionalMassProperties::Mass(updated_planet.mass)) .remove::() - .remove::() - .insert(sprite) - .insert(AdditionalMassProperties::Mass(updated_planet.mass)); + .insert(sprite); + + + info!(?updated_planet, "updated planet"); } } diff --git a/crates/unified/src/client/planet/indicators.rs b/crates/unified/src/client/planet/indicators.rs index b8a6fd310fef97f7e8dfd039db39ce1db142440d..01139c7d0963d5cdbae926344ffa6bb9d3987a5d 100644 --- a/crates/unified/src/client/planet/indicators.rs +++ b/crates/unified/src/client/planet/indicators.rs @@ -1,6 +1,5 @@ use bevy::prelude::*; use bevy::window::PrimaryWindow; -use ordered_float::OrderedFloat; use crate::client::Me; use crate::config::planet::Planet; diff --git a/crates/unified/src/client_plugins.rs b/crates/unified/src/client_plugins.rs index 8048d56817860a3e237b4ed51a33ea1a1f3bf033..210918e1bcc0101f6e6d3efdc91a1d5e8250debf 100644 --- a/crates/unified/src/client_plugins.rs +++ b/crates/unified/src/client_plugins.rs @@ -5,6 +5,7 @@ use bevy::DefaultPlugins; use bevy::app::{PluginGroup, PluginGroupBuilder}; use bevy::log::LogPlugin; use bevy_enoki::EnokiPlugin; +use bevy_rapier2d::prelude::RapierDebugRenderPlugin; use bevy_replicon::RepliconPlugins; pub struct ClientPluginGroup { @@ -21,6 +22,6 @@ impl PluginGroup for ClientPluginGroup { .add(ClientPlugin { server: self.server, }) - //.add(RapierDebugRenderPlugin::default()) + .add(RapierDebugRenderPlugin::default().disabled()) } } diff --git a/crates/unified/src/config/planet.rs b/crates/unified/src/config/planet.rs index c0835a50986fe980fdaae29be66129adc3431880..b45ad9bb39580514a08673971993530e4049ad45 100644 --- a/crates/unified/src/config/planet.rs +++ b/crates/unified/src/config/planet.rs @@ -1,4 +1,5 @@ use bevy::asset::Asset; +use bevy::color::Color; use bevy::prelude::{Bundle, Component, Transform, TypePath}; use bevy_rapier2d::prelude::{AdditionalMassProperties, Collider, ReadMassProperties, RigidBody}; use serde::{Deserialize, Serialize}; @@ -12,8 +13,15 @@ pub struct Planet { pub radius: f32, pub mass: f32, pub default_transform: [f32; 3], + pub special_sprite_properties: Option, } +#[derive(Deserialize, TypePath, Serialize, Clone, Debug)] +pub enum SpecialSpriteProperties { + ForceColor(Color) +} + + #[derive(Bundle)] pub struct PlanetBundle { pub planet: Planet, diff --git a/crates/unified/src/config/world.rs b/crates/unified/src/config/world.rs index 8ecf0bdaf52c9d9b8dc5d143175fa215b679244f..dc1393964c25d2ae81e2aced29fd3e18a9ee88ae 100644 --- a/crates/unified/src/config/world.rs +++ b/crates/unified/src/config/world.rs @@ -24,4 +24,5 @@ pub struct PartConfig { #[derive(Deserialize, Asset, TypePath, Clone)] pub struct HeartyConfig { pub thrust: f32, + pub spawn_at: String, } diff --git a/crates/unified/src/server/player.rs b/crates/unified/src/server/player.rs index e1f217672f77cfbc1ded350d0090acbf85fb3832..0ccb896f9b70664db11d65dfeffd3731869dde92 100644 --- a/crates/unified/src/server/player.rs +++ b/crates/unified/src/server/player.rs @@ -35,16 +35,16 @@ fn handle_new_players( for joined_player in &q_new_clients { info!(?joined_player, "detected joined player!"); // find earth - let (earth_pos, earth_planet) = planets + let (spawn_planet_pos, spawn_planet) = planets .iter() - .find(|p| p.1.name == "Earth") - .expect("earth is missing? (check that the planet is named 'Earth')"); + .find(|p| p.1.name == wc.hearty.spawn_at) + .expect(format!("spawn planet {} is missing? (check that the planet is named exactly '{}')", wc.hearty.spawn_at, wc.hearty.spawn_at).as_str()); let angle = rand::random::() * std::f32::consts::TAU; - let offset = earth_planet.radius + 150.0; + let offset = spawn_planet.radius + 150.0; let mut new_transform = Transform::from_xyz(angle.cos() * offset, angle.sin() * offset, 0.0); new_transform.rotate_z(angle); - new_transform.translation += earth_pos.translation; + new_transform.translation += spawn_planet_pos.translation; info!(?new_transform, "set player's position!");