editor: delete

This commit is contained in:
Pascal Engélibert 2022-08-26 15:57:32 +02:00
parent 9908406623
commit 139e75786b
Signed by: tuxmain
GPG key ID: 3504BC6D362F7DCA
2 changed files with 38 additions and 1 deletions

View file

@ -55,6 +55,7 @@ Edit the level `N: u32` with the command `bevyjam <N> e`.
* **Select**: left click to select, click in void to deselect, CTRL+click to select many, CTRL+A to select all
* **Move selection**: arrows to move one step, Shift+arrows to move continuously
* **Delete selection**: delete
* **Move camera**: CTRL+arrows
* **Save**: CTRL+S

View file

@ -22,7 +22,8 @@ impl Plugin for EditorPlugin {
SystemSet::on_update(AppState::Editor)
.with_system(move_system)
.with_system(input_control_system)
.with_system(follow_ends_system),
.with_system(follow_ends_system)
.with_system(remove_system),
);
}
}
@ -61,6 +62,9 @@ struct RotatingFilterAngle(f32);
#[derive(Component)]
struct AbsorbingFilterColor(Color);
#[derive(Component)]
struct Removable;
// Bundles
#[derive(Bundle)]
@ -69,6 +73,9 @@ struct PlatformBundle {
mesh: ColorMesh2dBundle,
size: Size,
platform: Platform,
#[bundle]
pickable: PickableBundle,
removable: Removable,
}
#[derive(Bundle)]
@ -89,6 +96,7 @@ struct CharacterBundle {
#[bundle]
pickable: PickableBundle,
draggable: Draggable,
removable: Removable,
}
#[derive(Bundle)]
@ -97,6 +105,9 @@ struct AbsorbingFilterBundle {
mesh: ColorMesh2dBundle,
size: Size,
color: AbsorbingFilterColor,
#[bundle]
pickable: PickableBundle,
removable: Removable,
}
#[derive(Bundle)]
@ -107,6 +118,7 @@ struct RotatingFilterBundle {
#[bundle]
pickable: PickableBundle,
draggable: Draggable,
removable: Removable,
}
// Functions
@ -129,6 +141,8 @@ fn spawn_platform(
},
size: Size(size),
platform: Platform,
pickable: PickableBundle::default(),
removable: Removable,
})
.id();
let ends = Ends(
@ -207,6 +221,7 @@ fn spawn_character(
color: CharacterColor(color),
pickable: PickableBundle::default(),
draggable: Draggable,
removable: Removable,
})
.with_children(|c| {
c.spawn_bundle(Text2dBundle {
@ -245,6 +260,8 @@ fn spawn_absorbing_filter(
},
size: Size(size),
color: AbsorbingFilterColor(color),
pickable: PickableBundle::default(),
removable: Removable,
})
.id();
let ends = Ends(
@ -322,6 +339,7 @@ fn spawn_rotating_filter(
angle: RotatingFilterAngle(angle),
pickable: PickableBundle::default(),
draggable: Draggable,
removable: Removable,
})
.with_children(|c| {
c.spawn_bundle(Text2dBundle {
@ -584,6 +602,24 @@ fn move_system(
}
}
fn remove_system(
mut commands: Commands,
keyboard_input: Res<Input<KeyCode>>,
mut removable_query: Query<(Entity, &Selection, Option<&Ends>), With<Removable>>,
) {
if keyboard_input.just_released(KeyCode::Delete) {
for (entity, selection, ends) in removable_query.iter_mut() {
if selection.selected() {
commands.entity(entity).despawn_recursive();
if let Some(ends) = ends {
commands.entity(ends.0).despawn_recursive();
commands.entity(ends.1).despawn_recursive();
}
}
}
}
}
fn follow_ends_system(
mut meshes: ResMut<Assets<Mesh>>,
mut follower_query: Query<(&mut Transform, &mut Mesh2dHandle, &mut Size, &Ends)>,