use bevy::core_pipeline::experimental::taa::{TemporalAntiAliasBundle, TemporalAntiAliasPlugin}; 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, rts_camera_system.in_set(GameplaySet)); // app.add_systems(PostUpdate, limit_camera_bounds.in_set(GameplaySet)); app.add_systems(Update, orbit_camera_upate.in_set(GameplaySet)); app.add_systems(Update, init_bounds.run_if(in_state(GeneratorState::SpawnMap))); //Free Cam //app.add_systems(Update, (grab_mouse, (update_camera, update_camera_mouse).chain())); 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, mut msaa: ResMut) { commands .spawn(( Camera3dBundle { transform: Transform::from_xyz(0., 30., 0.).looking_to(Vec3::NEG_Z, Vec3::Y), ..default() }, PhosCamera::default(), MainCamera, DepthPrepass, PhosOrbitCamera::default(), )) // .insert(RenderLayers::layer(0)) .insert(TemporalAntiAliasBundle::default()); *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