use bevy::core_pipeline::experimental::taa::{TemporalAntiAliasBundle, TemporalAntiAliasPlugin, TemporalAntiAliasing}; use bevy::core_pipeline::prepass::DepthPrepass; use bevy::input::mouse::{MouseMotion, MouseScrollUnit, MouseWheel}; use bevy::prelude::*; use bevy::window::{CursorGrabMode, PrimaryWindow}; use shared::sets::GameplaySet; use shared::tags::MainCamera; use world_generation::hex_utils::HexCoord; use world_generation::prelude::Map; use world_generation::states::GeneratorState; use super::components::*; pub struct PhosCameraPlugin; impl Plugin for PhosCameraPlugin { fn build(&self, app: &mut App) { app.register_type::(); app.register_type::(); app.add_systems(PreStartup, setup); app.add_systems(Update, orbit_camera_upate.in_set(GameplaySet)); app.add_systems(Update, init_bounds.run_if(in_state(GeneratorState::SpawnMap))); app.add_plugins(TemporalAntiAliasPlugin); } } fn init_bounds( mut commands: Commands, mut cam: Query<(&mut Transform, Entity), With>, heightmap: Res, ) { let (mut cam_t, cam_entity) = cam.single_mut(); cam_t.translation = heightmap.get_center(); commands .entity(cam_entity) .insert(CameraBounds::from_size(heightmap.get_world_size())) .insert(PhosOrbitCamera { target: heightmap.get_center_with_height(), ..Default::default() }); } fn setup(mut commands: Commands) { commands .spawn(( Camera3d::default(), Transform::from_xyz(0., 30., 0.).looking_to(Vec3::NEG_Z, Vec3::Y), PhosCamera::default(), MainCamera, DepthPrepass, PhosOrbitCamera::default(), TemporalAntiAliasing::default(), )) .insert(Msaa::Off); // .insert(RenderLayers::layer(0)) // *msaa = Msaa::Off; } fn orbit_camera_upate( mut cam_query: Query<(&mut Transform, &PhosCamera, &mut PhosOrbitCamera, &CameraBounds)>, mut wheel: EventReader, mut mouse_motion: EventReader, mouse: Res>, mut window_query: Query<&mut Window, With>, key: Res>, time: Res