Everything except animation buttons are donegit grep ui_active

main
Elijah Voigt 2 years ago
parent f6384c036e
commit 822c2de042

@ -5,9 +5,9 @@ pub struct EditorAssetsPlugin;
impl Plugin for EditorAssetsPlugin { impl Plugin for EditorAssetsPlugin {
fn build(&self, app: &mut App) { fn build(&self, app: &mut App) {
app.add_systems(Startup, reload_assets) app.init_resource::<AssetRegistry>()
.add_systems(Startup, reload_assets)
.add_systems(Update, reload_assets.run_if(ui::activated::<ReloadAssets>)) .add_systems(Update, reload_assets.run_if(ui::activated::<ReloadAssets>))
.init_resource::<AssetRegistry>()
.add_systems(Update, clear_assets.run_if(ui::activated::<ClearAssets>)); .add_systems(Update, clear_assets.run_if(ui::activated::<ClearAssets>));
} }
} }

@ -8,13 +8,13 @@ impl Plugin for EditorAudioPlugin {
fn build(&self, app: &mut App) { fn build(&self, app: &mut App) {
app.register_type::<AudioRoot>() app.register_type::<AudioRoot>()
.add_event::<ControlAudio>() .add_event::<ControlAudio>()
.add_systems(Update, audio_ui)
.add_systems(Update, ui_control_audio)
.add_systems(Update, ui_active::<AudioSource>) .add_systems(Update, ui_active::<AudioSource>)
.add_systems(Update, ui_inactive::<AudioSource>) .add_systems(Update, ui_inactive::<AudioSource>)
.add_systems(Update, control_audio)
.add_systems(Update, sync_asset_buttons::<AudioSource>) .add_systems(Update, sync_asset_buttons::<AudioSource>)
.add_systems(Update, sync_remove_asset_buttons::<AudioSource>); .add_systems(Update, sync_remove_asset_buttons::<AudioSource>)
.add_systems(Update, audio_ui)
.add_systems(Update, ui_control_audio)
.add_systems(Update, control_audio);
} }
} }

@ -6,7 +6,8 @@ pub struct EditorCameraPlugin;
impl Plugin for EditorCameraPlugin { impl Plugin for EditorCameraPlugin {
fn build(&self, app: &mut App) { fn build(&self, app: &mut App) {
app.add_systems(Update, cameras_ui) app.add_systems(Update, cameras_ui)
.add_systems(Update, manage_active_camera) .add_systems(Update, control_active_camera)
.add_systems(Update, ui_control_active_camera)
.add_systems(Update, fallback_camera); .add_systems(Update, fallback_camera);
} }
} }
@ -42,17 +43,46 @@ pub fn cameras_ui(
} }
/// Set the camera active component based on button clicks /// Set the camera active component based on button clicks
pub fn manage_active_camera( pub fn control_active_camera(
events: Query<&ui::TargetEntity, Added<ui::Active>>, events: Query<(Entity, &Camera), Changed<Camera>>,
buttons: Query<(Entity, &ui::TargetEntity)>,
mut commands: Commands,
) {
events
.iter()
.filter_map(|(e, c)| {
buttons
.iter()
.find_map(|(button, ui::TargetEntity { entity })| {
(e == *entity).then_some((button, c))
})
})
.for_each(|(button, camera)| {
if camera.is_active {
commands.entity(button).insert(ui::Active);
} else {
commands.entity(button).remove::<ui::Active>();
}
});
}
pub fn ui_control_active_camera(
events: Query<
(&Interaction, &ui::TargetEntity, Option<&ui::Active>),
(With<Button>, Changed<Interaction>),
>,
mut cameras: Query<(Entity, &mut Camera)>, mut cameras: Query<(Entity, &mut Camera)>,
) { ) {
events.iter().for_each(|ui::TargetEntity { entity }| { events
cameras.iter_mut().for_each(|(this_entity, mut camera)| { .iter()
if this_entity == *entity { .filter_map(|(&interaction, ui::TargetEntity { entity }, active)| {
info!("Marking {:?} as active camera", entity); (interaction == Interaction::Pressed).then_some((entity, active))
camera.is_active = true; })
.for_each(|(&entity, active)| {
cameras.iter_mut().for_each(|(this, mut camera)| {
if this == entity {
camera.is_active = !active.is_some();
} else { } else {
info!("Marking {:?} as inactive camera", entity);
camera.is_active = false; camera.is_active = false;
} }
}); });

@ -41,6 +41,7 @@ pub fn ui_inactive<T: Asset>(
mut commands: Commands, mut commands: Commands,
) { ) {
events.iter().for_each(|_| { events.iter().for_each(|_| {
info!("Handle entity removed");
targets targets
.iter() .iter()
.find_map(|(entity, ui::TargetAsset { handle })| { .find_map(|(entity, ui::TargetAsset { handle })| {

@ -8,10 +8,10 @@ impl Plugin for EditorScenePlugin {
app.add_event::<ControlScene>() app.add_event::<ControlScene>()
.add_systems(Update, sync_asset_buttons::<Scene>) .add_systems(Update, sync_asset_buttons::<Scene>)
.add_systems(Update, sync_remove_asset_buttons::<Scene>) .add_systems(Update, sync_remove_asset_buttons::<Scene>)
.add_systems(Update, ui_active::<Scene>)
.add_systems(Update, ui_inactive::<Scene>)
.add_systems(Update, add_scenes_ui) .add_systems(Update, add_scenes_ui)
.add_systems(Update, remove_scenes_ui) .add_systems(Update, remove_scenes_ui)
.add_systems(Update, sync_asset_buttons::<AudioSource>)
.add_systems(Update, sync_remove_asset_buttons::<AudioSource>)
.add_systems(Update, control_scene) .add_systems(Update, control_scene)
.add_systems(Update, ui_control_scene); .add_systems(Update, ui_control_scene);
} }

Loading…
Cancel
Save