use bevy::anti_alias::fxaa::Fxaa; use bevy::asset::RenderAssetUsages; use bevy::core_pipeline::tonemapping::DebandDither; use bevy::post_process::bloom::Bloom; use bevy::render::render_resource::{Extent3d, TextureDimension, TextureFormat}; use bevy::window::PrimaryWindow; use crate::prelude::*; use crate::ecs::{Me, ORBIT_LAYER, OrbitCamera, Part, STARGUIDE_LAYER, StarguideCamera, StarguideMe, StarguideOrbit, StarguideOrbitImage}; pub fn starguide_init_plugin(app: &mut App) { app .add_systems(Startup, init_starguide) .add_systems(Update, player_init) .add_systems(Update, player_position_update); } pub fn init_starguide( mut images: ResMut>, window: Single<&Window, With>, mut commands: Commands, ) { commands.spawn((Camera2d::default(), Camera { is_active: false, clear_color: ClearColorConfig::Custom(Color::linear_rgba(0.0, 0.0, 0.0, 1.0)), order: 0, ..default() })) .insert(ORBIT_LAYER) .insert(OrbitCamera); commands.spawn((Camera2d::default(), Camera { is_active: false, //clear_color: ClearColorConfig::None, clear_color: ClearColorConfig::Custom(Color::linear_rgba(0.0, 0.0, 0.0, 1.0)), order: 1, ..default() })) .insert(Bloom::default()) .insert(DebandDither::Enabled) .insert(Fxaa::default()) .insert(STARGUIDE_LAYER) .insert(StarguideCamera); let image = Image::new_fill( Extent3d { width: window.width() as u32, height: window.height() as u32, depth_or_array_layers: 1, }, TextureDimension::D2, &(Color::BLACK.to_srgba().to_u8_array()), TextureFormat::Rgba8UnormSrgb, RenderAssetUsages::MAIN_WORLD | RenderAssetUsages::RENDER_WORLD, ); let handle = images.add(image); commands.spawn((Sprite::from_image(handle.clone()), STARGUIDE_LAYER, StarguideOrbit)) .insert(Transform::from_xyz(0.0, 0.0, -10.0)); commands.insert_resource(StarguideOrbitImage(handle)); } pub fn player_init( me: Single<(Entity, &Sprite, &Part), Added>, mut commands: Commands, asset_server: Res, ) { let mut sprite = Sprite::from_image(asset_server.load(&me.2.strong_config.part.sprite_connected)); sprite.custom_size = Some(Vec2::new( me.2.strong_config.physics.width, me.2.strong_config.physics.height, )); commands.spawn((sprite, StarguideMe, STARGUIDE_LAYER, Transform::from_scale(Vec3::splat(10.0)))); } fn player_position_update( me: Single<&Transform, (Changed, With)>, //mut orbit: Single<&mut Transform, (With, Without)>, mut starguide_me: Single<&mut Transform, (With, Without, Without)>, ) { starguide_me.translation = me.translation; starguide_me.rotation = me.rotation; }